From 0c36f63ca2f50aa8cd6c4e81a35e26e83d624dd6 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Tue, 1 Jul 2014 10:17:29 +0200 Subject: [PATCH 001/297] kernel: update to 3.10.46. --- lfs/linux | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lfs/linux b/lfs/linux index 6beb75c57..a0626d335 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.44 +VER = 3.10.46 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.44-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.46-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -36,7 +36,7 @@ DIR_APP = $(DIR_SRC)/$(THISAPP) CFLAGS = CXXFLAGS = -PAK_VER = 51 +PAK_VER = 52 DEPS = "" VERSUFIX=ipfire$(KCFG) @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 8a4006eff3bbd8aff58fe4b443223e7a +$(DL_FILE)_MD5 = 0e0bc31f197f52e3d63633021902bb49 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = 07e5d812146063ed5b2ce49d0d24099b +$(GRS_PATCHES)_MD5 = fd2177f9aef6b74a1c31c57e56046c8c install : $(TARGET) From 46c1880c4fddbc8a7725d946e3ff8b462e77baea Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Mon, 7 Jul 2014 10:18:08 +0200 Subject: [PATCH 002/297] kernel: update to 3.10.47. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index a0626d335..b2e637d26 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.46 +VER = 3.10.47 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.46-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.47-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 0e0bc31f197f52e3d63633021902bb49 +$(DL_FILE)_MD5 = 46ba3e383392afc1c3bc737a9df4250e rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = fd2177f9aef6b74a1c31c57e56046c8c +$(GRS_PATCHES)_MD5 = 99f79e6ebf1d704fa85e2d8a236771de install : $(TARGET) From f0fa1795c4fe1b3c2f0d9022f9ebf47a879c0970 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 9 Jul 2014 18:13:51 +0200 Subject: [PATCH 003/297] installer: Remove mountsource.sh A small library for hardware-related things has been created and uses libudev for listing all available devices. --- config/rootfiles/installer/udev | 1 + lfs/installer | 4 +- src/install+setup/install/Makefile | 6 +- src/install+setup/install/downloadsource.sh | 9 +- src/install+setup/install/hw.c | 117 ++++++++++++++++++++ src/install+setup/install/hw.h | 41 +++++++ src/install+setup/install/main.c | 45 ++++++-- src/install+setup/install/mountsource.sh | 74 ------------- 8 files changed, 199 insertions(+), 98 deletions(-) create mode 120000 config/rootfiles/installer/udev create mode 100644 src/install+setup/install/hw.c create mode 100644 src/install+setup/install/hw.h delete mode 100644 src/install+setup/install/mountsource.sh diff --git a/config/rootfiles/installer/udev b/config/rootfiles/installer/udev new file mode 120000 index 000000000..d96e0b708 --- /dev/null +++ b/config/rootfiles/installer/udev @@ -0,0 +1 @@ +../common/udev \ No newline at end of file diff --git a/lfs/installer b/lfs/installer index c02e0bac5..29095eb69 100644 --- a/lfs/installer +++ b/lfs/installer @@ -61,12 +61,10 @@ $(TARGET) : -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \ -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"' -DKERNEL_VERSION='\"$(KVER)\"'" cd $(DIR_APP)/install && install -v -m 0755 install probenic.sh \ - downloadsource.sh mountsource.sh mountdest.sh /install/initrd/bin + downloadsource.sh mountdest.sh /install/initrd/bin #Patch ISO Name for download ... sed -i -e "s|ipfire.iso|download.ipfire.org/releases/ipfire-2.x/$(VERSION)-core$(CORE)/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso|g" \ /install/initrd/bin/downloadsource.sh #Patch version for mediacheck ... - sed -i -e "s|FullIPFireVersion|$(SNAME)-$(VERSION)-core$(CORE)|g" \ - /install/initrd/bin/mountsource.sh @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/install+setup/install/Makefile b/src/install+setup/install/Makefile index 89106de22..c8aa01e5c 100644 --- a/src/install+setup/install/Makefile +++ b/src/install+setup/install/Makefile @@ -20,12 +20,12 @@ CC = gcc -CFLAGS = -Os -Wall +CFLAGS = -O2 -Wall INCLUDE = LD = gcc LDFLAGS = -LIBS = -lnewt -lslang -lpci +LIBS = -lnewt -lslang -lpci -ludev COMPILE = $(CC) -c $(INCLUDE) $(CFLAGS) @@ -40,7 +40,7 @@ clean : ###### -OBJS=main.o config.o ../libsmooth/libsmooth.o unattended.o +OBJS=main.o config.o ../libsmooth/libsmooth.o unattended.o hw.o install: $(OBJS) $(LINK) $(OBJS) -o $@ $(LIBS) diff --git a/src/install+setup/install/downloadsource.sh b/src/install+setup/install/downloadsource.sh index 5c6360dca..1f6c432dd 100644 --- a/src/install+setup/install/downloadsource.sh +++ b/src/install+setup/install/downloadsource.sh @@ -47,13 +47,8 @@ echo "Checking download..." md5_file=`md5sum /tmp/download.iso | cut -d" " -f1` md5_down=`cat /tmp/download.iso.md5 | cut -d" " -f1` if [ "$md5_file" == "$md5_down" ]; then - mount /tmp/download.iso -o loop /cdrom 2> /dev/null - if [ -n "$(ls /cdrom/ipfire-*.tlz 2>/dev/null)" ]; then - echo -n "null" > /tmp/source_device - echo "Found tarball in /tmp/download.iso" - exit 0 - fi - umount /cdrom 2> /dev/null + echo -n "/tmp/download.iso" > /tmp/source_device + exit 0 fi echo "Error - SKIP" exit 10 diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c new file mode 100644 index 000000000..eb52f889d --- /dev/null +++ b/src/install+setup/install/hw.c @@ -0,0 +1,117 @@ +/*############################################################################# +# # +# IPFire - An Open Source Firewall Distribution # +# Copyright (C) 2014 IPFire development team # +# # +# 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 3 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, see . # +# # +#############################################################################*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "hw.h" + +struct hw* hw_init() { + struct hw* hw = malloc(sizeof(*hw)); + assert(hw); + + // Initialize libudev + hw->udev = udev_new(); + if (!hw->udev) { + fprintf(stderr, "Could not create udev instance\n"); + exit(1); + } + + return hw; +} + +void hw_free(struct hw* hw) { + if (hw->udev) + udev_unref(hw->udev); + + free(hw); +} + +static int strstartswith(const char* a, const char* b) { + return (strncmp(a, b, strlen(b)) == 0); +} + +int hw_mount(const char* source, const char* target, int flags) { + return mount(source, target, "iso9660", flags, NULL); +} + +int hw_umount(const char* target) { + return umount2(target, MNT_DETACH); +} + +static int hw_test_source_medium(const char* path) { + int ret = hw_mount(path, SOURCE_MOUNT_PATH, MS_RDONLY); + + // If the source could not be mounted we + // cannot proceed. + if (ret) + return ret; + + // Check if the test file exists. + ret = access(SOURCE_TEST_FILE, F_OK); + + // Umount the test device. + hw_umount(SOURCE_MOUNT_PATH); + + return ret; +} + +char* hw_find_source_medium(struct hw* hw) { + char* ret = NULL; + + struct udev_enumerate* enumerate = udev_enumerate_new(hw->udev); + + udev_enumerate_add_match_subsystem(enumerate, "block"); + udev_enumerate_scan_devices(enumerate); + + struct udev_list_entry* devices = udev_enumerate_get_list_entry(enumerate); + + struct udev_list_entry* dev_list_entry; + udev_list_entry_foreach(dev_list_entry, devices) { + const char* path = udev_list_entry_get_name(dev_list_entry); + struct udev_device* dev = udev_device_new_from_syspath(hw->udev, path); + + const char* dev_path = udev_device_get_devnode(dev); + + // Skip everything what we cannot work with + if (strstartswith(dev_path, "/dev/loop") || strstartswith(dev_path, "/dev/fd") || + strstartswith(dev_path, "/dev/ram")) + continue; + + if (hw_test_source_medium(dev_path)) { + ret = strdup(dev_path); + } + + udev_device_unref(dev); + + // If a suitable device was found the search will end. + if (ret) + break; + } + + udev_enumerate_unref(enumerate); + + return ret; +} diff --git a/src/install+setup/install/hw.h b/src/install+setup/install/hw.h new file mode 100644 index 000000000..3ef0d18bf --- /dev/null +++ b/src/install+setup/install/hw.h @@ -0,0 +1,41 @@ +/*############################################################################# +# # +# IPFire - An Open Source Firewall Distribution # +# Copyright (C) 2014 IPFire development team # +# # +# 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 3 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, see . # +# # +#############################################################################*/ + +#ifndef HEADER_HW_H +#define HEADER_HW_H + +#include + +#define SOURCE_MOUNT_PATH "/cdrom" +#define SOURCE_TEST_FILE SOURCE_MOUNT_PATH "/" VERSION ".media" + +struct hw { + struct udev *udev; +}; + +struct hw* hw_init(); +void hw_free(struct hw* hw); + +int hw_mount(const char* source, const char* target, int flags); +int hw_umount(const char* target); + +char* hw_find_source_medium(struct hw* hw); + +#endif /* HEADER_HW_H */ diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 309e006c9..b053978f0 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -9,8 +9,16 @@ * */ -#include "install.h" #define _GNU_SOURCE + +#include +#include +#include +#include +#include + +#include "hw.h" +#include "install.h" #define INST_FILECOUNT 21000 #define UNATTENDED_CONF "/cdrom/boot/unattended.conf" @@ -40,8 +48,8 @@ extern char *pl_tr[]; extern char *ru_tr[]; extern char *tr_tr[]; -int main(int argc, char *argv[]) -{ +int main(int argc, char *argv[]) { + struct hw* hw = hw_init(); char discl_msg[40000] = "Disclaimer\n"; @@ -49,7 +57,8 @@ int main(int argc, char *argv[]) char *shortlangnames[] = { "de", "en", "fr", "es", "nl", "pl", "ru", "tr", NULL }; char **langtrs[] = { de_tr, en_tr, fr_tr, es_tr, nl_tr, pl_tr, ru_tr, tr_tr, NULL }; char hdletter; - char harddrive[30], sourcedrive[5]; /* Device holder. */ + char harddrive[30]; /* Device holder. */ + char* sourcedrive = NULL; char harddrive_info[STRING_SIZE]; /* Additional infos about target */ struct devparams hdparams, cdromparams; /* Params for CDROM and HD */ int rc = 0; @@ -70,7 +79,7 @@ int main(int argc, char *argv[]) FILE *handle, *cmdfile, *copying; char line[STRING_SIZE]; char string[STRING_SIZE]; - long memory = 0, disk = 0, free; + long memory = 0, disk = 0; long system_partition, boot_partition, root_partition, swap_file; int scsi_disk = 0; char *yesnoharddisk[3]; // char *yesnoharddisk = { "NO", "YES", NULL }; @@ -150,20 +159,31 @@ int main(int argc, char *argv[]) newtWinMessage(title, ctr[TR_OK], message); } - mysystem("/bin/mountsource.sh"); + /* Search for a source drive that holds the right + * version of the image we are going to install. */ + sourcedrive = hw_find_source_medium(hw); - if ((handle = fopen("/tmp/source_device", "r")) == NULL) { + fprintf(flog, "Source drive: %s\n", sourcedrive); + if (!sourcedrive) { newtWinMessage(title, ctr[TR_OK], ctr[TR_NO_LOCAL_SOURCE]); - runcommandwithstatus("/bin/downloadsource.sh",ctr[TR_DOWNLOADING_ISO]); + runcommandwithstatus("/bin/downloadsource.sh", ctr[TR_DOWNLOADING_ISO]); if ((handle = fopen("/tmp/source_device", "r")) == NULL) { errorbox(ctr[TR_DOWNLOAD_ERROR]); goto EXIT; } + + fgets(sourcedrive, 5, handle); + fclose(handle); } - fgets(sourcedrive, 5, handle); - fprintf(flog, "Source drive: %s\n", sourcedrive); - fclose(handle); + assert(sourcedrive); + + int r = hw_mount(sourcedrive, SOURCE_MOUNT_PATH, MS_RDONLY); + if (r) { + fprintf(flog, "Could not mount %s to %s\n", sourcedrive, SOURCE_MOUNT_PATH); + fprintf(flog, strerror(errno)); + exit(1); + } if (!unattended) { // Read the license file. @@ -629,5 +649,8 @@ EXIT: if (!(allok)) system("/etc/halt"); + // Free resources + free(sourcedrive); + return 0; } diff --git a/src/install+setup/install/mountsource.sh b/src/install+setup/install/mountsource.sh deleted file mode 100644 index c3350209c..000000000 --- a/src/install+setup/install/mountsource.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/sh -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007-2014 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -#lfs patch source here... -version=FullIPFireVersion -# - -echo "Scanning source media" - -# scan all Block devices -for DEVICE in `find /sys/block/* -maxdepth 0 ! -name fd* ! -name loop* ! -name ram* -exec basename {} \;` -do - mount /dev/${DEVICE} /cdrom 2> /dev/null - if [ -n "$(ls /cdrom/${version}.media 2>/dev/null)" ]; then - echo -n ${DEVICE} > /tmp/source_device - echo "Found ${version} on ${DEVICE}" - exit 0 - else - echo "not found on ${DEVICE} - SKIP" - fi - umount /cdrom 2> /dev/null -done - -# scan all Partitions on block devices -for DEVICE in `find /sys/block/* -maxdepth 0 ! -name fd* ! -name loop* ! -name ram* -exec basename {} \;` -do - for DEVICEP in $(ls /dev/${DEVICE}? 2>/dev/null | sed "s/\/dev\///");do - mount /dev/${DEVICEP} /cdrom 2> /dev/null - if [ -n "$(ls /cdrom/${version}.media 2>/dev/null)" ]; then - echo -n ${DEVICEP} > /tmp/source_device - echo "Found ${version} on ${DEVICEP}" - exit 0 - else - echo "not found on ${DEVICEP} - SKIP" - fi - umount /cdrom 2> /dev/null - done -done - -# scan all Partitions on raid/mmc devices -for DEVICE in `find /sys/block/* -maxdepth 0 ! -name fd* ! -name loop* ! -name ram* -exec basename {} \;` -do - for DEVICEP in $(ls /dev/${DEVICE}p? 2>/dev/null | sed "s/\/dev\///");do - mount /dev/${DEVICEP} /cdrom 2> /dev/null - if [ -n "$(ls /cdrom/${version}.media 2>/dev/null)" ]; then - echo -n ${DEVICEP} > /tmp/source_device - echo "Found ${version} on ${DEVICEP}" - exit 0 - else - echo "not found on ${DEVICEP} - SKIP" - fi - umount /cdrom 2> /dev/null - done -done - -exit 10 From 60984f8c47974e2cfb4e8eb04a50b6a78ab6af18 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 10 Jul 2014 12:25:22 +0200 Subject: [PATCH 004/297] kernel: update to 3.10.48. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index b2e637d26..f4e977c61 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.47 +VER = 3.10.48 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.47-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.48-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 46ba3e383392afc1c3bc737a9df4250e +$(DL_FILE)_MD5 = 9dfef3b51013ba9066a6438f0f6f71f6 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = 99f79e6ebf1d704fa85e2d8a236771de +$(GRS_PATCHES)_MD5 = a1b66e5fbf9cad1b750ca2bcb306ba37 install : $(TARGET) From d7dd283b89e612266099ba95f3f1c2a7a0c867e4 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 20 Jul 2014 16:36:41 +0200 Subject: [PATCH 005/297] Allow to select the target disk and allow selecting multiple of them. --- langs/de/install/lang_de.c | 16 ++ langs/en/install/lang_en.c | 18 ++ langs/es/install/lang_es.c | 16 ++ langs/fr/install/lang_fr.c | 16 ++ langs/nl/install/lang_nl.c | 16 ++ langs/pl/install/lang_pl.c | 16 ++ langs/ru/install/lang_ru.c | 16 ++ langs/tr/install/lang_tr.c | 16 ++ lfs/installer | 2 +- src/install+setup/install/Makefile | 2 +- src/install+setup/install/hw.c | 200 ++++++++++++++++ src/install+setup/install/hw.h | 39 ++++ src/install+setup/install/install.h | 11 - src/install+setup/install/main.c | 338 ++++++++++++++++++---------- 14 files changed, 592 insertions(+), 130 deletions(-) diff --git a/langs/de/install/lang_de.c b/langs/de/install/lang_de.c index 8c935865e..5c7032490 100644 --- a/langs/de/install/lang_de.c +++ b/langs/de/install/lang_de.c @@ -333,6 +333,22 @@ char *de_tr[] = { "Keine GRÜNE Schnittstelle zugewiesen.", /* TR_NO_HARDDISK */ "Keine Festplatte gefunden.", +/* TR_DISK_SELECTION */ +"Festplattenauswahl", +/* TR_DISK_SELECTION_MSG */ +"Wählen Sie die Festplatte(n), auf die Sie IPFire installieren möchten. Diese wird dann zuerst partitioniert und danach wird ein Dateisystem auf die Partitionen installiert.\n\nALLE DATEN AUF DER FESTPLATTE WERDEN GELÖSCHT.", +/* TR_NO_DISK_SELECTED */ +"Es wurde kein Datenträger ausgewählt.\n\nBitte wählen Sie einen oder mehrere Festplatten aus, um mit der Installation fortzufahren.", +/* TR_DISK_SETUP */ +"Festplatten-Setup", +/* TR_DISK_SETUP_DESC */ +"Das Installationsprogramm wird nun die ausgewählte Festplatte vorbereiten:\n\n %s\n\nMöchten Sie fortfahren?", +/* TR_RAID_SETUP */ +"RAID-Setup", +/* TR_RAID_SETUP_DESC */ +"Das Installationsprogramm wird nun eine RAID-Konfiguration auf den ausgewählten Festplatten anlegen:\n\n %s\n %s\n\nMöchten Sie fortfahren?", +/* TR_DELETE_ALL_DATA */ +"Alle Daten löschen", /* TR_NO_IPCOP_TARBALL_FOUND */ "Auf dem Webserver wurde kein ipcop-Tarball gefunden.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/en/install/lang_en.c b/langs/en/install/lang_en.c index 12ac4b557..1b60505c9 100644 --- a/langs/en/install/lang_en.c +++ b/langs/en/install/lang_en.c @@ -329,6 +329,24 @@ char *en_tr[] = { "No GREEN interface assigned.", /* TR_NO_HARDDISK */ "No hard disk found.", +/* TR_DISK_SELECTION */ +"Disk Selection", +/* TR_DISK_SELECTION_MSG */ +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", +/* TR_NO_DISK_SELECTED */ +"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", +/* TR_DISK_SETUP */ +"Disk Setup", +/* TR_DISK_SETUP_DESC */ +"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", +/* TR_RAID_SETUP */ +"RAID Setup", +/* TR_RAID_SETUP_DESC */ +"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", +/* TR_DELETE_ALL_DATA */ +"Delete all data", +/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ +"You disk configuration is currently not supported.", /* TR_NO_IPCOP_TARBALL_FOUND */ "No ipcop tarball found on Web Server.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/es/install/lang_es.c b/langs/es/install/lang_es.c index 4a08748cc..49eaaf8f4 100644 --- a/langs/es/install/lang_es.c +++ b/langs/es/install/lang_es.c @@ -325,6 +325,22 @@ char *es_tr[] = { "No se asignó interfaz GREEN.", /* TR_NO_HARDDISK */ "No se encontró unidad de disco duro.", +/* TR_DISK_SELECTION */ +"Disk Selection", +/* TR_DISK_SELECTION_MSG */ +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", +/* TR_NO_DISK_SELECTED */ +"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", +/* TR_DISK_SETUP */ +"Disk Setup", +/* TR_DISK_SETUP_DESC */ +"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", +/* TR_RAID_SETUP */ +"RAID Setup", +/* TR_RAID_SETUP_DESC */ +"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", +/* TR_DELETE_ALL_DATA */ +"Delete all data", /* TR_NO_IPCOP_TARBALL_FOUND */ "No se encontró ningun archivo tarball de ipcop en el servidor web", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/fr/install/lang_fr.c b/langs/fr/install/lang_fr.c index 188e0fd1a..62085be9b 100644 --- a/langs/fr/install/lang_fr.c +++ b/langs/fr/install/lang_fr.c @@ -325,6 +325,22 @@ char *fr_tr[] = { "Interface VERTE non attribuée.", /* TR_NO_HARDDISK */ "Aucun disque dur trouvé.", +/* TR_DISK_SELECTION */ +"Disk Selection", +/* TR_DISK_SELECTION_MSG */ +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", +/* TR_NO_DISK_SELECTED */ +"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", +/* TR_DISK_SETUP */ +"Disk Setup", +/* TR_DISK_SETUP_DESC */ +"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", +/* TR_RAID_SETUP */ +"RAID Setup", +/* TR_RAID_SETUP_DESC */ +"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", +/* TR_DELETE_ALL_DATA */ +"Delete all data", /* TR_NO_IPCOP_TARBALL_FOUND */ "Aucun tarball ipcop trouvé sur le serveur Web.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/nl/install/lang_nl.c b/langs/nl/install/lang_nl.c index cd43fc554..cc96f47b9 100644 --- a/langs/nl/install/lang_nl.c +++ b/langs/nl/install/lang_nl.c @@ -329,6 +329,22 @@ char *nl_tr[] = { "Er is geen GROENE interface toegewezen.", /* TR_NO_HARDDISK */ "Geen vaste schijf gevonden.", +/* TR_DISK_SELECTION */ +"Disk Selection", +/* TR_DISK_SELECTION_MSG */ +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", +/* TR_NO_DISK_SELECTED */ +"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", +/* TR_DISK_SETUP */ +"Disk Setup", +/* TR_DISK_SETUP_DESC */ +"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", +/* TR_RAID_SETUP */ +"RAID Setup", +/* TR_RAID_SETUP_DESC */ +"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", +/* TR_DELETE_ALL_DATA */ +"Delete all data", /* TR_NO_IPCOP_TARBALL_FOUND */ "Er is geen ipcop tarball gevonden op de webserver.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/pl/install/lang_pl.c b/langs/pl/install/lang_pl.c index dddf551a6..2fc672159 100644 --- a/langs/pl/install/lang_pl.c +++ b/langs/pl/install/lang_pl.c @@ -325,6 +325,22 @@ char *pl_tr[] = { "Nie przypisano interfejsu GREEN.", /* TR_NO_HARDDISK */ "Nie znaleziono dysku twardego.", +/* TR_DISK_SELECTION */ +"Disk Selection", +/* TR_DISK_SELECTION_MSG */ +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", +/* TR_NO_DISK_SELECTED */ +"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", +/* TR_DISK_SETUP */ +"Disk Setup", +/* TR_DISK_SETUP_DESC */ +"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", +/* TR_RAID_SETUP */ +"RAID Setup", +/* TR_RAID_SETUP_DESC */ +"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", +/* TR_DELETE_ALL_DATA */ +"Delete all data", /* TR_NO_IPCOP_TARBALL_FOUND */ "Nie znaleziono archiwum tar ipcop na serwerze Web.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/ru/install/lang_ru.c b/langs/ru/install/lang_ru.c index 40293a209..0b50ea1aa 100644 --- a/langs/ru/install/lang_ru.c +++ b/langs/ru/install/lang_ru.c @@ -323,6 +323,22 @@ char *ru_tr[] = { "Не назначен GREEN интерфейс.", /* TR_NO_HARDDISK */ "Не найден жсткий диск.", +/* TR_DISK_SELECTION */ +"Disk Selection", +/* TR_DISK_SELECTION_MSG */ +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", +/* TR_NO_DISK_SELECTED */ +"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", +/* TR_DISK_SETUP */ +"Disk Setup", +/* TR_DISK_SETUP_DESC */ +"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", +/* TR_RAID_SETUP */ +"RAID Setup", +/* TR_RAID_SETUP_DESC */ +"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", +/* TR_DELETE_ALL_DATA */ +"Delete all data", /* TR_NO_IPCOP_TARBALL_FOUND */ "На сервере не найден архив ipcop.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/tr/install/lang_tr.c b/langs/tr/install/lang_tr.c index 814949a84..b02e9fa66 100644 --- a/langs/tr/install/lang_tr.c +++ b/langs/tr/install/lang_tr.c @@ -329,6 +329,22 @@ char *tr_tr[] = { "Hiçbir YEŞİL ara birim atanmamış.", /* TR_NO_HARDDISK */ "Sabit disk bulunamadı.", +/* TR_DISK_SELECTION */ +"Disk Selection", +/* TR_DISK_SELECTION_MSG */ +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", +/* TR_NO_DISK_SELECTED */ +"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", +/* TR_DISK_SETUP */ +"Disk Setup", +/* TR_DISK_SETUP_DESC */ +"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", +/* TR_RAID_SETUP */ +"RAID Setup", +/* TR_RAID_SETUP_DESC */ +"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", +/* TR_DELETE_ALL_DATA */ +"Delete all data", /* TR_NO_IPCOP_TARBALL_FOUND */ "Web sunucuda hiçbir ipfire arşivi bulunamadı.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/lfs/installer b/lfs/installer index 29095eb69..1fc205885 100644 --- a/lfs/installer +++ b/lfs/installer @@ -57,7 +57,7 @@ $(TARGET) : cd $(DIR_APP)/libsmooth && make CFLAGS="-Os -fomit-frame-pointer -Wall \ -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \ -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'" - cd $(DIR_APP)/install && make CFLAGS="-Os -fomit-frame-pointer -Wall \ + cd $(DIR_APP)/install && make CFLAGS="-Os -std=gnu99 -fomit-frame-pointer -Wall \ -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \ -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"' -DKERNEL_VERSION='\"$(KVER)\"'" cd $(DIR_APP)/install && install -v -m 0755 install probenic.sh \ diff --git a/src/install+setup/install/Makefile b/src/install+setup/install/Makefile index c8aa01e5c..3feb63542 100644 --- a/src/install+setup/install/Makefile +++ b/src/install+setup/install/Makefile @@ -25,7 +25,7 @@ INCLUDE = LD = gcc LDFLAGS = -LIBS = -lnewt -lslang -lpci -ludev +LIBS = -lnewt -lslang -lpci -ludev -lblkid COMPILE = $(CC) -c $(INCLUDE) $(CFLAGS) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index eb52f889d..1fca9fdfa 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -19,13 +19,19 @@ #############################################################################*/ #include +#include +#include #include +#include #include #include #include +#include #include #include +#include + #include "hw.h" struct hw* hw_init() { @@ -115,3 +121,197 @@ char* hw_find_source_medium(struct hw* hw) { return ret; } + +static struct hw_disk** hw_create_disks() { + struct hw_disk** ret = malloc(sizeof(*ret) * (HW_MAX_DISKS + 1)); + + return ret; +} + +static unsigned long long hw_block_device_get_size(const char* dev) { + int fd = open(dev, O_RDONLY); + if (fd < 0) + return 0; + + unsigned long long size = blkid_get_dev_size(fd); + close(fd); + + return size; +} + +struct hw_disk** hw_find_disks(struct hw* hw) { + struct hw_disk** ret = hw_create_disks(); + struct hw_disk** disks = ret; + + struct udev_enumerate* enumerate = udev_enumerate_new(hw->udev); + + udev_enumerate_add_match_subsystem(enumerate, "block"); + udev_enumerate_scan_devices(enumerate); + + struct udev_list_entry* devices = udev_enumerate_get_list_entry(enumerate); + + struct udev_list_entry* dev_list_entry; + unsigned int i = HW_MAX_DISKS; + udev_list_entry_foreach(dev_list_entry, devices) { + const char* path = udev_list_entry_get_name(dev_list_entry); + struct udev_device* dev = udev_device_new_from_syspath(hw->udev, path); + + const char* dev_path = udev_device_get_devnode(dev); + + // Skip everything what we cannot work with + if (strstartswith(dev_path, "/dev/loop") || strstartswith(dev_path, "/dev/fd") || + strstartswith(dev_path, "/dev/ram") || strstartswith(dev_path, "/dev/sr")) { + udev_device_unref(dev); + continue; + } + + // DEVTYPE must be disk (otherwise we will see all sorts of partitions here) + const char* devtype = udev_device_get_property_value(dev, "DEVTYPE"); + if (devtype && (strcmp(devtype, "disk") != 0)) { + udev_device_unref(dev); + continue; + } + + // Skip all source mediums + if (hw_test_source_medium(dev_path) == 0) { + udev_device_unref(dev); + continue; + } + + // Skip devices with a size of zero + unsigned long long size = hw_block_device_get_size(dev_path); + if (size == 0) { + udev_device_unref(dev); + continue; + } + + struct hw_disk* disk = malloc(sizeof(*disk)); + if (disk == NULL) + return NULL; + + disk->ref = 1; + + strncpy(disk->path, dev_path, sizeof(disk->path)); + + disk->size = size; + + // Vendor + const char* vendor = udev_device_get_property_value(dev, "ID_VENDOR"); + if (!vendor) + vendor = udev_device_get_sysattr_value(dev, "vendor"); + if (!vendor) + vendor = udev_device_get_sysattr_value(dev, "manufacturer"); + if (!vendor) + vendor = "N/A"; + + strncpy(disk->vendor, vendor, sizeof(disk->vendor)); + + // Model + const char* model = udev_device_get_property_value(dev, "ID_MODEL"); + if (!model) + model = udev_device_get_sysattr_value(dev, "model"); + if (!model) + model = udev_device_get_sysattr_value(dev, "product"); + if (!model) + model = "N/A"; + + strncpy(disk->model, model, sizeof(disk->model)); + + snprintf(disk->description, sizeof(disk->description), + "%4.1fGB %s - %s", (double)disk->size / pow(1024, 3), + disk->vendor, disk->model); + + *disks++ = disk; + + if (--i == 0) + break; + + udev_device_unref(dev); + } + + udev_enumerate_unref(enumerate); + + *disks = NULL; + + return ret; +} + +void hw_free_disks(struct hw_disk** disks) { + struct hw_disk** disk = disks; + + while (*disk != NULL) { + if (--(*disk)->ref == 0) + free(*disk); + + disk++; + } + + free(disks); +} + +unsigned int hw_count_disks(struct hw_disk** disks) { + unsigned int ret = 0; + + while (*disks++) + ret++; + + return ret; +} + +struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection) { + struct hw_disk** ret = hw_create_disks(); + struct hw_disk** selected_disks = ret; + + unsigned int num_disks = hw_count_disks(disks); + + for (unsigned int i = 0; i < num_disks; i++) { + if (selection && selection[i]) { + struct hw_disk *selected_disk = disks[i]; + selected_disk->ref++; + + *selected_disks++ = selected_disk; + } + } + + // Set sentinel + *selected_disks = NULL; + + return ret; +} + +struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks) { + struct hw_destination* dest = malloc(sizeof(*dest)); + + if (part_type == HW_PART_TYPE_NORMAL) { + dest->disk1 = *disks; + dest->disk2 = NULL; + + strncpy(dest->path, dest->disk1->path, sizeof(dest->path)); + + } else if (part_type == HW_PART_TYPE_RAID1) { + dest->disk1 = *disks++; + dest->disk2 = *disks; + + snprintf(dest->path, sizeof(dest->path), "/dev/md0"); + } + + // Is this a RAID device? + dest->is_raid = (part_type > HW_PART_TYPE_NORMAL); + + // Set partition names + char path[DEV_SIZE]; + snprintf(path, sizeof(path), "%s%s", dest->path, (dest->is_raid) ? "p" : ""); + snprintf(dest->part_boot, sizeof(dest->part_boot), "%s1", path); + snprintf(dest->part_swap, sizeof(dest->part_swap), "%s2", path); + snprintf(dest->part_root, sizeof(dest->part_root), "%s3", path); + snprintf(dest->part_data, sizeof(dest->part_data), "%s4", path); + + if (dest->is_raid) { + dest->size = (dest->disk1->size >= dest->disk2->size) ? + dest->disk1->size : dest->disk2->size; + } else { + dest->size = dest->disk1->size; + } + + return dest; +} diff --git a/src/install+setup/install/hw.h b/src/install+setup/install/hw.h index 3ef0d18bf..d5549a4c7 100644 --- a/src/install+setup/install/hw.h +++ b/src/install+setup/install/hw.h @@ -26,10 +26,44 @@ #define SOURCE_MOUNT_PATH "/cdrom" #define SOURCE_TEST_FILE SOURCE_MOUNT_PATH "/" VERSION ".media" +#define HW_MAX_DISKS 32 +#define STRING_SIZE 1024 +#define DEV_SIZE 128 + +#define HW_PART_TYPE_NORMAL 0 +#define HW_PART_TYPE_RAID1 1 + struct hw { struct udev *udev; }; +struct hw_disk { + char path[DEV_SIZE]; + unsigned long long size; + + char description[STRING_SIZE]; + char vendor[STRING_SIZE]; + char model[STRING_SIZE]; + + // Reference counter + int ref; +}; + +struct hw_destination { + char path[DEV_SIZE]; + unsigned long long size; + + int is_raid; + + const struct hw_disk* disk1; + const struct hw_disk* disk2; + + char part_boot[DEV_SIZE]; + char part_swap[DEV_SIZE]; + char part_root[DEV_SIZE]; + char part_data[DEV_SIZE]; +}; + struct hw* hw_init(); void hw_free(struct hw* hw); @@ -38,4 +72,9 @@ int hw_umount(const char* target); char* hw_find_source_medium(struct hw* hw); +struct hw_disk** hw_find_disks(struct hw* hw); +void hw_free_disks(struct hw_disk** disks); +unsigned int hw_count_disks(struct hw_disk** disks); +struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection); + #endif /* HEADER_HW_H */ diff --git a/src/install+setup/install/install.h b/src/install+setup/install/install.h index a6e110f44..500d435f7 100644 --- a/src/install+setup/install/install.h +++ b/src/install+setup/install/install.h @@ -15,17 +15,6 @@ #define IDE_HD 2 #define IDE_UNKNOWN 3 -/* CDROMS and harddisks. */ -struct devparams -{ - char devnode_disk[30]; // when single partition is addressed - char devnode_part[30]; // when the RAID partition is addressed - char devnode_disk_run[30]; // the same dev but after installation - char devnode_part_run[30]; - char modulename[STRING_SIZE]; - char options[STRING_SIZE]; -}; - /* config.c */ int write_disk_configs(struct devparams *dp); int write_lang_configs( char *lang); diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index b053978f0..0386cf5cd 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -48,6 +48,107 @@ extern char *pl_tr[]; extern char *ru_tr[]; extern char *tr_tr[]; +static int newtChecklist(const char* title, const char* message, + unsigned int width, unsigned int height, unsigned int num_entries, + const char** entries, int* states) { + int ret; + const int list_height = 4; + + char cbstates[num_entries]; + + for (unsigned int i = 0; i < num_entries; i++) { + cbstates[i] = states[i] ? '*' : ' '; + } + + newtCenteredWindow(width, height, title); + + newtComponent textbox = newtTextbox(1, 1, width - 2, height - 6 - list_height, + NEWT_FLAG_WRAP); + newtTextboxSetText(textbox, message); + + int top = newtTextboxGetNumLines(textbox) + 2; + + newtComponent form = newtForm(NULL, NULL, 0); + + newtComponent sb = NULL; + if (list_height < num_entries) { + sb = newtVerticalScrollbar( + width - 4, top + 1, list_height, + NEWT_COLORSET_CHECKBOX, NEWT_COLORSET_ACTCHECKBOX); + + newtFormAddComponent(form, sb); + } + + newtComponent subform = newtForm(sb, NULL, 0); + newtFormSetBackground(subform, NEWT_COLORSET_CHECKBOX); + + newtFormSetHeight(subform, list_height); + newtFormSetWidth(subform, width - 10); + + for (unsigned int i = 0; i < num_entries; i++) { + newtComponent cb = newtCheckbox(4, top + i, entries[i], cbstates[i], + NULL, &cbstates[i]); + + newtFormAddComponent(subform, cb); + } + + newtFormAddComponents(form, textbox, subform, NULL); + + newtComponent btn_okay = newtButton((width - 18) / 3, height - 4, ctr[TR_OK]); + newtComponent btn_cancel = newtButton((width - 18) / 3 * 2 + 9, height - 4, ctr[TR_CANCEL]); + newtFormAddComponents(form, btn_okay, btn_cancel, NULL); + + newtComponent answer = newtRunForm(form); + + if ((answer == NULL) || (answer == btn_cancel)) { + ret = -1; + } else { + ret = 0; + + for (unsigned int i = 0; i < num_entries; i++) { + states[i] = (cbstates[i] != ' '); + + if (states[i]) + ret++; + } + } + + newtFormDestroy(form); + newtPopWindow(); + + return ret; +} + +static int newtWinOkCancel(const char* title, const char* message, int width, int height, + const char* btn_txt_ok, const char* btn_txt_cancel) { + int ret = 1; + + newtCenteredWindow(width, height, title); + + newtComponent form = newtForm(NULL, NULL, 0); + + newtComponent textbox = newtTextbox(1, 1, width - 2, height - 6, NEWT_FLAG_WRAP); + newtTextboxSetText(textbox, message); + newtFormAddComponent(form, textbox); + + newtComponent btn_ok = newtButton((width - 16) / 3, height - 4, btn_txt_ok); + newtComponent btn_cancel = newtButton((width - 16) / 3 * 2 + 9, height - 4, + btn_txt_cancel); + + newtFormAddComponents(form, btn_ok, btn_cancel, NULL); + + newtComponent answer = newtRunForm(form); + + if (answer == btn_ok) { + ret = 0; + } + + newtFormDestroy(form); + newtPopWindow(); + + return ret; +} + int main(int argc, char *argv[]) { struct hw* hw = hw_init(); @@ -56,46 +157,33 @@ int main(int argc, char *argv[]) { char *langnames[] = { "Deutsch", "English", "Français", "Español", "Nederlands", "Polski", "Русский", "Türkçe", NULL }; char *shortlangnames[] = { "de", "en", "fr", "es", "nl", "pl", "ru", "tr", NULL }; char **langtrs[] = { de_tr, en_tr, fr_tr, es_tr, nl_tr, pl_tr, ru_tr, tr_tr, NULL }; - char hdletter; - char harddrive[30]; /* Device holder. */ char* sourcedrive = NULL; - char harddrive_info[STRING_SIZE]; /* Additional infos about target */ - struct devparams hdparams, cdromparams; /* Params for CDROM and HD */ int rc = 0; char commandstring[STRING_SIZE]; char mkfscommand[STRING_SIZE]; char *fstypes[] = { "ext2", "ext3", "ext4", "ReiserFS", NULL }; int fstype = EXT4; int choice; - int i; - int found = 0; char shortlangname[10]; - char message[1000]; + char message[STRING_SIZE]; char title[STRING_SIZE]; int allok = 0; int allok_fastexit=0; - int raid_disk = 0; struct keyvalue *ethernetkv = initkeyvalues(); FILE *handle, *cmdfile, *copying; char line[STRING_SIZE]; char string[STRING_SIZE]; long memory = 0, disk = 0; long system_partition, boot_partition, root_partition, swap_file; - int scsi_disk = 0; - char *yesnoharddisk[3]; // char *yesnoharddisk = { "NO", "YES", NULL }; int unattended = 0; int serialconsole = 0; struct keyvalue *unattendedkv = initkeyvalues(); - int hardyn = 0; char restore_file[STRING_SIZE] = ""; setlocale (LC_ALL, ""); sethostname( SNAME , 10); - memset(&hdparams, 0, sizeof(struct devparams)); - memset(&cdromparams, 0, sizeof(struct devparams)); - /* Log file/terminal stuff. */ if (argc >= 2) { @@ -185,6 +273,14 @@ int main(int argc, char *argv[]) { exit(1); } + /* load unattended configuration */ + if (unattended) { + fprintf(flog, "unattended: Reading unattended.conf\n"); + + (void) readkeyvalues(unattendedkv, UNATTENDED_CONF); + findkey(unattendedkv, "RESTORE_FILE", restore_file); + } + if (!unattended) { // Read the license file. if (!(copying = fopen(LICENSE_FILE, "r"))) { @@ -201,87 +297,100 @@ int main(int argc, char *argv[]) { } } - i = 0; - while (found == 0) { - i++; - fprintf(flog, "Harddisk scan pass %i\n", i); + int part_type = HW_PART_TYPE_NORMAL; - switch (mysystem("/bin/mountdest.sh") % 255) { - case 0: // Found IDE disk - scsi_disk = 0; - raid_disk = 0; - found = 1; + // Scan for disks to install on. + struct hw_disk** disks = hw_find_disks(hw); + + struct hw_disk** selected_disks = NULL; + unsigned int num_selected_disks = 0; + + // Check how many disks have been found and what + // we can do with them. + unsigned int num_disks = hw_count_disks(disks); + + while (1) { + // no harddisks found + if (num_disks == 0) { + errorbox(ctr[TR_NO_HARDDISK]); + goto EXIT; + + // exactly one disk has been found + } else if (num_disks == 1) { + selected_disks = hw_select_disks(disks, NULL); + + // more than one usable disk has been found and + // the user needs to choose what to do with them + } else { + const char* disk_names[num_disks]; + int disk_selection[num_disks]; + + for (unsigned int i = 0; i < num_disks; i++) { + disk_names[i] = &disks[i]->description; + disk_selection[i] = 0; + } + + while (!selected_disks) { + rc = newtChecklist(ctr[TR_DISK_SELECTION], ctr[TR_DISK_SELECTION_MSG], + 50, 20, num_disks, disk_names, disk_selection); + + // Error + if (rc < 0) { + goto EXIT; + + // Nothing has been selected + } else if (rc == 0) { + errorbox(ctr[TR_NO_DISK_SELECTED]); + + } else { + selected_disks = hw_select_disks(disks, disk_selection); + } + } + } + + num_selected_disks = hw_count_disks(selected_disks); + + if (num_selected_disks == 1) { + snprintf(message, sizeof(message), ctr[TR_DISK_SETUP_DESC], (*selected_disks)->description); + rc = newtWinOkCancel(ctr[TR_DISK_SETUP], message, 50, 10, + ctr[TR_DELETE_ALL_DATA], ctr[TR_CANCEL]); + + if (rc == 0) break; - case 1: // Found SCSI disk - scsi_disk = 1; - raid_disk = 0; - found = 1; + + } else if (num_selected_disks == 2) { + snprintf(message, sizeof(message), ctr[TR_RAID_SETUP_DESC], + (*selected_disks)->description, (*selected_disks + 1)->description); + rc = newtWinOkCancel(ctr[TR_RAID_SETUP], message, 50, 10, + ctr[TR_DELETE_ALL_DATA], ctr[TR_CANCEL]); + + if (rc == 0) { + part_type = HW_PART_TYPE_RAID1; + break; - case 2: // Found RAID disk - scsi_disk = 0; - raid_disk= 1; - found = 1; - break; - case 10: // No harddisk found - errorbox(ctr[TR_NO_HARDDISK]); - goto EXIT; + } + + // Currently not supported + } else { + errorbox(ctr[TR_DISK_CONFIGURATION_NOT_SUPPORTED]); + } + + if (selected_disks) { + hw_free_disks(selected_disks); + selected_disks = NULL; } } - if ((handle = fopen("/tmp/dest_device", "r")) == NULL) { - errorbox(ctr[TR_NO_HARDDISK]); - goto EXIT; - } - fgets(harddrive, 30, handle); - fclose(handle); - if ((handle = fopen("/tmp/dest_device_info", "r")) == NULL) { - sprintf(harddrive_info, "%s", harddrive); - } - fgets(harddrive_info, 70, handle); - fclose(handle); + hw_free_disks(disks); - - /* load unattended configuration */ - if (unattended) { - fprintf(flog, "unattended: Reading unattended.conf\n"); + struct hw_destination* destination = hw_make_destination(part_type, selected_disks); + assert(destination); - (void) readkeyvalues(unattendedkv, UNATTENDED_CONF); - findkey(unattendedkv, "RESTORE_FILE", restore_file); - } - - /* Make the hdparms struct and print the contents. - With USB-KEY install and SCSI disk, while installing, the disk - is named 'sdb,sdc,...' (following keys) - On reboot, it will become 'sda' - To avoid many test, all names are built in the struct. - */ - sprintf(hdparams.devnode_disk, "/dev/%s", harddrive); - /* Address the partition or raid partition (eg dev/sda or /dev/sdap1 */ - sprintf(hdparams.devnode_part, "/dev/%s%s", harddrive,raid_disk ? "p" : ""); - /* Now the names after the machine is booted. Only scsi is affected - and we only install on the first scsi disk. */ - - fprintf(flog, "Destination drive: %s\n", hdparams.devnode_disk); - - sprintf(message, ctr[TR_PREPARE_HARDDISK], harddrive_info); - if (unattended) { - hardyn = 1; - } else { - yesnoharddisk[0] = ctr[TR_NO]; - yesnoharddisk[1] = ctr[TR_YES]; - yesnoharddisk[2] = NULL; - } - - while (! hardyn) { - rc = newtWinMenu(title, message, - 50, 5, 5, 6, yesnoharddisk, - &hardyn, ctr[TR_OK], - ctr[TR_CANCEL], NULL); - if (rc == 2) - goto EXIT; - } - if (rc == 2) - goto EXIT; + fprintf(flog, "Destination drive: %s\n", destination->path); + fprintf(flog, " boot: %s\n", destination->part_boot); + fprintf(flog, " swap: %s\n", destination->part_swap); + fprintf(flog, " root: %s\n", destination->part_root); + fprintf(flog, " data: %s\n", destination->part_data); fstypes[0]=ctr[TR_EXT2FS_DESCR]; fstypes[1]=ctr[TR_EXT3FS_DESCR]; @@ -317,18 +426,7 @@ int main(int argc, char *argv[]) { * partition. In order to do that we need to know the size of * the disk. */ - /* Don't use mysystem here so we can redirect output */ - sprintf(commandstring, "/sbin/sfdisk -s /dev/%s > /tmp/disksize 2> /dev/null", harddrive); - system(commandstring); - - /* Calculate amount of disk space */ - if ((handle = fopen("/tmp/disksize", "r"))) { - fgets(line, STRING_SIZE-1, handle); - if (sscanf (line, "%s", string)) { - disk = atoi(string) / 1024; - } - fclose(handle); - } + disk = destination->size / 1024 / 1024; fprintf(flog, "Disksize = %ld, memory = %ld", disk, memory); @@ -392,10 +490,10 @@ int main(int argc, char *argv[]) { if (disk < 2097150) { // <2TB use sfdisk and normal mbr - snprintf(commandstring, STRING_SIZE, "/sbin/sfdisk -L -uM %s < /tmp/partitiontable", hdparams.devnode_disk); + snprintf(commandstring, STRING_SIZE, "/sbin/sfdisk -L -uM %s < /tmp/partitiontable", destination->path); } else { // >2TB use parted with gpt - snprintf(commandstring, STRING_SIZE, "/usr/sbin/parted -s %s mklabel gpt mkpart boot ext2 1M 64M mkpart swap linux-swap 64M 1000M mkpart root ext4 1000M 5000M mkpart var ext4 5000M 100%% disk_set pmbr_boot on", hdparams.devnode_disk); + snprintf(commandstring, STRING_SIZE, "/usr/sbin/parted -s %s mklabel gpt mkpart boot ext2 1M 64M mkpart swap linux-swap 64M 1000M mkpart root ext4 1000M 5000M mkpart var ext4 5000M 100%% disk_set pmbr_boot on", destination->path); } if (runcommandwithstatus(commandstring, ctr[TR_PARTITIONING_DISK])) @@ -418,7 +516,7 @@ int main(int argc, char *argv[]) { sprintf(mkfscommand, "/sbin/mke2fs -T ext4"); } - snprintf(commandstring, STRING_SIZE, "/sbin/mke2fs -T ext2 -I 128 %s1", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/sbin/mke2fs -T ext2 -I 128 %s", destination->part_boot); if (runcommandwithstatus(commandstring, ctr[TR_MAKING_BOOT_FILESYSTEM])) { errorbox(ctr[TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM]); @@ -426,7 +524,7 @@ int main(int argc, char *argv[]) { } if (swap_file) { - snprintf(commandstring, STRING_SIZE, "/sbin/mkswap %s2", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/sbin/mkswap %s", destination->part_swap); if (runcommandwithstatus(commandstring, ctr[TR_MAKING_SWAPSPACE])) { errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]); @@ -434,21 +532,21 @@ int main(int argc, char *argv[]) { } } - snprintf(commandstring, STRING_SIZE, "%s %s3", mkfscommand, hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "%s %s", mkfscommand, destination->part_root); if (runcommandwithstatus(commandstring, ctr[TR_MAKING_ROOT_FILESYSTEM])) { errorbox(ctr[TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM]); goto EXIT; } - snprintf(commandstring, STRING_SIZE, "%s %s4", mkfscommand, hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "%s %s", mkfscommand, destination->part_data); if (runcommandwithstatus(commandstring, ctr[TR_MAKING_LOG_FILESYSTEM])) { errorbox(ctr[TR_UNABLE_TO_MAKE_LOG_FILESYSTEM]); goto EXIT; } - snprintf(commandstring, STRING_SIZE, "/bin/mount %s3 /harddisk", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/bin/mount %s /harddisk", destination->part_root); if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_ROOT_FILESYSTEM])) { errorbox(ctr[TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM]); @@ -459,21 +557,21 @@ int main(int argc, char *argv[]) { mkdir("/harddisk/var", S_IRWXU|S_IRWXG|S_IRWXO); mkdir("/harddisk/var/log", S_IRWXU|S_IRWXG|S_IRWXO); - snprintf(commandstring, STRING_SIZE, "/bin/mount %s1 /harddisk/boot", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/bin/mount %s /harddisk/boot", destination->part_boot); if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_BOOT_FILESYSTEM])) { errorbox(ctr[TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM]); goto EXIT; } if (swap_file) { - snprintf(commandstring, STRING_SIZE, "/sbin/swapon %s2", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/sbin/swapon %s", destination->part_swap); if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_SWAP_PARTITION])) { errorbox(ctr[TR_UNABLE_TO_MOUNT_SWAP_PARTITION]); goto EXIT; } } - snprintf(commandstring, STRING_SIZE, "/bin/mount %s4 /harddisk/var", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/bin/mount %s /harddisk/var", destination->part_data); if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_LOG_FILESYSTEM])) { errorbox(ctr[TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM]); @@ -508,13 +606,13 @@ int main(int argc, char *argv[]) { } /* Update /etc/fstab */ - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE1#UUID=$(/sbin/blkid %s1 -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE1#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_boot); system(commandstring); - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE2#UUID=$(/sbin/blkid %s2 -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE2#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_swap); system(commandstring); - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE3#UUID=$(/sbin/blkid %s3 -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE3#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_root); system(commandstring); - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE4#UUID=$(/sbin/blkid %s4 -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE4#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_data); system(commandstring); if (fstype == EXT2) { @@ -533,7 +631,7 @@ int main(int argc, char *argv[]) { replace("/harddisk/boot/grub/grub.conf", "KVER", KERNEL_VERSION); - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#root=ROOT#root=UUID=$(/sbin/blkid %s3 -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/boot/grub/grub.conf", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#root=ROOT#root=UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/boot/grub/grub.conf", destination->part_root); system(commandstring); mysystem("ln -s grub.conf /harddisk/boot/grub/menu.lst"); @@ -545,12 +643,12 @@ int main(int argc, char *argv[]) { */ FILE *f = NULL; if (f = fopen("/harddisk/boot/grub/device.map", "w")) { - fprintf(f, "(hd0) %s\n", hdparams.devnode_disk); + fprintf(f, "(hd0) %s\n", destination->path); fclose(f); } snprintf(commandstring, STRING_SIZE, - "/usr/sbin/chroot /harddisk /usr/sbin/grub-install --no-floppy %s", hdparams.devnode_disk); + "/usr/sbin/chroot /harddisk /usr/sbin/grub-install --no-floppy %s", destination->path); if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_GRUB])) { errorbox(ctr[TR_UNABLE_TO_INSTALL_GRUB]); goto EXIT; @@ -633,7 +731,7 @@ EXIT: fcloseall(); if (swap_file) { - snprintf(commandstring, STRING_SIZE, "/bin/swapoff %s2", hdparams.devnode_part); + snprintf(commandstring, STRING_SIZE, "/bin/swapoff %s", destination->part_swap); } newtFinished(); @@ -651,6 +749,12 @@ EXIT: // Free resources free(sourcedrive); + free(destination); + + if (selected_disks) + hw_free_disks(selected_disks); + + hw_free(hw); return 0; } From c4e966746ecb172767186c094a67b68907831da5 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 20 Jul 2014 16:48:59 +0200 Subject: [PATCH 006/297] installer: Make function to determine the amount of system memory. --- src/install+setup/install/hw.c | 20 ++++++++++++++++++++ src/install+setup/install/hw.h | 2 ++ src/install+setup/install/main.c | 11 +---------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index 1fca9fdfa..f26c63836 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -315,3 +315,23 @@ struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks return dest; } + +unsigned long long hw_memory() { + FILE* handle = NULL; + char line[STRING_SIZE]; + + unsigned long long memory = 0; + + /* Calculate amount of memory in machine */ + if ((handle = fopen("/proc/meminfo", "r"))) { + while (fgets(line, sizeof(line), handle)) { + if (!sscanf (line, "MemTotal: %llu kB", memory)) { + memory = 0; + } + } + + fclose(handle); + } + + return memory * 1024; +} diff --git a/src/install+setup/install/hw.h b/src/install+setup/install/hw.h index d5549a4c7..2823a91ea 100644 --- a/src/install+setup/install/hw.h +++ b/src/install+setup/install/hw.h @@ -77,4 +77,6 @@ void hw_free_disks(struct hw_disk** disks); unsigned int hw_count_disks(struct hw_disk** disks); struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection); +unsigned long long hw_memory(); + #endif /* HEADER_HW_H */ diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 0386cf5cd..affdd75e4 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -410,16 +410,7 @@ int main(int argc, char *argv[]) { if (rc == 2) goto EXIT; - /* Calculate amount of memory in machine */ - if ((handle = fopen("/proc/meminfo", "r"))) - { - while (fgets(line, STRING_SIZE-1, handle)) { - if (sscanf (line, "MemTotal: %s kB", string)) { - memory = atoi(string) / 1024 ; - } - } - fclose(handle); - } + memory = hw_memory() / 1024 / 1024; /* Partition, mkswp, mkfs. * before partitioning, first determine the sizes of each From 0d8088144007b7a2445f6652ec9eb4021dbca00f Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 20 Jul 2014 21:07:49 +0200 Subject: [PATCH 007/297] kernel: update to 3.10.49. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index f4e977c61..f7523c2d6 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.48 +VER = 3.10.49 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.48-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.49-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 9dfef3b51013ba9066a6438f0f6f71f6 +$(DL_FILE)_MD5 = 9774e12764e740d49c80eda77d0ef3eb rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = a1b66e5fbf9cad1b750ca2bcb306ba37 +$(GRS_PATCHES)_MD5 = e0592f7dc7e3ff177c79bba1df6736bc install : $(TARGET) From 25fcce25bccfe6fc0a52667c2dac49381b170646 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 21 Jul 2014 14:01:02 +0200 Subject: [PATCH 008/297] installer: Rewrite partitioning. The installer now uses parted for partitioning and support for EXT2 and EXT3 has been dropped. --- langs/de/install/lang_de.c | 24 +- langs/en/install/lang_en.c | 22 +- langs/es/install/lang_es.c | 24 +- langs/fr/install/lang_fr.c | 24 +- langs/nl/install/lang_nl.c | 24 +- langs/pl/install/lang_pl.c | 24 +- langs/ru/install/lang_ru.c | 24 +- langs/tr/install/lang_tr.c | 24 +- src/install+setup/install/hw.c | 374 +++++++++++++++++++++++++++++-- src/install+setup/install/hw.h | 39 +++- src/install+setup/install/main.c | 326 ++++++++------------------- 11 files changed, 608 insertions(+), 321 deletions(-) diff --git a/langs/de/install/lang_de.c b/langs/de/install/lang_de.c index 5c7032490..fe68fb3a6 100644 --- a/langs/de/install/lang_de.c +++ b/langs/de/install/lang_de.c @@ -349,6 +349,16 @@ char *de_tr[] = { "Das Installationsprogramm wird nun eine RAID-Konfiguration auf den ausgewählten Festplatten anlegen:\n\n %s\n %s\n\nMöchten Sie fortfahren?", /* TR_DELETE_ALL_DATA */ "Alle Daten löschen", +/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ +"Ihre gewünschte Auswahl wird derzeit nicht unterstützt.", +/* TR_CREATING_FILESYSTEMS */ +"Erstelle Dateisysteme...", +/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ +"Die Dateisysteme konnten nicht erstellt werden.", +/* TR_MOUNTING_FILESYSTEMS */ +"Hänge Dateisysteme ein...", +/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ +"Die Dateisysteme konnten nicht eingehangen werden.", /* TR_NO_IPCOP_TARBALL_FOUND */ "Auf dem Webserver wurde kein ipcop-Tarball gefunden.", /* TR_NO_ORANGE_INTERFACE */ @@ -591,14 +601,12 @@ char *de_tr[] = { "Ich akzeptiere diese Lizenz.", /* TR_LICENSE_NOT_ACCEPTED */ "Die Lizenz wurde nicht akzeptiert. Abbruch!", -/* TR_EXT2FS_DESCR */ -"Ext2 - Dateisystem ohne Journal (empfohlen für Flash)", -/* TR_EXT3FS_DESCR */ -"Ext3 - Dateisystem mit Journal", -/* TR_EXT4FS_DESCR */ -"Ext4 - Dateisystem mit Journal", -/* TR_REISERFS_DESCR */ -"ReiserFS - Dateisystem mit Journal", +/* TR_EXT4FS */ +"EXT4 - Dateisystem", +/* TR_EXT4FS_WO_JOURNAL */ +"EXT4 - Dateisystem ohne Journal", +/* TR_REISERFS */ +"ReiserFS - Dateisystem", /* TR_NO_LOCAL_SOURCE */ "Kein lokales Quellmedium gefunden. Starte Download.", /* TR_DOWNLOADING_ISO */ diff --git a/langs/en/install/lang_en.c b/langs/en/install/lang_en.c index 1b60505c9..aa63b01c4 100644 --- a/langs/en/install/lang_en.c +++ b/langs/en/install/lang_en.c @@ -347,6 +347,14 @@ char *en_tr[] = { "Delete all data", /* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ "You disk configuration is currently not supported.", +/* TR_CREATING_FILESYSTEMS */ +"Creating filesystems...", +/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ +"Unable to create filesystems.", +/* TR_MOUNTING_FILESYSTEMS */ +"Mounting filesystems...", +/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ +"Unable to mount filesystems.", /* TR_NO_IPCOP_TARBALL_FOUND */ "No ipcop tarball found on Web Server.", /* TR_NO_ORANGE_INTERFACE */ @@ -589,14 +597,12 @@ char *en_tr[] = { "I accept this license.", /* TR_LICENSE_NOT_ACCEPTED */ "License not accepted. Exit!", -/* TR_EXT2FS_DESCR */ -"Ext2 - Filesystem without journal (suggested for flashdrives)", -/* TR_EXT3FS_DESCR */ -"Ext3 - Filesystem with journal", -/* TR_EXT4FS_DESCR */ -"Ext4 - Filesystem with journal", -/* TR_REISERFS_DESCR */ -"ReiserFS - Filesystem with journal", +/* TR_EXT4FS */ +"EXT4 - Filesystem", +/* TR_EXT4FS_WO_JOURNAL */ +"EXT4 - Filesystem without journal", +/* TR_REISERFS */ +"ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ "No local source media found. Starting download.", /* TR_DOWNLOADING_ISO */ diff --git a/langs/es/install/lang_es.c b/langs/es/install/lang_es.c index 49eaaf8f4..084ff271f 100644 --- a/langs/es/install/lang_es.c +++ b/langs/es/install/lang_es.c @@ -341,6 +341,16 @@ char *es_tr[] = { "The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", /* TR_DELETE_ALL_DATA */ "Delete all data", +/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ +"You disk configuration is currently not supported.", +/* TR_CREATING_FILESYSTEMS */ +"Creating filesystems...", +/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ +"Unable to create filesystems.", +/* TR_MOUNTING_FILESYSTEMS */ +"Mounting filesystems...", +/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ +"Unable to mount filesystems.", /* TR_NO_IPCOP_TARBALL_FOUND */ "No se encontró ningun archivo tarball de ipcop en el servidor web", /* TR_NO_ORANGE_INTERFACE */ @@ -583,14 +593,12 @@ char *es_tr[] = { "I accept this license.", /* TR_LICENSE_NOT_ACCEPTED */ "License not accepted. Exit!", -/* TR_EXT2FS_DESCR */ -"Ext2 - Filesystem without journal (suggested for flashdrives)", -/* TR_EXT3FS_DESCR */ -"Ext3 - Filesystem with journal", -/* TR_EXT4FS_DESCR */ -"Ext4 - Filesystem with journal", -/* TR_REISERFS_DESCR */ -"ReiserFS - Filesystem with journal", +/* TR_EXT4FS */ +"EXT4 - Filesystem", +/* TR_EXT4FS_WO_JOURNAL */ +"EXT4 - Filesystem without journal", +/* TR_REISERFS */ +"ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ "No local source media found. Starting download.", /* TR_DOWNLOADING_ISO */ diff --git a/langs/fr/install/lang_fr.c b/langs/fr/install/lang_fr.c index 62085be9b..1f61d6859 100644 --- a/langs/fr/install/lang_fr.c +++ b/langs/fr/install/lang_fr.c @@ -341,6 +341,16 @@ char *fr_tr[] = { "The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", /* TR_DELETE_ALL_DATA */ "Delete all data", +/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ +"You disk configuration is currently not supported.", +/* TR_CREATING_FILESYSTEMS */ +"Creating filesystems...", +/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ +"Unable to create filesystems.", +/* TR_MOUNTING_FILESYSTEMS */ +"Mounting filesystems...", +/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ +"Unable to mount filesystems.", /* TR_NO_IPCOP_TARBALL_FOUND */ "Aucun tarball ipcop trouvé sur le serveur Web.", /* TR_NO_ORANGE_INTERFACE */ @@ -583,14 +593,12 @@ char *fr_tr[] = { "J'accepte les termes de cette licence.", /* TR_LICENSE_NOT_ACCEPTED */ "Je n'accepte pas les termes de cette licence, quitter le programme d'installation.", -/* TR_EXT2FS_DESCR */ -"Ext2 - Système de fichiers sans journal (suggéré pour les cartes flash)", -/* TR_EXT3FS_DESCR */ -"Ext3 - Système de fichiers avec journal", -/* TR_EXT4FS_DESCR */ -"Ext4 - Système de fichiers avec journal", -/* TR_REISERFS_DESCR */ -"ReiserFS - Système de fichiers avec journal", +/* TR_EXT4FS */ +"EXT4 - Filesystem", +/* TR_EXT4FS_WO_JOURNAL */ +"EXT4 - Filesystem without journal", +/* TR_REISERFS */ +"ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ "Pas de source locale trouvée. Démarrage du téléchargement.", /* TR_DOWNLOADING_ISO */ diff --git a/langs/nl/install/lang_nl.c b/langs/nl/install/lang_nl.c index cc96f47b9..934d9bf4a 100644 --- a/langs/nl/install/lang_nl.c +++ b/langs/nl/install/lang_nl.c @@ -345,6 +345,16 @@ char *nl_tr[] = { "The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", /* TR_DELETE_ALL_DATA */ "Delete all data", +/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ +"You disk configuration is currently not supported.", +/* TR_CREATING_FILESYSTEMS */ +"Creating filesystems...", +/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ +"Unable to create filesystems.", +/* TR_MOUNTING_FILESYSTEMS */ +"Mounting filesystems...", +/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ +"Unable to mount filesystems.", /* TR_NO_IPCOP_TARBALL_FOUND */ "Er is geen ipcop tarball gevonden op de webserver.", /* TR_NO_ORANGE_INTERFACE */ @@ -587,14 +597,12 @@ char *nl_tr[] = { "Ik accepteer deze licentie.", /* TR_LICENSE_NOT_ACCEPTED */ "Licentie niet geaccepteerd. Stopt!", -/* TR_EXT2FS_DESCR */ -"Ext2 - Bestandssysteem zonder journal (geschikt voor flashdrives)", -/* TR_EXT3FS_DESCR */ -"Ext3 - Bestandssysteem met journal", -/* TR_EXT4FS_DESCR */ -"Ext4 - Bestandssysteem met journal", -/* TR_REISERFS_DESCR */ -"ReiserFS - Bestandssysteem met journal", +/* TR_EXT4FS */ +"EXT4 - Filesystem", +/* TR_EXT4FS_WO_JOURNAL */ +"EXT4 - Filesystem without journal", +/* TR_REISERFS */ +"ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ "Geen lokale bronmedia gevonden. Start download.", /* TR_DOWNLOADING_ISO */ diff --git a/langs/pl/install/lang_pl.c b/langs/pl/install/lang_pl.c index 2fc672159..ac75e3813 100644 --- a/langs/pl/install/lang_pl.c +++ b/langs/pl/install/lang_pl.c @@ -341,6 +341,16 @@ char *pl_tr[] = { "The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", /* TR_DELETE_ALL_DATA */ "Delete all data", +/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ +"You disk configuration is currently not supported.", +/* TR_CREATING_FILESYSTEMS */ +"Creating filesystems...", +/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ +"Unable to create filesystems.", +/* TR_MOUNTING_FILESYSTEMS */ +"Mounting filesystems...", +/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ +"Unable to mount filesystems.", /* TR_NO_IPCOP_TARBALL_FOUND */ "Nie znaleziono archiwum tar ipcop na serwerze Web.", /* TR_NO_ORANGE_INTERFACE */ @@ -583,14 +593,12 @@ char *pl_tr[] = { "Akceptuję licencję.", /* TR_LICENSE_NOT_ACCEPTED */ "Nie zaakceptowano licencji.Wyjście!", -/* TR_EXT2FS_DESCR */ -"Ext2 - System plików bez dziennika (zalecany dla napędów flash)", -/* TR_EXT3FS_DESCR */ -"Ext3 - System plików z dziennikiem", -/* TR_EXT4FS_DESCR */ -"Ext4 - System plików z dziennikiem", -/* TR_REISERFS_DESCR */ -"ReiserFS - System plików z dziennikiem", +/* TR_EXT4FS */ +"EXT4 - Filesystem", +/* TR_EXT4FS_WO_JOURNAL */ +"EXT4 - Filesystem without journal", +/* TR_REISERFS */ +"ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ "Brak lokalnego źródła. Rozpoczynanie pobierania.", /* TR_DOWNLOADING_ISO */ diff --git a/langs/ru/install/lang_ru.c b/langs/ru/install/lang_ru.c index 0b50ea1aa..d2fb5c586 100644 --- a/langs/ru/install/lang_ru.c +++ b/langs/ru/install/lang_ru.c @@ -339,6 +339,16 @@ char *ru_tr[] = { "The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", /* TR_DELETE_ALL_DATA */ "Delete all data", +/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ +"You disk configuration is currently not supported.", +/* TR_CREATING_FILESYSTEMS */ +"Creating filesystems...", +/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ +"Unable to create filesystems.", +/* TR_MOUNTING_FILESYSTEMS */ +"Mounting filesystems...", +/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ +"Unable to mount filesystems.", /* TR_NO_IPCOP_TARBALL_FOUND */ "На сервере не найден архив ipcop.", /* TR_NO_ORANGE_INTERFACE */ @@ -581,14 +591,12 @@ char *ru_tr[] = { "Я принимаю эту лицензию.", /* TR_LICENSE_NOT_ACCEPTED */ "Лицензия не принята. Выход!", -/* TR_EXT2FS_DESCR */ -"Ext2 - Файловая система без журналирования (Рекомендуется для флеш-носителей)", -/* TR_EXT3FS_DESCR */ -"Ext3 - Файловая система с журналированием", -/* TR_EXT4FS_DESCR */ -"Ext4 - Файловая система с журналированием", -/* TR_REISERFS_DESCR */ -"ReiserFS - Файловая система с журналированием", +/* TR_EXT4FS */ +"EXT4 - Filesystem", +/* TR_EXT4FS_WO_JOURNAL */ +"EXT4 - Filesystem without journal", +/* TR_REISERFS */ +"ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ "Локальный источник не найден. Начинаю загрузку.", /* TR_DOWNLOADING_ISO */ diff --git a/langs/tr/install/lang_tr.c b/langs/tr/install/lang_tr.c index b02e9fa66..2253c9571 100644 --- a/langs/tr/install/lang_tr.c +++ b/langs/tr/install/lang_tr.c @@ -345,6 +345,16 @@ char *tr_tr[] = { "The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", /* TR_DELETE_ALL_DATA */ "Delete all data", +/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ +"You disk configuration is currently not supported.", +/* TR_CREATING_FILESYSTEMS */ +"Creating filesystems...", +/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ +"Unable to create filesystems.", +/* TR_MOUNTING_FILESYSTEMS */ +"Mounting filesystems...", +/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ +"Unable to mount filesystems.", /* TR_NO_IPCOP_TARBALL_FOUND */ "Web sunucuda hiçbir ipfire arşivi bulunamadı.", /* TR_NO_ORANGE_INTERFACE */ @@ -587,14 +597,12 @@ char *tr_tr[] = { "Bu lisansı kabul ediyorum.", /* TR_LICENSE_NOT_ACCEPTED */ "Lisans kabul edilmedi. Çık!", -/* TR_EXT2FS_DESCR */ -"Ext2 - Günlük olmadan dosya sistemi (flash sürücüler için önerilen)", -/* TR_EXT3FS_DESCR */ -"Ext3 - Günlük ile dosya sistemi", -/* TR_EXT4FS_DESCR */ -"Ext4 - Günlük ile dosya sistemi", -/* TR_REISERFS_DESCR */ -"ReiserFS - Günlük ile dosya sistemi", +/* TR_EXT4FS */ +"EXT4 - Filesystem", +/* TR_EXT4FS_WO_JOURNAL */ +"EXT4 - Filesystem without journal", +/* TR_REISERFS */ +"ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ "Yerel kaynak medya bulunamadı. İndirme başlatılıyor​​.", /* TR_DOWNLOADING_ISO */ diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index f26c63836..0e1f49900 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -18,6 +18,10 @@ # # #############################################################################*/ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + #include #include #include @@ -28,11 +32,20 @@ #include #include #include +#include #include #include #include "hw.h" +#include "../libsmooth/libsmooth.h" + +const char* other_filesystems[] = { + "/dev", + "/proc", + "/sys", + NULL +}; struct hw* hw_init() { struct hw* hw = malloc(sizeof(*hw)); @@ -59,8 +72,8 @@ static int strstartswith(const char* a, const char* b) { return (strncmp(a, b, strlen(b)) == 0); } -int hw_mount(const char* source, const char* target, int flags) { - return mount(source, target, "iso9660", flags, NULL); +int hw_mount(const char* source, const char* target, const char* fs, int flags) { + return mount(source, target, fs, flags, NULL); } int hw_umount(const char* target) { @@ -68,7 +81,7 @@ int hw_umount(const char* target) { } static int hw_test_source_medium(const char* path) { - int ret = hw_mount(path, SOURCE_MOUNT_PATH, MS_RDONLY); + int ret = hw_mount(path, SOURCE_MOUNT_PATH, "iso9660", MS_RDONLY); // If the source could not be mounted we // cannot proceed. @@ -279,6 +292,112 @@ struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection) { return ret; } +static unsigned long long hw_swap_size(struct hw_destination* dest) { + unsigned long long memory = hw_memory(); + + unsigned long long swap_size = memory / 4; + + // Min. swap size is 128MB + if (swap_size < MB2BYTES(128)) + swap_size = MB2BYTES(128); + + // Cap swap size to 1GB + else if (swap_size > MB2BYTES(1024)) + swap_size = MB2BYTES(1024); + + return swap_size; +} + +static unsigned long long hw_root_size(struct hw_destination* dest) { + unsigned long long root_size; + + if (dest->size < MB2BYTES(2048)) + root_size = MB2BYTES(1024); + + else if (dest->size >= MB2BYTES(2048) && dest->size <= MB2BYTES(3072)) + root_size = MB2BYTES(1536); + + else + root_size = MB2BYTES(2048); + + return root_size; +} + +static unsigned long long hw_boot_size(struct hw_destination* dest) { + return MB2BYTES(64); +} + +static int hw_calculate_partition_table(struct hw_destination* dest) { + // Determine the size of the target block device + if (dest->is_raid) { + dest->size = (dest->disk1->size >= dest->disk2->size) ? + dest->disk1->size : dest->disk2->size; + } else { + dest->size = dest->disk1->size; + } + + dest->size_boot = hw_boot_size(dest); + dest->size_swap = hw_swap_size(dest); + dest->size_root = hw_root_size(dest); + + // Determine the size of the data partition. + unsigned long long used_space = dest->size_boot + dest->size_swap + dest->size_root; + + // Disk is way too small + if (used_space >= dest->size) + return -1; + + dest->size_data = dest->size - used_space; + + // If it gets too small, we remove the swap space. + if (dest->size_data <= MB2BYTES(256)) { + dest->size_data += dest->size_swap; + dest->size_swap = 0; + } + + // Set partition names + char path[DEV_SIZE]; + int part_idx = 1; + + snprintf(path, sizeof(path), "%s%s", dest->path, (dest->is_raid) ? "p" : ""); + + if (dest->size_boot > 0) { + dest->part_boot_idx = part_idx; + + snprintf(dest->part_boot, sizeof(dest->part_boot), "%s%d", path, part_idx++); + } else + *dest->part_boot = '\0'; + + if (dest->size_swap > 0) + snprintf(dest->part_swap, sizeof(dest->part_swap), "%s%d", path, part_idx++); + else + *dest->part_swap = '\0'; + + // There is always a root partition + if (!*dest->part_boot) + dest->part_boot_idx = part_idx; + + snprintf(dest->part_root, sizeof(dest->part_root), "%s%d", path, part_idx++); + + if (dest->size_data > 0) + snprintf(dest->part_data, sizeof(dest->part_data), "%s%d", path, part_idx++); + else + *dest->part_data = '\0'; + + // Determine partition table + dest->part_table = HW_PART_TABLE_MSDOS; + + // Disks over 2TB need to use GPT + if (dest->size >= MB2BYTES(2047 * 1024)) + dest->part_table = HW_PART_TABLE_GPT; + + // We also use GPT on raid disks by default + else if (dest->is_raid) + dest->part_table = HW_PART_TABLE_GPT; + + return 0; +} + struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks) { struct hw_destination* dest = malloc(sizeof(*dest)); @@ -298,20 +417,12 @@ struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks // Is this a RAID device? dest->is_raid = (part_type > HW_PART_TYPE_NORMAL); - // Set partition names - char path[DEV_SIZE]; - snprintf(path, sizeof(path), "%s%s", dest->path, (dest->is_raid) ? "p" : ""); - snprintf(dest->part_boot, sizeof(dest->part_boot), "%s1", path); - snprintf(dest->part_swap, sizeof(dest->part_swap), "%s2", path); - snprintf(dest->part_root, sizeof(dest->part_root), "%s3", path); - snprintf(dest->part_data, sizeof(dest->part_data), "%s4", path); + int r = hw_calculate_partition_table(dest); + if (r) + return NULL; - if (dest->is_raid) { - dest->size = (dest->disk1->size >= dest->disk2->size) ? - dest->disk1->size : dest->disk2->size; - } else { - dest->size = dest->disk1->size; - } + // Set default filesystem + dest->filesystem = HW_FS_DEFAULT; return dest; } @@ -325,7 +436,7 @@ unsigned long long hw_memory() { /* Calculate amount of memory in machine */ if ((handle = fopen("/proc/meminfo", "r"))) { while (fgets(line, sizeof(line), handle)) { - if (!sscanf (line, "MemTotal: %llu kB", memory)) { + if (!sscanf (line, "MemTotal: %llu kB", &memory)) { memory = 0; } } @@ -335,3 +446,232 @@ unsigned long long hw_memory() { return memory * 1024; } + +int hw_create_partitions(struct hw_destination* dest) { + char* cmd = NULL; + + asprintf(&cmd, "/usr/sbin/parted -s %s -a optimal", dest->path); + + // Set partition type + if (dest->part_table == HW_PART_TABLE_MSDOS) + asprintf(&cmd, "%s mklabel msdos", cmd); + else if (dest->part_table == HW_PART_TABLE_GPT) + asprintf(&cmd, "%s mklabel gpt", cmd); + + unsigned long long part_start = 0 * 1024 * 1024; // 1MB + + if (*dest->part_boot) { + asprintf(&cmd, "%s mkpart %s ext2 %lluMB %lluMB", cmd, + (dest->part_table == HW_PART_TABLE_GPT) ? "BOOT" : "primary", + BYTES2MB(part_start), BYTES2MB(part_start + dest->size_boot)); + + part_start += dest->size_boot; + } + + if (*dest->part_swap) { + asprintf(&cmd, "%s mkpart %s linux-swap %lluMB %lluMB", cmd, + (dest->part_table == HW_PART_TABLE_GPT) ? "SWAP" : "primary", + BYTES2MB(part_start), BYTES2MB(part_start + dest->size_swap)); + + part_start += dest->size_swap; + } + + if (*dest->part_root) { + asprintf(&cmd, "%s mkpart %s ext2 %lluMB %lluMB", cmd, + (dest->part_table == HW_PART_TABLE_GPT) ? "ROOT" : "primary", + BYTES2MB(part_start), BYTES2MB(part_start + dest->size_root)); + + part_start += dest->size_root; + } + + if (*dest->part_data) { + asprintf(&cmd, "%s mkpart %s ext2 %lluMB %lluMB", cmd, + (dest->part_table == HW_PART_TABLE_GPT) ? "DATA" : "primary", + BYTES2MB(part_start), BYTES2MB(part_start + dest->size_data)); + + part_start += dest->size_data; + } + + if (dest->part_table == HW_PART_TABLE_MSDOS && dest->part_boot_idx > 0) { + asprintf(&cmd, "%s set %d boot on", cmd, dest->part_boot_idx); + + } else if (dest->part_table == HW_PART_TABLE_GPT) { + asprintf(&cmd, "%s disk_set pmbr_boot on", cmd); + } + + int r = mysystem(cmd); + + if (cmd) + free(cmd); + + return r; +} + +static int hw_format_filesystem(const char* path, int fs) { + char cmd[STRING_SIZE] = "\0"; + + // Swap + if (fs == HW_FS_SWAP) { + snprintf(cmd, sizeof(cmd), "/sbin/mkswap -v1 %s &>/dev/null", path); + // ReiserFS + } else if (fs == HW_FS_REISERFS) { + snprintf(cmd, sizeof(cmd), "/sbin/mkreiserfs -f %s ", path); + + // EXT4 + } else if (fs == HW_FS_EXT4) { + snprintf(cmd, sizeof(cmd), "/sbin/mke2fs -T ext4 %s", path); + + // EXT4 w/o journal + } else if (fs == HW_FS_EXT4_WO_JOURNAL) { + snprintf(cmd, sizeof(cmd), "/sbin/mke2fs -T ext4 -O ^has_journal %s", path); + } + + assert(*cmd); + + int r = mysystem(cmd); + + return r; +} + +int hw_create_filesystems(struct hw_destination* dest) { + int r; + + // boot + if (*dest->part_boot) { + r = hw_format_filesystem(dest->part_boot, dest->filesystem); + if (r) + return r; + } + + // swap + if (*dest->part_swap) { + r = hw_format_filesystem(dest->part_swap, HW_FS_SWAP); + if (r) + return r; + } + + // root + r = hw_format_filesystem(dest->part_root, dest->filesystem); + if (r) + return r; + + // data + if (*dest->part_data) { + r = hw_format_filesystem(dest->part_data, dest->filesystem); + if (r) + return r; + } + + return 0; +} + +int hw_mount_filesystems(struct hw_destination* dest, const char* prefix) { + char target[STRING_SIZE]; + + assert(*prefix == '/'); + + const char* filesystem; + switch (dest->filesystem) { + case HW_FS_REISERFS: + filesystem = "reiserfs"; + break; + + case HW_FS_EXT4: + case HW_FS_EXT4_WO_JOURNAL: + filesystem = "ext4"; + break; + + default: + assert(0); + } + + // root + int r = hw_mount(dest->part_root, prefix, filesystem, 0); + if (r) + return r; + + // boot + if (*dest->part_boot) { + snprintf(target, sizeof(target), "%s%s", prefix, HW_PATH_BOOT); + mkdir(target, S_IRWXU|S_IRWXG|S_IRWXO); + + r = hw_mount(dest->part_boot, target, filesystem, 0); + if (r) { + hw_umount_filesystems(dest, prefix); + + return r; + } + } + + // data + if (*dest->part_data) { + snprintf(target, sizeof(target), "%s%s", prefix, HW_PATH_DATA); + mkdir(target, S_IRWXU|S_IRWXG|S_IRWXO); + + r = hw_mount(dest->part_data, target, filesystem, 0); + if (r) { + hw_umount_filesystems(dest, prefix); + + return r; + } + } + + // swap + if (*dest->part_swap) { + r = swapon(dest->part_swap, 0); + if (r) { + hw_umount_filesystems(dest, prefix); + + return r; + } + } + + // bind-mount misc filesystems + char** otherfs = other_filesystems; + while (*otherfs) { + snprintf(target, sizeof(target), "%s%s", prefix, *otherfs); + + mkdir(target, S_IRWXU|S_IRWXG|S_IRWXO); + r = hw_mount(*otherfs, target, NULL, MS_BIND); + if (r) { + hw_umount_filesystems(dest, prefix); + + return r; + } + + otherfs++; + } + + return 0; +} + +int hw_umount_filesystems(struct hw_destination* dest, const char* prefix) { + // boot + if (*dest->part_boot) { + hw_umount(dest->part_boot); + } + + // data + if (*dest->part_data) { + hw_umount(dest->part_data); + } + + // root + hw_umount(dest->part_root); + + // swap + if (*dest->part_swap) { + swapoff(dest->part_swap); + } + + // misc filesystems + char target[STRING_SIZE]; + char** otherfs = other_filesystems; + + while (*otherfs) { + snprintf(target, sizeof(target), "%s%s", prefix, *otherfs++); + hw_umount(target); + } + + return 0; +} diff --git a/src/install+setup/install/hw.h b/src/install+setup/install/hw.h index 2823a91ea..27f07bd12 100644 --- a/src/install+setup/install/hw.h +++ b/src/install+setup/install/hw.h @@ -23,6 +23,7 @@ #include +#define DESTINATION_MOUNT_PATH "/harddisk" #define SOURCE_MOUNT_PATH "/cdrom" #define SOURCE_TEST_FILE SOURCE_MOUNT_PATH "/" VERSION ".media" @@ -30,9 +31,25 @@ #define STRING_SIZE 1024 #define DEV_SIZE 128 +#define HW_PATH_BOOT "/boot" +#define HW_PATH_DATA "/var" + #define HW_PART_TYPE_NORMAL 0 #define HW_PART_TYPE_RAID1 1 +#define HW_PART_TABLE_MSDOS 0 +#define HW_PART_TABLE_GPT 1 + +#define HW_FS_SWAP 0 +#define HW_FS_REISERFS 1 +#define HW_FS_EXT4 2 +#define HW_FS_EXT4_WO_JOURNAL 3 + +#define HW_FS_DEFAULT HW_FS_EXT4 + +#define BYTES2MB(x) ((x) / 1024 / 1024) +#define MB2BYTES(x) ((unsigned long long)(x) * 1024 * 1024) + struct hw { struct udev *udev; }; @@ -51,23 +68,31 @@ struct hw_disk { struct hw_destination { char path[DEV_SIZE]; - unsigned long long size; int is_raid; - const struct hw_disk* disk1; const struct hw_disk* disk2; + int part_table; char part_boot[DEV_SIZE]; char part_swap[DEV_SIZE]; char part_root[DEV_SIZE]; char part_data[DEV_SIZE]; + int part_boot_idx; + + int filesystem; + + unsigned long long size; + unsigned long long size_boot; + unsigned long long size_swap; + unsigned long long size_root; + unsigned long long size_data; }; struct hw* hw_init(); void hw_free(struct hw* hw); -int hw_mount(const char* source, const char* target, int flags); +int hw_mount(const char* source, const char* target, const char* fs, int flags); int hw_umount(const char* target); char* hw_find_source_medium(struct hw* hw); @@ -77,6 +102,14 @@ void hw_free_disks(struct hw_disk** disks); unsigned int hw_count_disks(struct hw_disk** disks); struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection); +struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks); + unsigned long long hw_memory(); +int hw_create_partitions(struct hw_destination* dest); +int hw_create_filesystems(struct hw_destination* dest); + +int hw_mount_filesystems(struct hw_destination* dest, const char* prefix); +int hw_umount_filesystems(struct hw_destination* dest, const char* prefix); + #endif /* HEADER_HW_H */ diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index affdd75e4..91a6c943c 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -24,11 +24,6 @@ #define UNATTENDED_CONF "/cdrom/boot/unattended.conf" #define LICENSE_FILE "/cdrom/COPYING" -#define EXT2 0 -#define EXT3 1 -#define EXT4 2 -#define REISERFS 3 - FILE *flog = NULL; char *mylog; @@ -160,21 +155,14 @@ int main(int argc, char *argv[]) { char* sourcedrive = NULL; int rc = 0; char commandstring[STRING_SIZE]; - char mkfscommand[STRING_SIZE]; - char *fstypes[] = { "ext2", "ext3", "ext4", "ReiserFS", NULL }; - int fstype = EXT4; int choice; char shortlangname[10]; char message[STRING_SIZE]; char title[STRING_SIZE]; int allok = 0; - int allok_fastexit=0; struct keyvalue *ethernetkv = initkeyvalues(); FILE *handle, *cmdfile, *copying; char line[STRING_SIZE]; - char string[STRING_SIZE]; - long memory = 0, disk = 0; - long system_partition, boot_partition, root_partition, swap_file; int unattended = 0; int serialconsole = 0; @@ -266,7 +254,7 @@ int main(int argc, char *argv[]) { assert(sourcedrive); - int r = hw_mount(sourcedrive, SOURCE_MOUNT_PATH, MS_RDONLY); + int r = hw_mount(sourcedrive, SOURCE_MOUNT_PATH, "iso9660", MS_RDONLY); if (r) { fprintf(flog, "Could not mount %s to %s\n", sourcedrive, SOURCE_MOUNT_PATH); fprintf(flog, strerror(errno)); @@ -384,191 +372,87 @@ int main(int argc, char *argv[]) { hw_free_disks(disks); struct hw_destination* destination = hw_make_destination(part_type, selected_disks); - assert(destination); + + if (!destination) { + errorbox(ctr[TR_DISK_TOO_SMALL]); + goto EXIT; + } fprintf(flog, "Destination drive: %s\n", destination->path); - fprintf(flog, " boot: %s\n", destination->part_boot); - fprintf(flog, " swap: %s\n", destination->part_swap); - fprintf(flog, " root: %s\n", destination->part_root); - fprintf(flog, " data: %s\n", destination->part_data); + fprintf(flog, " boot: %s (%lluMB)\n", destination->part_boot, BYTES2MB(destination->size_boot)); + fprintf(flog, " swap: %s (%lluMB)\n", destination->part_swap, BYTES2MB(destination->size_swap)); + fprintf(flog, " root: %s (%lluMB)\n", destination->part_root, BYTES2MB(destination->size_root)); + fprintf(flog, " data: %s (%lluMB)\n", destination->part_data, BYTES2MB(destination->size_data)); - fstypes[0]=ctr[TR_EXT2FS_DESCR]; - fstypes[1]=ctr[TR_EXT3FS_DESCR]; - fstypes[2]=ctr[TR_EXT4FS_DESCR]; - fstypes[3]=ctr[TR_REISERFS_DESCR]; - fstypes[4]=NULL; + // Warn the user if there is not enough space to create a swap partition + if (!unattended && !*destination->part_swap) { + rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], ctr[TR_CONTINUE_NO_SWAP]); - if (!unattended) { - sprintf(message, ctr[TR_CHOOSE_FILESYSTEM]); - rc = newtWinMenu( ctr[TR_CHOOSE_FILESYSTEM], message, - 50, 5, 5, 6, fstypes, &fstype, ctr[TR_OK], - ctr[TR_CANCEL], NULL); - } else { - rc = 1; - fstype = EXT4; - } - if (rc == 2) - goto EXIT; - - memory = hw_memory() / 1024 / 1024; - - /* Partition, mkswp, mkfs. - * before partitioning, first determine the sizes of each - * partition. In order to do that we need to know the size of - * the disk. - */ - disk = destination->size / 1024 / 1024; - - fprintf(flog, "Disksize = %ld, memory = %ld", disk, memory); - - /* Calculating Swap-Size dependend of Ram Size */ - if (memory <= 256) - swap_file = 128; - else if (memory <= 1024 && memory > 256) - swap_file = 256; - else - swap_file = memory / 4; - - /* Calculating Root-Size dependend of Max Disk Space */ - if ( disk < 2048 ) - root_partition = 1024; - else if ( disk >= 2048 && disk <= 3072 ) - root_partition = 1536; - else - root_partition = 2048; - - - /* Calculating the amount of free space */ - boot_partition = 64; /* in MB */ - system_partition = disk - ( root_partition + swap_file + boot_partition ); - - fprintf(flog, ", boot = %ld, swap = %ld, mylog = %ld, root = %ld\n", - boot_partition, swap_file, system_partition, root_partition); - rc = 0; - - if ( (!unattended) && (((disk - (root_partition + swap_file + boot_partition)) < 256 ) && ((disk - (root_partition + boot_partition )) > 256)) ) { - rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], ctr[TR_CONTINUE_NO_SWAP]); - if (rc == 1){ - swap_file = 0; - system_partition = disk - ( root_partition + swap_file + boot_partition ); - fprintf(flog, "Changing Swap Size to 0 MB.\n"); - } - else if (rc == 2){ - fprintf(flog, "Disk is too small.\n"); - errorbox(ctr[TR_DISK_TOO_SMALL]);goto EXIT; - } - } - else if (disk - (root_partition + swap_file + boot_partition) >= 256) { - - } - else { - fprintf(flog, "Disk is too small.\n"); - errorbox(ctr[TR_DISK_TOO_SMALL]);goto EXIT; - } - - handle = fopen("/tmp/partitiontable", "w"); - - /* Make swapfile */ - if (swap_file) { - fprintf(handle, ",%ld,L,*\n,%ld,S,\n,%ld,L,\n,,L,\n", - boot_partition, swap_file, root_partition); - } else { - fprintf(handle, ",%ld,L,*\n,0,0,\n,%ld,L,\n,,L,\n", - boot_partition, root_partition); - } - - fclose(handle); - - if (disk < 2097150) { - // <2TB use sfdisk and normal mbr - snprintf(commandstring, STRING_SIZE, "/sbin/sfdisk -L -uM %s < /tmp/partitiontable", destination->path); - } else { - // >2TB use parted with gpt - snprintf(commandstring, STRING_SIZE, "/usr/sbin/parted -s %s mklabel gpt mkpart boot ext2 1M 64M mkpart swap linux-swap 64M 1000M mkpart root ext4 1000M 5000M mkpart var ext4 5000M 100%% disk_set pmbr_boot on", destination->path); + if (rc != 1) + goto EXIT; } - if (runcommandwithstatus(commandstring, ctr[TR_PARTITIONING_DISK])) - { + // Filesystem selection + if (!unattended) { + struct filesystems { + int fstype; + const char* description; + } filesystems[] = { + { HW_FS_EXT4, ctr[TR_EXT4FS] }, + { HW_FS_EXT4_WO_JOURNAL, ctr[TR_EXT4FS_WO_JOURNAL] }, + { HW_FS_REISERFS, ctr[TR_REISERFS] }, + { 0, NULL }, + }; + unsigned int num_filesystems = sizeof(filesystems) / sizeof(*filesystems); + + char* fs_names[num_filesystems]; + int fs_choice = 0; + for (unsigned int i = 0; i < num_filesystems; i++) { + if (HW_FS_DEFAULT == filesystems[i].fstype) + fs_choice = i; + + fs_names[i] = filesystems[i].description; + } + + rc = newtWinMenu(ctr[TR_CHOOSE_FILESYSTEM], ctr[TR_CHOOSE_FILESYSTEM], + 50, 5, 5, 6, fs_names, &fs_choice, ctr[TR_OK], ctr[TR_CANCEL], NULL); + + if (rc == 0) + destination->filesystem = filesystems[fs_choice].fstype; + + else + goto EXIT; + } + + // Execute the partitioning... + statuswindow(60, 4, title, ctr[TR_PARTITIONING_DISK]); + + rc = hw_create_partitions(destination); + if (rc) { errorbox(ctr[TR_UNABLE_TO_PARTITION]); goto EXIT; } - if (fstype == EXT2) { -// mysystem("/sbin/modprobe ext2"); - sprintf(mkfscommand, "/sbin/mke2fs -T ext2"); - } else if (fstype == REISERFS) { - mysystem("/sbin/modprobe reiserfs"); - sprintf(mkfscommand, "/sbin/mkreiserfs -f"); - } else if (fstype == EXT3) { -// mysystem("/sbin/modprobe ext3"); - sprintf(mkfscommand, "/sbin/mke2fs -T ext3"); - } else if (fstype == EXT4) { -// mysystem("/sbin/modprobe ext4"); - sprintf(mkfscommand, "/sbin/mke2fs -T ext4"); - } + newtPopWindow(); - snprintf(commandstring, STRING_SIZE, "/sbin/mke2fs -T ext2 -I 128 %s", destination->part_boot); - if (runcommandwithstatus(commandstring, ctr[TR_MAKING_BOOT_FILESYSTEM])) - { - errorbox(ctr[TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM]); + // Execute the formatting... + statuswindow(60, 4, title, ctr[TR_CREATING_FILESYSTEMS]); + + rc = hw_create_filesystems(destination); + if (rc) { + errorbox(ctr[TR_UNABLE_TO_CREATE_FILESYSTEMS]); goto EXIT; } - if (swap_file) { - snprintf(commandstring, STRING_SIZE, "/sbin/mkswap %s", destination->part_swap); - if (runcommandwithstatus(commandstring, ctr[TR_MAKING_SWAPSPACE])) - { - errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]); - goto EXIT; - } - } - - snprintf(commandstring, STRING_SIZE, "%s %s", mkfscommand, destination->part_root); - if (runcommandwithstatus(commandstring, ctr[TR_MAKING_ROOT_FILESYSTEM])) - { - errorbox(ctr[TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM]); + rc = hw_mount_filesystems(destination, DESTINATION_MOUNT_PATH); + if (rc) { + errorbox(ctr[TR_UNABLE_TO_MOUNT_FILESYSTEMS]); goto EXIT; } - snprintf(commandstring, STRING_SIZE, "%s %s", mkfscommand, destination->part_data); - if (runcommandwithstatus(commandstring, ctr[TR_MAKING_LOG_FILESYSTEM])) - { - errorbox(ctr[TR_UNABLE_TO_MAKE_LOG_FILESYSTEM]); - goto EXIT; - } - - snprintf(commandstring, STRING_SIZE, "/bin/mount %s /harddisk", destination->part_root); - if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_ROOT_FILESYSTEM])) - { - errorbox(ctr[TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM]); - goto EXIT; - } - - mkdir("/harddisk/boot", S_IRWXU|S_IRWXG|S_IRWXO); - mkdir("/harddisk/var", S_IRWXU|S_IRWXG|S_IRWXO); - mkdir("/harddisk/var/log", S_IRWXU|S_IRWXG|S_IRWXO); - - snprintf(commandstring, STRING_SIZE, "/bin/mount %s /harddisk/boot", destination->part_boot); - if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_BOOT_FILESYSTEM])) - { - errorbox(ctr[TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM]); - goto EXIT; - } - if (swap_file) { - snprintf(commandstring, STRING_SIZE, "/sbin/swapon %s", destination->part_swap); - if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_SWAP_PARTITION])) - { - errorbox(ctr[TR_UNABLE_TO_MOUNT_SWAP_PARTITION]); - goto EXIT; - } - } - snprintf(commandstring, STRING_SIZE, "/bin/mount %s /harddisk/var", destination->part_data); - if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_LOG_FILESYSTEM])) - { - errorbox(ctr[TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM]); - goto EXIT; - } + newtPopWindow(); + // Extract files... snprintf(commandstring, STRING_SIZE, "/bin/tar -C /harddisk -xvf /cdrom/" SNAME "-" VERSION ".tlz --lzma 2>/dev/null"); @@ -582,12 +466,6 @@ int main(int argc, char *argv[]) { /* Save language und local settings */ write_lang_configs(shortlangname); - /* mount proc filesystem */ - mysystem("mkdir /harddisk/proc"); - mysystem("/bin/mount --bind /proc /harddisk/proc"); - mysystem("/bin/mount --bind /dev /harddisk/dev"); - mysystem("/bin/mount --bind /sys /harddisk/sys"); - /* Build cache lang file */ snprintf(commandstring, STRING_SIZE, "/usr/sbin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\""); if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_LANG_CACHE])) @@ -606,18 +484,20 @@ int main(int argc, char *argv[]) { snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE4#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_data); system(commandstring); - if (fstype == EXT2) { - replace("/harddisk/etc/fstab", "FSTYPE", "ext2"); - replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro"); - } else if (fstype == REISERFS) { - replace("/harddisk/etc/fstab", "FSTYPE", "reiserfs"); - replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro"); - } else if (fstype == EXT3) { - replace("/harddisk/etc/fstab", "FSTYPE", "ext3"); - replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro"); - } else if (fstype == EXT4) { - replace("/harddisk/etc/fstab", "FSTYPE", "ext4"); - replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro"); + switch (destination->filesystem) { + case HW_FS_REISERFS: + replace("/harddisk/etc/fstab", "FSTYPE", "reiserfs"); + replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro"); + break; + + case HW_FS_EXT4: + case HW_FS_EXT4_WO_JOURNAL: + replace("/harddisk/etc/fstab", "FSTYPE", "ext4"); + replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro"); + break; + + default: + assert(0); } replace("/harddisk/boot/grub/grub.conf", "KVER", KERNEL_VERSION); @@ -694,58 +574,30 @@ EXIT: freekeyvalues(ethernetkv); - if (allok && !allok_fastexit) - { - if (unattended) { - fprintf(flog, "Entering unattended setup\n"); - if (unattended_setup(unattendedkv)) { - snprintf(commandstring, STRING_SIZE, "/bin/sleep 10"); - runcommandwithstatus(commandstring, "Unattended installation finished, system will reboot"); - } else { - errorbox("Unattended setup failed."); - goto EXIT; - } - } - + if (allok) { fflush(flog); fclose(flog); - newtFinished(); - - if (system("/bin/umount /harddisk/proc")) - printf("Unable to umount /harddisk/proc.\n"); - } else { - fflush(flog); - fclose(flog); - newtFinished(); - } - - fcloseall(); - - if (swap_file) { - snprintf(commandstring, STRING_SIZE, "/bin/swapoff %s", destination->part_swap); } newtFinished(); - system("/bin/umount /harddisk/proc >/dev/null 2>&1"); - system("/bin/umount /harddisk/dev >/dev/null 2>&1"); - system("/bin/umount /harddisk/sys >/dev/null 2>&1"); - - system("/bin/umount /harddisk/var >/dev/null 2>&1"); - system("/bin/umount /harddisk/boot >/dev/null 2>&1"); - system("/bin/umount /harddisk >/dev/null 2>&1"); - - if (!(allok)) - system("/etc/halt"); - // Free resources free(sourcedrive); - free(destination); + + if (destination) { + hw_umount_filesystems(destination, DESTINATION_MOUNT_PATH); + free(destination); + } if (selected_disks) hw_free_disks(selected_disks); hw_free(hw); + fcloseall(); + + if (!(allok)) + system("/etc/halt"); + return 0; } From 1a4d8f1fc2bc4e08d2c7b5852caf05a247c066bc Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 21 Jul 2014 14:03:16 +0200 Subject: [PATCH 009/297] installer: Remove unused variable. --- src/install+setup/install/main.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 91a6c943c..17a410793 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -160,7 +160,6 @@ int main(int argc, char *argv[]) { char message[STRING_SIZE]; char title[STRING_SIZE]; int allok = 0; - struct keyvalue *ethernetkv = initkeyvalues(); FILE *handle, *cmdfile, *copying; char line[STRING_SIZE]; @@ -571,8 +570,6 @@ EXIT: if (!(allok)) newtWinMessage(title, ctr[TR_OK], ctr[TR_PRESS_OK_TO_REBOOT]); - - freekeyvalues(ethernetkv); if (allok) { fflush(flog); From 2c9c458c71b8b7a2fd2791dfb48ce342c29bef9f Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 21 Jul 2014 14:08:46 +0200 Subject: [PATCH 010/297] installer: Fix umounting and ejecting cdrom after install. --- src/install+setup/install/main.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 17a410793..56b9446db 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -552,9 +552,11 @@ int main(int argc, char *argv[]) { "cp /cdrom/%s /harddisk/var/ipfire/backup", restore_file); mysystem(commandstring); } - - mysystem("umount /cdrom"); - snprintf(commandstring, STRING_SIZE, "/usr/bin/eject /dev/%s", sourcedrive); + + // Umount source drive and eject + hw_umount(SOURCE_MOUNT_PATH); + + snprintf(commandstring, STRING_SIZE, "/usr/bin/eject %s", sourcedrive); mysystem(commandstring); if (!unattended) { From bd5e7c2934ed397fe9e28f555d88fde25a9041f8 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 21 Jul 2014 14:59:41 +0200 Subject: [PATCH 011/297] installer: Rewrite license box. Used to use wrong button type and was a bit more code than needed. --- src/install+setup/install/main.c | 33 +++++++++++++++++- src/install+setup/libsmooth/main.c | 55 ------------------------------ 2 files changed, 32 insertions(+), 56 deletions(-) diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 56b9446db..645bee37d 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -144,6 +144,36 @@ static int newtWinOkCancel(const char* title, const char* message, int width, in return ret; } +static int newtLicenseBox(const char* title, const char* text, int width, int height) { + int ret = 1; + + newtCenteredWindow(width, height, title); + + newtComponent form = newtForm(NULL, NULL, 0); + + newtComponent textbox = newtTextbox(1, 1, width - 2, height - 7, + NEWT_FLAG_WRAP|NEWT_FLAG_SCROLL); + newtTextboxSetText(textbox, text); + newtFormAddComponent(form, textbox); + + char choice; + newtComponent checkbox = newtCheckbox(3, height - 3, ctr[TR_LICENSE_ACCEPT], + ' ', " *", &choice); + + newtComponent btn = newtButton(width - 15, height - 4, ctr[TR_OK]); + + newtFormAddComponents(form, checkbox, btn, NULL); + + newtComponent answer = newtRunForm(form); + if (answer == btn && choice == '*') + ret = 0; + + newtFormDestroy(form); + newtPopWindow(); + + return ret; +} + int main(int argc, char *argv[]) { struct hw* hw = hw_init(); @@ -277,8 +307,9 @@ int main(int argc, char *argv[]) { fread(discl_msg, 1, 40000, copying); fclose(copying); - if (disclaimerbox(discl_msg)==0) { + if (newtLicenseBox(title, discl_msg, 75, 20)) { errorbox(ctr[TR_LICENSE_NOT_ACCEPTED]); + goto EXIT; } } diff --git a/src/install+setup/libsmooth/main.c b/src/install+setup/libsmooth/main.c index aef3e9322..14c308469 100644 --- a/src/install+setup/libsmooth/main.c +++ b/src/install+setup/libsmooth/main.c @@ -45,61 +45,6 @@ void errorbox(char *message) newtWinMessage(ctr[TR_ERROR], ctr[TR_OK], message); } -int scrollmsgbox(int width, int height, char *title, char *text, ...) -{ - int rc = 0; - newtComponent t, f, b, c; - char *buf = NULL; - char checkbox; - int size = 0; - int i = 0; - va_list args; - - va_start(args, text); - - do { - size += 40000; - if (buf) free(buf); - buf = malloc(size); - i = vsnprintf(buf, size, text, args); - } while (i == size); - - va_end(args); - - newtCenteredWindow(width, height, title); - - b = newtCompactButton(width - 15 ,height - 2, ctr[TR_OK]); - c = newtCheckbox(3, height - 2, ctr[TR_LICENSE_ACCEPT], ' ', " *", &checkbox); - - t = newtTextbox(1, 1, width - 2, height - 4, NEWT_TEXTBOX_WRAP+NEWT_TEXTBOX_SCROLL); - newtTextboxSetText(t, buf); - - f = newtForm(NULL, NULL, 0); - free(buf); - - newtFormAddComponent(f, c); - newtFormAddComponent(f, b); - newtFormAddComponent(f, t); - - newtRunForm(f); - if (checkbox=='*') rc=1; - newtFormDestroy(f); - return rc; -} - -int disclaimerbox(char *message) -{ - int rc; - char title[STRING_SIZE]; - - sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN); - rc = scrollmsgbox(75, 20, title, message); - newtPopWindow(); - - return rc; -} - - void statuswindow(int width, int height, char *title, char *text, ...) { newtComponent t, f; From 4a0d9bef07434e0fc789195074581bf749be3d3e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 22 Jul 2014 00:04:20 +0200 Subject: [PATCH 012/297] installer: Add support for RAID. --- config/rootfiles/installer/mdadm | 3 ++ langs/de/install/lang_de.c | 4 +++ langs/en/install/lang_en.c | 4 +++ langs/es/install/lang_es.c | 4 +++ langs/fr/install/lang_fr.c | 4 +++ langs/nl/install/lang_nl.c | 4 +++ langs/pl/install/lang_pl.c | 4 +++ langs/ru/install/lang_ru.c | 4 +++ langs/tr/install/lang_tr.c | 4 +++ src/install+setup/install/hw.c | 51 ++++++++++++++++++++++++++++++-- src/install+setup/install/hw.h | 4 +++ src/install+setup/install/main.c | 18 ++++++++++- 12 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 config/rootfiles/installer/mdadm diff --git a/config/rootfiles/installer/mdadm b/config/rootfiles/installer/mdadm new file mode 100644 index 000000000..bd68e7847 --- /dev/null +++ b/config/rootfiles/installer/mdadm @@ -0,0 +1,3 @@ +lib/udev/rules.d/64-md-raid.rules +sbin/mdadm +sbin/mdmon diff --git a/langs/de/install/lang_de.c b/langs/de/install/lang_de.c index fe68fb3a6..f982bea1b 100644 --- a/langs/de/install/lang_de.c +++ b/langs/de/install/lang_de.c @@ -359,6 +359,10 @@ char *de_tr[] = { "Hänge Dateisysteme ein...", /* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ "Die Dateisysteme konnten nicht eingehangen werden.", +/* TR_BUILDING_RAID */ +"Erstelle RAID...", +/* TR_UNABLE_TO_BUILD_RAID */ +"Das RAID konnte nicht erstellt werden.", /* TR_NO_IPCOP_TARBALL_FOUND */ "Auf dem Webserver wurde kein ipcop-Tarball gefunden.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/en/install/lang_en.c b/langs/en/install/lang_en.c index aa63b01c4..3c6baa08e 100644 --- a/langs/en/install/lang_en.c +++ b/langs/en/install/lang_en.c @@ -355,6 +355,10 @@ char *en_tr[] = { "Mounting filesystems...", /* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ "Unable to mount filesystems.", +/* TR_BUILDING_RAID */ +"Building RAID...", +/* TR_UNABLE_TO_BUILD_RAID */ +"Unable to build RAID.", /* TR_NO_IPCOP_TARBALL_FOUND */ "No ipcop tarball found on Web Server.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/es/install/lang_es.c b/langs/es/install/lang_es.c index 084ff271f..c16927289 100644 --- a/langs/es/install/lang_es.c +++ b/langs/es/install/lang_es.c @@ -351,6 +351,10 @@ char *es_tr[] = { "Mounting filesystems...", /* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ "Unable to mount filesystems.", +/* TR_BUILDING_RAID */ +"Building RAID...", +/* TR_UNABLE_TO_BUILD_RAID */ +"Unable to build RAID.", /* TR_NO_IPCOP_TARBALL_FOUND */ "No se encontró ningun archivo tarball de ipcop en el servidor web", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/fr/install/lang_fr.c b/langs/fr/install/lang_fr.c index 1f61d6859..4a33564f8 100644 --- a/langs/fr/install/lang_fr.c +++ b/langs/fr/install/lang_fr.c @@ -351,6 +351,10 @@ char *fr_tr[] = { "Mounting filesystems...", /* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ "Unable to mount filesystems.", +/* TR_BUILDING_RAID */ +"Building RAID...", +/* TR_UNABLE_TO_BUILD_RAID */ +"Unable to build RAID.", /* TR_NO_IPCOP_TARBALL_FOUND */ "Aucun tarball ipcop trouvé sur le serveur Web.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/nl/install/lang_nl.c b/langs/nl/install/lang_nl.c index 934d9bf4a..83cc74859 100644 --- a/langs/nl/install/lang_nl.c +++ b/langs/nl/install/lang_nl.c @@ -355,6 +355,10 @@ char *nl_tr[] = { "Mounting filesystems...", /* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ "Unable to mount filesystems.", +/* TR_BUILDING_RAID */ +"Building RAID...", +/* TR_UNABLE_TO_BUILD_RAID */ +"Unable to build RAID.", /* TR_NO_IPCOP_TARBALL_FOUND */ "Er is geen ipcop tarball gevonden op de webserver.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/pl/install/lang_pl.c b/langs/pl/install/lang_pl.c index ac75e3813..0163ddd27 100644 --- a/langs/pl/install/lang_pl.c +++ b/langs/pl/install/lang_pl.c @@ -351,6 +351,10 @@ char *pl_tr[] = { "Mounting filesystems...", /* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ "Unable to mount filesystems.", +/* TR_BUILDING_RAID */ +"Building RAID...", +/* TR_UNABLE_TO_BUILD_RAID */ +"Unable to build RAID.", /* TR_NO_IPCOP_TARBALL_FOUND */ "Nie znaleziono archiwum tar ipcop na serwerze Web.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/ru/install/lang_ru.c b/langs/ru/install/lang_ru.c index d2fb5c586..78deeef18 100644 --- a/langs/ru/install/lang_ru.c +++ b/langs/ru/install/lang_ru.c @@ -349,6 +349,10 @@ char *ru_tr[] = { "Mounting filesystems...", /* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ "Unable to mount filesystems.", +/* TR_BUILDING_RAID */ +"Building RAID...", +/* TR_UNABLE_TO_BUILD_RAID */ +"Unable to build RAID.", /* TR_NO_IPCOP_TARBALL_FOUND */ "На сервере не найден архив ipcop.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/langs/tr/install/lang_tr.c b/langs/tr/install/lang_tr.c index 2253c9571..eee17bb61 100644 --- a/langs/tr/install/lang_tr.c +++ b/langs/tr/install/lang_tr.c @@ -355,6 +355,10 @@ char *tr_tr[] = { "Mounting filesystems...", /* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ "Unable to mount filesystems.", +/* TR_BUILDING_RAID */ +"Building RAID...", +/* TR_UNABLE_TO_BUILD_RAID */ +"Unable to build RAID.", /* TR_NO_IPCOP_TARBALL_FOUND */ "Web sunucuda hiçbir ipfire arşivi bulunamadı.", /* TR_NO_ORANGE_INTERFACE */ diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index 0e1f49900..e7d60acd3 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -116,7 +116,7 @@ char* hw_find_source_medium(struct hw* hw) { // Skip everything what we cannot work with if (strstartswith(dev_path, "/dev/loop") || strstartswith(dev_path, "/dev/fd") || - strstartswith(dev_path, "/dev/ram")) + strstartswith(dev_path, "/dev/ram") || strstartswith(dev_path, "/dev/md")) continue; if (hw_test_source_medium(dev_path)) { @@ -173,7 +173,8 @@ struct hw_disk** hw_find_disks(struct hw* hw) { // Skip everything what we cannot work with if (strstartswith(dev_path, "/dev/loop") || strstartswith(dev_path, "/dev/fd") || - strstartswith(dev_path, "/dev/ram") || strstartswith(dev_path, "/dev/sr")) { + strstartswith(dev_path, "/dev/ram") || strstartswith(dev_path, "/dev/sr") || + strstartswith(dev_path, "/dev/md")) { udev_device_unref(dev); continue; } @@ -410,6 +411,7 @@ struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks } else if (part_type == HW_PART_TYPE_RAID1) { dest->disk1 = *disks++; dest->disk2 = *disks; + dest->raid_level = 1; snprintf(dest->path, sizeof(dest->path), "/dev/md0"); } @@ -675,3 +677,48 @@ int hw_umount_filesystems(struct hw_destination* dest, const char* prefix) { return 0; } + +int hw_setup_raid(struct hw_destination* dest) { + char* cmd = NULL; + + assert(dest->is_raid); + + asprintf(&cmd, "echo \"y\" | /sbin/mdadm --create --verbose --metadata=0.9 %s", dest->path); + + switch (dest->raid_level) { + case 1: + asprintf(&cmd, "%s --level=1 --raid-devices=2", cmd); + break; + + default: + assert(0); + } + + if (dest->disk1) { + asprintf(&cmd, "%s %s", cmd, dest->disk1->path); + } + + if (dest->disk2) { + asprintf(&cmd, "%s %s", cmd, dest->disk2->path); + } + + int r = mysystem(cmd); + free(cmd); + + // Wait a moment until the device has been properly brought up + if (r == 0) { + unsigned int counter = 10; + while (counter-- > 0) { + sleep(1); + + if (access(dest->path, R_OK) == 0) + break; + } + } + + return r; +} + +int hw_stop_all_raid_arrays() { + return mysystem("/sbin/mdadm --stop --scan"); +} diff --git a/src/install+setup/install/hw.h b/src/install+setup/install/hw.h index 27f07bd12..eb2908cb6 100644 --- a/src/install+setup/install/hw.h +++ b/src/install+setup/install/hw.h @@ -70,6 +70,7 @@ struct hw_destination { char path[DEV_SIZE]; int is_raid; + int raid_level; const struct hw_disk* disk1; const struct hw_disk* disk2; @@ -112,4 +113,7 @@ int hw_create_filesystems(struct hw_destination* dest); int hw_mount_filesystems(struct hw_destination* dest, const char* prefix); int hw_umount_filesystems(struct hw_destination* dest, const char* prefix); +int hw_setup_raid(struct hw_destination* dest); +int hw_stop_all_raid_arrays(); + #endif /* HEADER_HW_H */ diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 645bee37d..ebcc0f594 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -239,7 +239,8 @@ int main(int argc, char *argv[]) { // Load common modules mysystem("/sbin/modprobe vfat"); // USB key - + hw_stop_all_raid_arrays(); + /* German is the default */ for (choice = 0; langnames[choice]; choice++) { @@ -454,6 +455,19 @@ int main(int argc, char *argv[]) { goto EXIT; } + // Setting up RAID if needed. + if (destination->is_raid) { + statuswindow(60, 4, title, ctr[TR_BUILDING_RAID]); + + rc = hw_setup_raid(destination); + if (rc) { + errorbox(ctr[TR_UNABLE_TO_BUILD_RAID]); + goto EXIT; + } + + newtPopWindow(); + } + // Execute the partitioning... statuswindow(60, 4, title, ctr[TR_PARTITIONING_DISK]); @@ -619,6 +633,8 @@ EXIT: free(destination); } + hw_stop_all_raid_arrays(); + if (selected_disks) hw_free_disks(selected_disks); From 5affb7a2658bd2d73ef88dbc34a34c25c7cc1103 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 22 Jul 2014 00:06:08 +0200 Subject: [PATCH 013/297] mdadm: Make package part of the core system --- config/rootfiles/{packages => common}/mdadm | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename config/rootfiles/{packages => common}/mdadm (100%) diff --git a/config/rootfiles/packages/mdadm b/config/rootfiles/common/mdadm similarity index 100% rename from config/rootfiles/packages/mdadm rename to config/rootfiles/common/mdadm From 21fe60a2070c0cef1279b5719c199d2332531cf9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 22 Jul 2014 00:27:32 +0200 Subject: [PATCH 014/297] dracut: Enable mdadm module --- config/rootfiles/common/armv5tel/dracut | 13 +++++++++++++ config/rootfiles/common/i586/dracut | 13 +++++++++++++ config/rootfiles/installer/mdadm | 3 --- lfs/dracut | 2 +- 4 files changed, 27 insertions(+), 4 deletions(-) delete mode 100644 config/rootfiles/installer/mdadm diff --git a/config/rootfiles/common/armv5tel/dracut b/config/rootfiles/common/armv5tel/dracut index 9c41aba9a..ecf4325a0 100644 --- a/config/rootfiles/common/armv5tel/dracut +++ b/config/rootfiles/common/armv5tel/dracut @@ -22,6 +22,19 @@ usr/share/dracut/modules.d/90kernel-modules usr/share/dracut/modules.d/90kernel-modules/install usr/share/dracut/modules.d/90kernel-modules/installkernel usr/share/dracut/modules.d/90kernel-modules/parse-kernel.sh +usr/share/dracut/modules.d/90mdraid +usr/share/dracut/modules.d/90mdraid/65-md-incremental-imsm.rules +usr/share/dracut/modules.d/90mdraid/check +usr/share/dracut/modules.d/90mdraid/install +usr/share/dracut/modules.d/90mdraid/installkernel +usr/share/dracut/modules.d/90mdraid/md-noimsm.sh +usr/share/dracut/modules.d/90mdraid/md_finished.sh +usr/share/dracut/modules.d/90mdraid/mdadm_auto.sh +usr/share/dracut/modules.d/90mdraid/mdcontainer_start.sh +usr/share/dracut/modules.d/90mdraid/mdmon-pre-udev.sh +usr/share/dracut/modules.d/90mdraid/mdraid-cleanup.sh +usr/share/dracut/modules.d/90mdraid/mdraid_start.sh +usr/share/dracut/modules.d/90mdraid/parse-md.sh usr/share/dracut/modules.d/95debug usr/share/dracut/modules.d/95debug/check usr/share/dracut/modules.d/95debug/install diff --git a/config/rootfiles/common/i586/dracut b/config/rootfiles/common/i586/dracut index 27d824372..24516f090 100644 --- a/config/rootfiles/common/i586/dracut +++ b/config/rootfiles/common/i586/dracut @@ -19,6 +19,19 @@ usr/share/dracut/modules.d/90kernel-modules usr/share/dracut/modules.d/90kernel-modules/install usr/share/dracut/modules.d/90kernel-modules/installkernel usr/share/dracut/modules.d/90kernel-modules/parse-kernel.sh +usr/share/dracut/modules.d/90mdraid +usr/share/dracut/modules.d/90mdraid/65-md-incremental-imsm.rules +usr/share/dracut/modules.d/90mdraid/check +usr/share/dracut/modules.d/90mdraid/install +usr/share/dracut/modules.d/90mdraid/installkernel +usr/share/dracut/modules.d/90mdraid/md-noimsm.sh +usr/share/dracut/modules.d/90mdraid/md_finished.sh +usr/share/dracut/modules.d/90mdraid/mdadm_auto.sh +usr/share/dracut/modules.d/90mdraid/mdcontainer_start.sh +usr/share/dracut/modules.d/90mdraid/mdmon-pre-udev.sh +usr/share/dracut/modules.d/90mdraid/mdraid-cleanup.sh +usr/share/dracut/modules.d/90mdraid/mdraid_start.sh +usr/share/dracut/modules.d/90mdraid/parse-md.sh usr/share/dracut/modules.d/95debug usr/share/dracut/modules.d/95debug/check usr/share/dracut/modules.d/95debug/install diff --git a/config/rootfiles/installer/mdadm b/config/rootfiles/installer/mdadm deleted file mode 100644 index bd68e7847..000000000 --- a/config/rootfiles/installer/mdadm +++ /dev/null @@ -1,3 +0,0 @@ -lib/udev/rules.d/64-md-raid.rules -sbin/mdadm -sbin/mdmon diff --git a/lfs/dracut b/lfs/dracut index aacf7474f..22da76dbc 100644 --- a/lfs/dracut +++ b/lfs/dracut @@ -84,7 +84,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cp -vf $(DIR_SRC)/src/dracut/dracut.conf /etc/dracut.conf.d/ - rm -rf /usr/share/dracut/modules.d/*{dash,fips,redhat-i18n,rpmversion,network,ifcfg,plymouth,btrfs,crypt,dm,dmraid,dmsquash-live,lvm,mdraid,multipath,dasd,dasd_mod,fcoe,iscsi,nbd,nfs,resume,uswsusp,zfcp,znet,selinux} + rm -rf /usr/share/dracut/modules.d/*{dash,fips,redhat-i18n,rpmversion,network,ifcfg,plymouth,btrfs,crypt,dm,dmraid,dmsquash-live,lvm,multipath,dasd,dasd_mod,fcoe,iscsi,nbd,nfs,resume,uswsusp,zfcp,znet,selinux} sed -e "s/--resolve-names=never//g" -i \ /usr/share/dracut/modules.d/99base/init From 05cebb0d3f53f9e1aa7a02e8d77b36252d323024 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 22 Jul 2014 00:33:22 +0200 Subject: [PATCH 015/297] grub: Remove ro attribute from kernel command line. --- config/grub/grub.conf | 4 ++-- src/install+setup/install/main.c | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/config/grub/grub.conf b/config/grub/grub.conf index 2199bf1d8..bdfb3a949 100644 --- a/config/grub/grub.conf +++ b/config/grub/grub.conf @@ -11,11 +11,11 @@ splashimage (hd0,0)/grub/ipfire.xpm.gz #terminal --timeout=1 serial console title IPFire root (hd0,0) - kernel /vmlinuz-KVER-ipfire root=ROOT panic=10 MOUNT + kernel /vmlinuz-KVER-ipfire root=ROOT panic=10 initrd /ipfirerd-KVER.img savedefault 0 title IPFire (vesafb 1024x768) root (hd0,0) - kernel /vmlinuz-KVER-ipfire root=ROOT panic=10 vga=791 MOUNT + kernel /vmlinuz-KVER-ipfire root=ROOT panic=10 vga=791 initrd /ipfirerd-KVER.img savedefault 1 diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index ebcc0f594..6a3361354 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -531,13 +531,11 @@ int main(int argc, char *argv[]) { switch (destination->filesystem) { case HW_FS_REISERFS: replace("/harddisk/etc/fstab", "FSTYPE", "reiserfs"); - replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro"); break; case HW_FS_EXT4: case HW_FS_EXT4_WO_JOURNAL: replace("/harddisk/etc/fstab", "FSTYPE", "ext4"); - replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro"); break; default: From 2c4536c75b7f013c3cdc997810c207149ca1977c Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 22 Jul 2014 00:34:42 +0200 Subject: [PATCH 016/297] fstab: Make auto attribute for filesystem type. --- config/etc/fstab | 6 +++--- src/install+setup/install/main.c | 14 -------------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/config/etc/fstab b/config/etc/fstab index 0cd30ebe9..775f619b0 100644 --- a/config/etc/fstab +++ b/config/etc/fstab @@ -1,9 +1,9 @@ # # file system mount-point type options dump fsck # order -DEVICE1 /boot ext2 defaults 1 2 +DEVICE1 /boot auto defaults 1 2 DEVICE2 swap swap pri=1 0 0 -DEVICE3 / FSTYPE defaults 1 1 -DEVICE4 /var FSTYPE defaults 1 1 +DEVICE3 / auto defaults 1 1 +DEVICE4 /var auto defaults 1 1 none /var/log/rrd tmpfs defaults,size=64M 0 0 none /var/lock tmpfs defaults,size=8M 0 0 diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 6a3361354..d5fe422df 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -528,20 +528,6 @@ int main(int argc, char *argv[]) { snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE4#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_data); system(commandstring); - switch (destination->filesystem) { - case HW_FS_REISERFS: - replace("/harddisk/etc/fstab", "FSTYPE", "reiserfs"); - break; - - case HW_FS_EXT4: - case HW_FS_EXT4_WO_JOURNAL: - replace("/harddisk/etc/fstab", "FSTYPE", "ext4"); - break; - - default: - assert(0); - } - replace("/harddisk/boot/grub/grub.conf", "KVER", KERNEL_VERSION); snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#root=ROOT#root=UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/boot/grub/grub.conf", destination->part_root); From 91c9ed84bba3f2c70ad3e38d63dca9ea9d8035a5 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 23 Jul 2014 22:57:47 +0200 Subject: [PATCH 017/297] patch: Update to version 2.7.1 Supports git style renames. --- config/rootfiles/common/patch | 2 +- lfs/patch | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/rootfiles/common/patch b/config/rootfiles/common/patch index b3538ad19..d144ca1b8 100644 --- a/config/rootfiles/common/patch +++ b/config/rootfiles/common/patch @@ -1,2 +1,2 @@ usr/bin/patch -#usr/man/man1/patch.1 +#usr/share/man/man1/patch.1 diff --git a/lfs/patch b/lfs/patch index 46036c8b8..b5bd78771 100644 --- a/lfs/patch +++ b/lfs/patch @@ -24,10 +24,10 @@ include Config -VER = 2.5.4 +VER = 2.7.1 THISAPP = patch-$(VER) -DL_FILE = $(THISAPP).tar.gz +DL_FILE = $(THISAPP).tar.xz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) @@ -53,7 +53,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = ee5ae84d115f051d87fcaaef3b4ae782 +$(DL_FILE)_MD5 = e9ae5393426d3ad783a300a338c09b72 install : $(TARGET) @@ -82,8 +82,8 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && CPPFLAGS=-D_GNU_SOURCE ./configure $(EXTRA_CONFIG) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && ./configure $(EXTRA_CONFIG) cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE) cd $(DIR_APP) && make $(EXTRA_INSTALL) install @rm -rf $(DIR_APP) From f5bfed65acbb2da95dd809f41333d73eaf9b6f5c Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 24 Jul 2014 14:12:42 +0200 Subject: [PATCH 018/297] grub: Update to 2.00 for i586. --- config/grub/grub.conf | 21 -- config/grub/ipfire.xpm.gz | 497 -------------------------- config/grub2/default | 7 + config/rootfiles/common/i586/grub | 568 ++++++++++++++++++++++++++++-- lfs/grub | 46 ++- 5 files changed, 568 insertions(+), 571 deletions(-) delete mode 100644 config/grub/grub.conf delete mode 100644 config/grub/ipfire.xpm.gz create mode 100644 config/grub2/default diff --git a/config/grub/grub.conf b/config/grub/grub.conf deleted file mode 100644 index bdfb3a949..000000000 --- a/config/grub/grub.conf +++ /dev/null @@ -1,21 +0,0 @@ -timeout 10 -default saved -foreground = 6d6963 -background = ffffff -#hiddenmenu -# *** If you want use serial console comment next line -splashimage (hd0,0)/grub/ipfire.xpm.gz -# *** add "console=ttyS0,115200n8" to kernel cmdline, -# *** uncomment following lines and check also inittab -#serial --unit=0 --speed=115200 -#terminal --timeout=1 serial console -title IPFire - root (hd0,0) - kernel /vmlinuz-KVER-ipfire root=ROOT panic=10 - initrd /ipfirerd-KVER.img - savedefault 0 -title IPFire (vesafb 1024x768) - root (hd0,0) - kernel /vmlinuz-KVER-ipfire root=ROOT panic=10 vga=791 - initrd /ipfirerd-KVER.img - savedefault 1 diff --git a/config/grub/ipfire.xpm.gz b/config/grub/ipfire.xpm.gz deleted file mode 100644 index ff947765f..000000000 --- a/config/grub/ipfire.xpm.gz +++ /dev/null @@ -1,497 +0,0 @@ -/* XPM */ -static char * Bootsplash_xpm[] = { -"640 480 14 1", -". c #030303", -"+ c #171717", -"@ c #272727", -"# c #383838", -"$ c #4A4A4A", -"% c #575757", -"& c #6F6F6F", -"* c #888888", -"= c #989898", -"- c #A8A8A8", -"; c #B8B8B8", -"> c #C7C7C7", -", c #D7D7D7", -"' c #E7E7E7", -">;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>,>>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,,>,,>,,>,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,',,',,',',,',',,',',',',',',',',',',',',',',',','','','','','',''',''',''','", -";>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>>;;>>>;>>;;>>>;;>;>;>;>;>;>;>;>;>>;>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>,>,>,>,>,>,>,>,>,>,,>,,>,,>,>>,>>,>>,>>,>,>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,,>,,>,,>,,>,>,,>,,>,,>,,>,,,>,,,>,,,>,,,>,>,>,>,>,>,>,,>,,>,,>,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,',,',',',',',',',',','','','',',,',,',,',,',',',,',',',',,',',',',',',',',','','','','',','','','','',''',''',''','''", -">>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>>;;>;>>>;>>;>>>;>;>;>>>;>;>>>>>;>>>;>>>;>>>>>>>;>>>>>;>>>;>>;>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>>>,>,>,>>,>,>>,>>>,,>>,>>,>,,>>,>,>,>,>,>,>,>,,>,>,>,>,>,>,,,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,,,>,,,,,>,,>,,,,,,,,,,,,,,,>,,>,,>,,>,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,',,',,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,',,,',',',,',',,',,,'',,',,','',,',',',',',',','',',',',',',','',',',',',',',',',',',',',''", -";>>;>;>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>;;>>>>>;;>>;;>;>;>>>;>>>;>>>;>;>>>;>>>;>>>;>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>,>,>,>,>,>,>,>>,>>>,>,>>>,>>>>,>,>>,>,>>,>,>>,,>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,,>,,,>,,,>,,,>,,,,,,,,,,,,,>,>,,,,,>,,,,,,,,>,>,,>,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,',,',',',',',',',,',,,',',,,',,,,',',,',',,',',,'',',,',,',',',',',',',',',',',',',',','',''',''',''',''''''''''''','", -";>;>>;>>;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>>;>;;;>>;>;>>>;>>;>>>;;>>;>>>>;>;>>;>>>;>>>>>>;>;>>>;>;>>;>>>;>>>;>>>;>>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>,>>>>>,>>>>>,>>>>>>>>>>>>>>,>>,>>>>,>,>>,,>>,>>,>>>,>,>,>,>>,>,,>>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,,,,>,,>>,,>,>,>,,,>,>>,>,>,>>,,,,,>,>,,,>,>,,>,,,,,,,,,,,,,,,,,,>,,,,,>,,,,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,',,,,,',,,,,',,,,,,,,,,,,,,',,',,,,',',,'',,',,',,,',',',',,','',,',',',',',',',',',',''',','','',',',,'',,'',','',',',',',','''", -";>;>;>;;>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>>>>>;>>;>;>>;>;>;>>>>;>;>;>>>>>>>>;>>>;>;>>>>>>>>>>>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>>>>>>>,>>,>>,>>>>>>>,>>>>>>,>>>,>,>,>,>,>,>,>>>,>,>,>>>>,>>>,>>,>>,>,>>>,>,>,>>,>>,,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>>,>,>,,,>>,,,>,>,>,,,,>,>,,,,,,>,>,,,,>,,,,,,,>,,,>,>,,>,,>,,>,,,,,>,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,,,,,,,,',,',,',,,,,,,',,,,,,',,,',',',',',',',,,',',',,,,',,,',,',,'',,',,,',',,',,'',',',',',',',',',',',,'',',',',','''',''',,''',','','','','','", -";>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>>>;;>;;>;>;>>;>>;>>>;>;>;>>>>>;>;>;>;>>>;>>>>>;>>;>;>>;>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>>>>>>>>>>>>>>>>>,>>>>>>,>,>>,>,>,>,>,>,>>,>,>>,>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,,>,,,,>>,,,>,,>,>,,,,>,>,>,,,,,>,,>,>,>,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',,,,,,,,,,,,,,,,,,,',,,,,,',',,',',',',',,,',,'',',,',',',,,',',',',',',',','','',',','',''',,'',',''','','','','','','''", -">;>;>>;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;;>>;>>>;>;>>;>;>>;>;>>>;>>;>;>>;>>>>>>;>>;>>;>>>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>,>>>>>>>>>,>,>,>,>,>,>,>,>>,>,>,>,>>>,>>>>,>>>,>>,>,>>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,>,>,>,,,>,>,>>,,>,>,,>,,,,>,>,>,,,,,>,>,,>,,,,,,,,>,,,,,>,,>,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,',,,',,,,,,,,,',',',',',',',',,',',',',,,',,',,,',,,',',',,,','',',',',',,',',',',',',',',',','',','',,''',','',',',''''','','',''','", -">;>;;>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>>;>>;>;>>>;>;>>;>>>>>;>>>;>;>>>>>>;>;>>;>>>>>>>;>>;>>;>>>>;>>;>>>;>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>,>,>,>>>>>>>>>>>>>>>>>>,>>>,>>>,>,>>,>,>,>,>>,>>>,>>,>,>>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,,,,>,,,>,,,,>,>,,,>,,>,>,,,,,>,,,>,>,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,',',',,,,,,,,,,,,,,,,,,',,,',,,',',,',,'',,'',,',,',',',,,',,',','',',',',',',','','','',',',','',,'''',','','',,''','','',''''", -";>;>>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;>;>;;>>;;>;>;>;>>;;>;>>;>>;;>;>>;;>>>>;>;>;>>>>;>>>>;>;>>>;>>>>>;>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>>,>>,>,>,>,>,>,>,>>,>,>>,>>>>,>>,>>>,>,>>,,>,>,>>>,,>,>,>>,>>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,,,>,>,,>>,,>>,>,,,,>,,,>,,,,>,>,,,>,,,,,,,>,,,,,>,,>,,,,,,,,>,,>,,,>,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,',,',,,,,,,,',,',',',',',',',,',',,',,,,',,',,,',,,,',,',',,,'',',',,',,',',',',',',',',',,',,','','',''',,',''','','''','',''''',','", -">>;;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>>;;>;>>;;>>;>>>;>>;>>>;>;>>;>>>>;>>>>;;>>>>>>>;>;>>>;>>>>>>;>>>>;>>>>;>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>,>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>>>>,>>>>,>>,>,>>,>>,,>>>,>,>>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,>>,>,>,,,,>,,,,,>,>,,>,,,>,>,,,,,>,,,>,>,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,',,,',,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,,',,,,',,',',,',,'',,'',',',,,''',,',',',',',',',',',',',',',''',''',',','',','',',,'','',','','',',,'''''", -";>>>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>>;>;;>>;>;>>;>;>;;>;>;>;;>>;>;>>>;;>>;>;>>;>;>;>;>>>>>;>>;>>;>>>>>;>>>;>>>>;>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>,>>>,>>,>>>,>>>>,>,>,>,>,>,>,>,>>>>,>,>>,>>>,>>,>>>,,>>,>>,>>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>>,,,,,,>,>>,,>,>,>,,,>,,>,>,,,,>,>,,,>,,,,,,>,,,>,,>,>,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,',,,',,',,,',,,',,',',',',',',',,,,',',,',,,',,',,,',,,',,,'',,,',',,,',',',',',',',',',',',',,'',,','',',',''',''',','',''',''',''''',','", -";;;>;>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>>;>;>>>;>;>;>;;>;>>;>;>>;;>;>;>>>;>>;>>>;>;>>;;>>>;>>>;>>>>>>;>>;>;>>>;>>>>>;>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>,>>>>,>>,>>,>>,>,>>>,>>,>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,,>,>,>,>,,,>,,,>>,>>,,>,,>,,,>,,>,,,>,,,,>,>,,,,>,,,>,>,,,,,>,,,,,,,,>,,,,,,>,,>,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,,',,',,',,,'',,'',,'',,,'',,','',',,,',',',',',',',','''',,'',',,''','',,'',''',','','',','',',''''''", -">>;>>;>>;>>;>>;;>;>;>;>;;>>;>;>;>>;;>;>;>;>;;>>;>;>;>>;;>;>;>;>;;>>;>;>;>>;;>;>;>;>;;>>;>;>;>>;;>;>;>;>;;>>;>;>;>>;;>;>;>;>;>;>;>>>;>>;>;;>>;;>>>;>;>;;>>;>>;;>>;>;>>>>;>>;;>>;>;;>>>>;>>>>;>>;>;>>>>>>>;>>;>;>>>;>>>>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>,>>,>>,>>>>,>>>,>,>,>,>,>,>>>>,>,>>,>,>>,>>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>>,>,>,,>,,,>,,>,>,>,,>,>,>,,>,>,,,,,,>,,,>,,,,,,>,,,,,>,,>,,,,,,>,,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,',,',',,',,',',,',',',',',',,,,',',,',,',,,',,,',,,',,,',',,',,',,',',',',',',',',',',',,','','','',,'','''',',,'''','',''''',''',',','", -";>>;>;>;>;>;>;>>;>;>>;>>;;>;>>>;;>>;>;>;>;>>;;>>;>>;>;>>;>;>>;>>;;>;>>>;;>>;>;>;>;>>;;>>;>>;>;>>;>;>>;>>;;>;>>>;;>>;>;>;>>;;>;>>;;>;>;>>>;;>>;;;>;>>>>;>;>;>>>;>;>>;>;>>;>>>;>>>>>;>;>>>;>>;>>>>>>;>;>>>>;>>>>>>>>>;>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>>>>,>,>>>,>>>>>,>>,>>,>,>>>,>,>>,>>>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,,>,>,>,,>,,>,,,>,,,,,,>,,>,,>,>,>,,,>,,,>,>,,,,>,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',',,,',,,',,',','',,'',,'',,',','',',,',',',',',',',',',','',',',',',','','',,','''',,''','',',,'',''''''''", -">;;>;>;>;>;>;>;;>;>;;>;;>>;>;;>>;>;>;>;>;>;>>;;>>;;>;>;;>;>;;>;;>>;>;;>>;>;>;>;>;>;>>;;>>;;>;>;;>;>;;>;;>>;>;;>>;>;>;>;>;;>>;>;;>>;>;>;;>>;>;>>>;>;>;>;>>;>;>;>>;>;>>>;>>;>;>>;>;>>>>>;>>;>>>;>>;>>>>;>>>>>>>>;>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>,>>>,>>>>>>,>>>,>>>>>,>,>,>>,>>>,>,>,>,>,>,>>>>,>>,>,>,>>>>,>,>>>,>,>>>>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>>,,>,>,>,,>,,>,,>,>,>,>,>,,>,>,>,,>,,>,,,,,,,>,,,>,,,,,>,,,,,>,,>,>,,,,,>,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,',,,',,',',',,',,,,,',',',',',,,,',,',',,',,,',,,',,,',,',',,',,,',',,',,,',',',',',',','',',',',',','',',''','',,''',,''',''''''',',',','", -">>;>;>;>;>;>;>>;>;>>;>>>;>;>>;;>;>;>;>;>>;>;>>;;>>;>;>>;>;>>;>>>;>;>>;;>;>;>;>;>>;>;>>;;>>;>;>>;>;>>;>>>;>;>>;;>;>;>;>;>>;>;>>>;;>;>;>>;;>;>;>;>;>;>;>>;>;>>;>;>>>;>;>>;>>>>;>;>>;>;>>>>>>;>>>>>>>>>>>>;>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>>,>>>,>>>>>>>>>>>>,>,>>,>>>,>>,>,>>>,>,>,>,>,,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>,>,,>,>>,,>,,>,>,,,>,,,>,,,,>,,>,,>,,>,>,>,,,>,,,>,,>,,,>,>,,,,,,,,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,',,,',,,,,',,,,,,,,,,,,,',',,,,,,,,,,',',,',,,,',,',,,'',,'',,',,,',','',,',',''',',',',',',',',,',''','','',','',','',''','''',',',',',,'''''''''", -";;>>;>>;>;>>;>;>>;>;>;;;>>;>;>>;>;>;>;>;>;>;>;>>;;>>;>;>>;>;>;;;>>;>;>>;>;>;>;>;>;>;>;>>;;>>;>;>>;>;>;;;>>;>;>>;>;>;>;>;;>;>;>;>>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>>;>>;>>>;;>>>>>>>;>>;>;>>>;>;>;>;>>>;>>>>>>>>>>>>>>>;>>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>,>,>,>,>>,>>>>,>>>,>>>,>>>,>,>,>>>,>>>,>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,>>,,,,>,>,>,,,>,>,,>,,>,>,,>,,>,,>,,,,,,,>,,,>,,,,,,,,,,,,>,,>,,,,>,,,,,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',,,',,',,,,,',',',',,,,,',,',',,',',',,,',,,',,'',,',',,',',',,,,',',',',',',','',',',',',',','',',','',,',',',''''',''''',',',','", -">>;;>;>;>;;>;>;;>;>;>>>;;>;>;>;>>;>;>;>;>;>;>;>;>>;;>>;;>;>;>>>;;>;>;>;>>;>;>;>;>;>;>;>;>>;;>>;;>;>;>>>;;>;>;>;>>;>>;>>>;>;>;>;;>;;>;>;;>;>;>;>;>;>>>;>;>>;;>>;>;>>;>>;;>>>;>;>;>>>>;>>>;>>>>>>>>>;>>>>;>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>>>>,>,>>>,>,>>,>,>>>>>>>>>,>>>,>>,>,>>,>,>>,>,>>>,>,>>,>,>>,,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,,,>>>,,,>,,>>,,>,>,>,,,>,>,,,,>,,,>,>,>,,,>,,,>,>,,,>,,,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,',,,,,,,,,',,,,,,',',,,,,,,,',',,',,,,',,,,,,',',,',,',,,',',,',',',','',',',',',',','',','',',','',''',',''',',''','''',',''',',''''''''''", -";;>>;>;>;>>;>;>>;>;>;>;>>;>;>;>;;>>>;>;>>;>;>;>;>;>>;;>>;>;>;>;>>;>;>;>;;>>>;>;>>;>;>;>;>;>>;;>>;>;>;>;>>;>;>;>;;>;>;>;;>>;>;>>;>>;>;>>;>>;>;>;>>;>;;>>>;>>>;>;>>;>>;>>>;>;>;>>>;>;>>>;>>;>;>>;>>>>>;>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>,>,>,>>>>,>>,>>,>>,>>>>,>>>,>,>>,>,>>>>,>>>,>,>>,>>>,>,>,>,>,>,>,>,,>,>,>,,,>>>,,,>>,,>,,,>,,,,>,,>,,,,>,>,,,>,,,,,,,>,,,>,,,,,>,,,>,,>,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,',,',',,,',,',,,,,,',',',,,,',,',',',,',',',,',',',',',',',',',,',,',,',',',',',',',','',,',',',',,','',','','',''',',''',',''',',',',','", -">;>;>>;>;>;>>;>;>>;>;>;;>;>;>;>>>;;>;>;;>;>;>;>;>;;>>;>;>>;>;>;;>;>;>;>>>;;>;>;;>;>;>;>;>;;>>;>;>>;>;>;;>;>;>;>>;>;>;>>;;>;>;>;>;>;>;>;>;>;>;>;>;>>>>;;>>;;>;>>;>>;>>;>>;>>>>;>>>>;>;>>>>>>>;>>>;>;>>;>>;>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>,>>>,>>>>>>>>>>>,>,>>>>,>>>,>>,>,>>,,>,>>,>>>,>,,>,>,>,>,>,>,,>,>,>,>,>,>,>,>>,>,>,,>>,,,,>>,,,>,>,>,,>>,,>,,>,>,,,>,>,,>,>,>,,,,>,,,>,,>,,,>,,,,,,,,>,,,,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,',',',,,,,,',',,,,,,',,',',,,',',,',,',,',,,',',',',',',',',',',',',',,',',''','',''',',''',','',',','',','','',''''''''''''", -";>;>;;>>;>;>;>;>;;>;>;>>;>;>;>;;;>>;>;>>;>;>;>>;>>;>;>;>;;>;>;>>;>;>;>;;;>>;>;>>;>;>;>>;>>;>;>;>;;>;>;>>;>;>>;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;>>;>;>;;>>;>;>>>>;>>;>>;>>;>>;>;>>;>;>>>>;>;>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>;>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>,>>>>,>>>>>,>>>,>>,>,>,>,>>>>,>,>>>,>>>,>>>,>>>>,>,>,>,>,>>>,>,>>,>,>,>>,>,>,>,>,>,>,>,>,,>,>>,,>>>,,,>>,,>,,>,>,,>,,>,,>,,>,,,,>,,,,,,>,>,,,>,,,,,,,,,,>,,,>,,,,>,,,,>,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,',',,,',,',',,,,,,,,,',',,,,,'',',,',,,,',',,,',,',,',,',',,,',',',',',',',',',',','',',',,',',',',''',,'',','',''','''','','',',',',',','", -";>;>>;>;>>;>;>;>>;>;>>;>;>>>;>>>;;>>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>>>;>>>;;>>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>>;;>;>;>;>>;>;>;>>>;>;>;>;>>;>;>;>>;>>;>;>;;>;>>>;>>;>>;>>>;>>>>>;>>>>>>>>;>>>>>>;>>>;>;>>;>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>,>>>>>>,>>,>>>>>>>>,>>>>>,>,>>,>,>>,>>,>,>>>,>>,>>>,>,>>,,>,>>>,>,>>,>,>,>,>,>,>,,>,>,,>,,,,>>>,,,>,,>,,>,>,,>,,>,,>,>,>,,>,,>,>,,,,>,,,>,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,,,,,,',',',',,,,',',,,,,',,,',',,,',',',',',,',',',',',,,',,,',',',',',',',,','''','',',',',,''',''',',','',',''','','''''''''''''", -">>;>;>;>;;>;>;>;>;>>;;>;>;>;>;;>>;>;>;>>;>>;>;>;>;>;>;>;>;>>;;>;>;>;>;;>>;>;>;>>;>>;>;>;>;>;>>;>;>;>;>>;>;>;>;>;;>>;>;>;>;>>;>;>;;>>;>;>;>;>;>;>>;>;>;>>>;>>>>;;>>>;>>;>>;>>>;>;>>;>;>;>;>>;>>;>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>,>,>,>>>,>,>>>,>>,>>>,>>,>>,>,>,>>,>,>,>,>,>>>,>,,>,>>,,>,>,>,>,>,>,>>,>,,>,>>>,,,,>,>,>,,>,,>,>,,>,,>,,,,,,>,,>,,,,,,>,,,>,,,,,,,>,,>,,,,,>,,,,>,,,,>,,,,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,,',,,,,',,',,,,,,,,,,',,,,,',',',,',,',,',,',,',,,',',,,',',',''',',',',',',',',','',',,',','',','''',',',',''',',''',','''',',',',',',','", -";>;>;>;>>;>;>;>;>;>;>>>;>;>;>>;;>;>;>;;>;>;>;>>;>;>;>;>;>>;;>>>;>;>;>>;;>;>;>;;>;>;>;>>;>;>;;>;>;>>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>>;;>;>>>;>;>;>;>>;>>;>;;>>;;>;>>;;>>;>>;>;>;>>>>;>>>>>;>>>>>>>>;>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>,>>,>>>>>>,>>,>>,>>>>,>>>,>>>>>>>>,>>,>>>>>>>,>>>>>,>>>,>>,>>>,>>,>>>,>>,>,>>,>>,>,,>,>>>,>,>,>,>,>,>,>,>,>,,,,>>,>,,,,>>>,,,>,,>,>,,>,,>,,>,,>,>,>,,>,,,>,>,,,>,,,>,,>,,,,,,,>,,>,,,>,,,,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,',,,',,,,,,,,',',',',,,',',,,,',,',,',,',,',,',,',',,',',',',,',,,',',,',',',',',',,'',',',',,','',,'',''',',','''','''',','''','''''''''''", -">;>;>>;>;>;>;>;>;>;>;;>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>;>;;>>;;>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>>;>;>;;>;;>>;>;>>;>;>;>;>;>;>;;>>;>;;>>;>;>;>;>;>;>;>>;>>;>>;>>;>>>>>>;>>;>>;>>>;>;>>>>;>>>>;>>;>>>>;>;>>>>;>>;>>>;>>>>>;>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>>>,>,>,>>>,>,>>,>,>>,>,>,>>,>,>,>,>,>>>,>>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>>>,,,>,>,>>,,,>>,,>,,>,>,,>,,>,,>,,,>,,>,,,>,,,,,>,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,',,,,,,,,,,,,,,,',,',,',,,,,,,,,',,,,',',,',,',,',,',',',,',',,',',',,',',',',','',',',',',',',',''','''',','',',',',''','',','',',''',',''',',',',','", -">;>;;>;>;>>>;>;>;>;>>;>;>;>;>;>;>;>>;>;>;>>;>;;>;>>>;>;>>;>;>>;>;>;>>;;>;>>;>;>;>;>;>;;>;>;>;>>;>>;>>>;>;>;;>;>;>;>>;>>;>>;>;>;>>;>;>;>;>;>;>;>;;>;>;>;>;>>;>;;>;>>;>>;>>;>>>>>;>;>>;>;>>;>>;>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,>>>>>,>,>>>>>>,>>,>>>>>>,>>>>>,>>>,>>>>>>,>>>>>,>>>>,>,>>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,,,>>,>,,>,,>,>,,,>,>,,>,,>,>,,,>,,>,,,>,,>,,,>,>,,,>,,,>,>,,,,,,>,>,,>,,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,',,',,',,,,,,,,,,',',',',,,',,,,',,,',,',,',,,',,',',,',,,',,',',',,',,',,',',',',',','',',,',',,',','',''','',,'',','',','','','',''''''''''''", -";>;>>;>;>;;;>>;>>;>;;>;>;>;>;>;>>;>;>;>;>;;>;>>;>;;;>>;>;>;>;;>;>>;;>>>;>;>>;>;>;>;>;>>;>;>;>;>;>;>;;>;>>;>>;>;>>;>;>;;>;>;>>;>;;>>;>;>>;>;>;>>>>;>>>;>>;>;>>>>>>;>>;>>>;>>;>;>>>>;>>>>>>>>>>;>;>>>>;>>>;>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>>>>>,>>,>>>>>>>,>>,>>>,>,>>>,>>,>,>,>>>,>,>>,,>,>,>,>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>>,,>,>,,>,,>,,>,,>,,>>,,>,>,>,,,,,>,,,>,,,,,,,>,,,,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,',',,,,,,,,,,',,,',',,',,',,',,,',',',,,',,'',,'',,',,'',',,'',',',',',',',,','',',','',','',',','',',''','''''','',''',',',',',','", -">;>;>;>;>>>;>;>;>;>>;>;>>;>>;>;;>;>;>;>;>>;>;>;>>>>;>;>;>;>>>;>;;>>;;;>;>;;>;>;>>>;>;>;>>;>;>;>;>;>>;>;;>;>;>>;;>;>;>>;>;>;;>;>>>;>;>;;>;>;>;>;;>>;;>>;>;>>;>;>;>>;>>;;>>;>>>>;>;>>;>;>;>>>>>>>>>;>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>,>,>>>>>>>>>,>,>>>>,>>,>>>>>,>>,>>,>>>,>,>,>>,>>>,>>,>>,>>,>>,,,>,>>,>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,,,,,>,,,>,>,>,,>,,>,,>,,,,,,,,,,>,>,,,>,,,>,,>,>,,,>,,>,,,,,,,,,,,,,,,,>,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,',,,,',,,',,',,',,,,,,,,',',',',,,',,,,,',,',,,,,',',,,,',',',',,',,',',',,,',',,',',',',',','''',','','',','',',''','','',''',',','','',''''''''''''''", -">>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>>;>;>;>>;>;>;>;>;;>;>;>;>;>;;;>>>;>;>>>;>;>>;>;>;;;>>;>;>;>;>;>;>;>;;>;>>;>>;;>>;>;>;>;>;>;>>;>;;;>;>;>>;>;>>;>>;>;>>;>>;>;>>;>>>;>>;>>>;>>;>;>>>>>;>>>>>>;>>;>>;>>;>>>>>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>,>>>>>>,>>,>>,>>>>>,>,>>>>>,>,>>>,>>,>>,>,>>>>>,>>,,>>,>>,>,>,>,>>>>>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,,>,>>>,>,>,>,,,>,>,,>,,,,,>,>,>,>,>,,,,,>,,,>,,,,,,,,,,,,,,>,,,,,>,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,,,,,,,,',,,',,,,,,,,,',,,',',,',,,',',,,','',',,',,,',',',',',',',','',',',',',',',,',',',',','',','',','','',',','',''','','',',',',',',','", -";>;>;>;>;>;>;>;>;;>;>;>;>;>;>;>;>>;>;;>;>;>;>;>>;>;>;>;>;>>>>;;>;>;>;>;>;>;>>;>>>;;>;>;>;>;>;>>;>;>>;>;>;;>>;>;>>;>;>;>;>;>>;>>>;>;>;>;>>;>;>>;>>;>>;>;>>;>>;>;>>;>>;>>>;>>>>;>;>>>>;>;>>>;>>>>>>>>>;>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>>>>>>>>>>>>>>>>>>>,>>>>>>,>,>>>>>,>>>,>>,>>>>,>,>>,>,>>,>>,>,>>>,>,,>,,>,>,>>,>>,>,>,>,>,>,>,,>,,>,>,>,>,,,,,>,>,,>>,,,>,,>,>,>,,,>,,>,,,,>,>,,,>,,,>,,>,,>,>,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,,,,,',,',',,',,,,',,,',',',',,,',,',,',,',',,',',,,,,',',,'',,,',',,,',',',',,',',',',',','',','',','',,','',''',,'',''''',''',''',''''''''''''''''''", -">;>>;>>;>;>;>;>;>>;>>>;>;>;>;>;>;;>>>;>>;>;>;>;;>;>;>>>;>;;;;>>;>;>;>;>;>;>;;>;>;>>;>;>;>;>;>;>;>;>;>;>;>>;;>;>;>>;>;>;>>;;>;>;;>;>;>;>;;>;>;>;>;>;>;>>;>;>>;>>;>>>;>>;>>>>;>>>>;>;>>>>;>>>>>>;>>;>>>>>>;>>>>>>>>;>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>,>>,>,>>>>>,>,>>>>,>,>>>>,>>,>>>,>,>>>,>>,>>>,>,>>>,,>>,>>,>>,>>,>,>,,>,>,>,>,>,>,>,>,>,>,>,,>,>>,>,,,>,,,>,>,>,,,>,,,>,,>,,,,>,,,,,>,,,>,,,,,,,,,,>,,>,,,,,,,,,>,,,>,,>,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,',,,,,,,,,,',,,,,',,,',,,,',,,,'',',,,',,,',',',',',,',,','',',',',',',',,',','',',''',','',,''','',,','',','','',',',',',',',',','", -">;>;>;>;>;>>>;>;>;>;;>;>;>;>;>;>>;>;>;;>>;>>;>>;>;>;>;>;>>>>;>;>;>;>>;>;>;>>;>;>;>;>>;>>;>>;>;>;>;>;>;>;>;>>;>;>;>;>;>>;;>;>;>>;>;>;>>;>>;>>;>>;>>;>>;>;>>;>>;>>;;>>;>;>;>>>;>>>>>>;>>>>>;>>;>>>>>>;>>;>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>,>>>>>>>,>>>>>,>,>>,>>,>,>>>,>>,>>,>,>>>,>,>>>,>,>,>,>,>,>,>>,>,>,>,>,>,>,,>,>,>,,,>,>,>,,,>,>,>,>,,>,,,>,,,>,>,,,>,>,,,>,>,,,>,,,>,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,',,',',,,,,,,,,',',',',,,',',,,',,,',',,',',,,','',,'',,',,',','',',',,,',',',',',','',',',,',',,','',''',',',',''','','','','''''''''''''''''''", -";>;>;>;>;>;;>>;>;>;>>;>;>>;>>;>;>;>;>>;>;>;;>>;>;>;>;>;>;;>;>;>;>>;;>>;>>;>;>;>;>;>;;>;>>;;>;>>;>>;>;>>;>;>;>;>;>;>>;>;>>;>>;>;>>;>>;;>;>;>;>;>;>;>;>>;>;>>;>>;>>>>;>>>>>>;>>;>;>;>>;>>;>>;>>;>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>,>>,>>>>,>,>,>>>,>,>>>>,>>,>>>,>,>>,>>,>>,>,>,>>>,>,>,>,>,>>,>>,>,>,>,>,>,>,>,>>,>,,>,>,>,>,,>,>,,>,>,>,>,,>>,,>,>,,,>>,,,,>,,,,,>,,,>,,,,,,,,>,,>,,>,>,,,>,,,,>,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,',,,,,,',,,,,,,,,,',',,',,,,,,,,,',,,,,',,',',,,',,',',',,,,',,,',,',',',,,',',''',',',',',',','',''','','','',',,'','',''','','','',''',',',',',',',',','", -";>;>;>>>;>>;;>;>;>;;>;>;>;>;>;>;>;>;;>;>;>>;;>;>;>>;>;>>>;>;>;>>;;>>;>;>;>;>>;>;>;>>>;>;;>>>;;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;;>>;>;>;>>>;>>>;>;>;>>;>>>;>>;>;>>;>;>;>>;>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>,>>>>,>>,>>>>,>>,>,>,>>>,>,>,>,>,>>>,>>,>,>,>>,>,>,>,>,>,>,,>,,>,>,>,>,>,>,,>,>,,,,>,,>,,,>,,,,>,,,,>,>,,>,>,,,>,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,',,,,,',,,',,,,,,,,',',',',,',',',',,',,',,',,,,',,'',,',',,',',,','',',,',,',',',',',',',,',','',',',',''''','','',,'',''''','','','''''''''''''''''", -">;>;>;>;>;;>>;>;>;>>;>;>;>;>;>;>;>;>>;>;>>;>>;>;>;;>;>;;;>;>;>;;>>;;>;>;>>;>;>;>;>;;;>;>>;>;>>;>;>;;>;>;;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>;>;>;;>>;;>>>;>>;>>;;>>>;>>>;>;>>>>;>>>>;>>>>;>;>>>;>>>;>;>>>>>;>>>>;>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>,>>,>,>>,>>,>>>>,>,>,>>,>,>>>,>,>>,>>,>,>>,>>>,>>,,>>,>,>>>,>,>,>,,>,>,>,,>,>,>,>,>,>,>>,>,>,,>,>,>,,>,>,,,>>,>,,>,,>,,>,>,,>,>,,>,,,,,,,>,,>,>,,,,,>,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,',,,',,,',,',',,,,,,,',,,,',,,,,',,',,',,',',,',,',',,',',,',',',,,',',,',',',',',',','',',','',',',',',',','','''','',','','','''',',',',',','','", -">;>>;;>;>>;>;>>;>;>;>>;>;>;>;>;>;>>;>;>;;>;>;>>;>>;>;>>>;>;>;>>;>;>>;>;>;>;>;>;>>;>>;>;>;;>;>;>;>>>;>;>>;>;>;>;>;>;>;>;;>;>>;>;>;>;>;>;>;>>>;>>;>;>>;>;>>>>;;>>;>>;>>;>>>>;>;>>;>;>>>>;>>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>,>>>,>>>,>>>,,>>,>>>,>>>,>,>,>,>,>>>,>>,>>,>,>,>,>,>,>,,>,>,,>,>,,,>,>,,>,>,,,>,>,,>,,>,,,>,,,,>,,,,>,>,>,,,,,,,,>,>,,,,,>,>,,>,,>,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,',,,,,,,,,,,',',',,,,',,,,',',,',,',,',,',',',,,',',,,'',',',,'',',',',',',',',',',',','',',',''',',',''',,'',,''',','','','',',''''''''''''''''", -";>;;>>;>;>;>;>;>>;>;>;>;>;>;>>>;>;;>;>;>>;>;>;>;>;>;>;>;>;>>;>;>;>;;>;>;;>;>>;>;;>>;>;>;>>;>;>;>;;;>>;>;>;>>;>>;>;>;>;>>;>;;>;>;>;>;>>>;>>;;>>;>;>;;>>>;>;>>>;>>;>>>>>;>;>>>>>;>>>>;>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>,>>>>>,>,>,>,>,>>,>,>>>,>>,>>,>,>>>,>>,,>>,,>>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>>,>,>,>,>,>,>,,>>,,,>,>,,>,,>,,>,>,,>,>,,,,,,,,>,>,>,,,,,,>,,,,,,,,,,,,,,,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,,,,,,,',,,,,,,,,,,,,',,',,',,,,,,,,,,',,,',',,,',,',,',,',,',,,'',,','',,,',,',',,',,',',',',',',',','',',,',',',,'',''',,''',''',,'''','','',''''',',',',',','','", -";>>;>;>;>;>>;>;;>;>;>;>>;>>;;;>;>>;>>>;;>;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>>;>;>;>;>>;>;>;>;>;>;>>;>>>;;>;>;>;>;>;>;>>;>>;>;>;>>;>>;>;>;;;>;>;>>;>;>>>>>;;>>>;>;>>;>>;>;;>>>>;>;>>>;>;>>>;>;>>>>;>;>>>>;>>>>;>>;>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>,>>,>>>>>>,>>>>>,>>>>>>>>>>>>>>>>>,>,>,>>,>>>,>,>>,>>>,>>>,>>,,>,>>>,>,>,>>,>,>,>,>,>,>,>>>,>,,>,,>,>,,>,,,>,,,,>>,,,>,,,>,>,,,>,>,,,>,>,>,>,,,,,,,,,>,,,,,>,,,>,,,>,,>,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,',',,,,,,,,,,,',',',',,,',,,,,',,',,,',,',,',,'',,,',,,,,'',',',',',',',',',',',',',',',','',','','','',,''',',','''',',''''','',','''''''''''''''''", -";>;>;>;>;>;;>;>>;>;>;>;>;>;>>>>;>;>;>;>>;>;>;>;>;>;>;>;>;;>;>;>>;>;>>;>;>;>;>>;>;;>>;>;>;>;>;;>;>;>>;>;>;>;>;>>;>;>;;>;>;>;>;;>>;>;>>>;>>>;>;>>;;;>;>>;;>>;>>;>>;>>>>>;>>>;>>;>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>>,>>>,>,>,>,>,>,>,>,>,>>>>>,>>>,>>>>,>>,>,>>,>,>,>>,>,,,>,>>,>,>,>,>,>,>,>,>,,,>,>,>,>,>,>,>,>,>,>>,,,>>,>,>,,>,,>,,,,,>,,,,,,,,>,>,>,>,,,,,>,,,>,,,>,,,,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,',',,',,,,,,,,,',,,',',,',,,',,',,,,,',,',',,'',',,,',',,',,',',',',',',',',',',',','',',',',','''',,''',',','','',','','''',',',',',',','','", -">;>;>>;>;>>;>;>;>>;>;>;>;>;>;;>;>;>;>;;>;>;>;>>;>>;>;>;>>;>;>;;>;>;>;>;>>;>;;>;>>>;>;>;>;>;>>;>;>;>;>>;>;>;>;;>;>;>>;>;>;>;>>;>;>>;>;>;;;>>;>;>>>>;>;>>>;>>;>>;>>;;>;>>;>>>;>>>;>;>>;>>;>>>>;>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>,>>>,>>,>>>>>>>>>>>>>>>>>>>>>>,>,>>,>,>>,>,>,>,>>,>,>>>,>,>>>>>,>>,>,>,>,>,>,>,>,>,>>,,>,>,,>,,>,>,,>,,>,,,>>,,,,,,>,,,>,>,>,>,,>,>,>,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,',,,,,,,,',',',',,,',,,,',,',',,,,','',,',,,',',,','',',,',',',,',',',',',',',',''','',',','','',',,''',,''','','',','','',''''''''''''''''''''", -">;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>>>;>>>;>;>;>;>;>>;>;>;>;>>;>;>;>;>;;>;>>;>;;>;>>;>;>>;>;>;>;>;>;;>>>;>;>>;>;>;>>;>;>>;>;>;>;>;>;>>>>;>>;>>;;>>;>>;>>;>>;>>;>>>>>>>>>;>>>;>>>>;>>>>>>;>>>;>>>>;>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>,>>,>>>,>>>>>>>,>>>,>,>,>,>,>,>,>,>,>>>,>>,>>,>>>,>>>,>>,>,,>>,>,,,,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,,>>,,>,>,,>,,>,,,,>,>>,,,>,,,,>,,,>,,,,,,,>,>,>,>,,,,,,,>,,>,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,,,,,,,',,,,',,',,,,,,',',,,,,,,,,,',,',',,',,,,'',',,,,',,',',,,',,',,,,'',',',',,',',',',',',',',',','','',',',',''',,''',,'','','''','','',',',',',',','','','", -">;>;>;;>;>;;>;>;>;>;>;>;>;>;>;>>;>;>;;>;;;>;>;>;>;>;>;>;>>;>;>;>>;>;>;>>;>;>;>;>;>;;>;>>;>;>;>;>;>;>>;>;>;>;>;>>;>;;>;>>;>;>;>;>;>;>;;>;>;>>;>;>>;>;>>>;>>;>>;>>;>;>;>;>>>;>>;>;>>>>>;>>>>>;>>>>>>>>;>>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>,>,>>>>>,>>>>>>>>>>>>>>>>>>,>>>,>>,>>,,>>,,>,>,>>>>,>,>>>>>>,>,>>>,>,>,>,>,>,>,>>,>>,>,>>,,>,>,,>,>,>,>,>>,>,,,>,,>,>,,,>,,,>,>,>,,>,,,,,,,>,,>,,,,,,,,,>,,,,>,,>,,,,,,,,,>,,,,>,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',,,,,',',',',,,,,,,,',,',',,,,,',',,',',',',',,,''',,',,,','',',',',',',',',',',',,',','',''',',''',','',''','',''','''''''''''''''''''','''", -">>;>;>>;>;>>;>;>;>>>;>>;>>;>;>;;>;>;>>;>>>;>;>;>;>;>;>;>;>>;>;>;;>;>>;>;>>;>;>>;>;>>;>;;>;>;>;>;>>;>;>;;>>;>;>;;>;>>;>;;>;>;>;>;>;>;>>;>>;>;>;>>;>>>;;>>>;>>;>>;>>>>>>>;>>>;>>>>>;>;>>;>;>>>>>;>>>>>>>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>,>>>>>>>,>>>>>,>,>,>,>,>,>,>,>,>,>>>>>,>>>,>>>>>,>>,,>>,>,>,,>,>,>,,>>,>,>,>,>,>,>,,>,,>,,,,>,>,>,>,,,>,,>,,,,>,>,,>,,>,,>,>,>,,,,,,>,,,>,>,>,,,,,,,,>,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,,,,,,,',,,,,,,,,',',',',,,',,,',',',,,',,',,',,',',',,',',',',,,,',',',',',',',',',','','',',',,'','',',''','',''','',''',',',',',',',',','''','", -";>;>;>;>>;>;>>;>;>;>;>;>;>;>;>>;>;>;;>;>;>;>;>>;>>;>;>;>;;>;>;>>;>;>;>;>;>;>;>;>>;>;>>>;>;>;>;>>;;>>;>>;;>;>;>>;>;>>;>>;>;>;>;>;>;>;>;>;>;>>>;>;>;;>>>;>;>>;>;>>;>;>;>>>;>>>;>;>>>>>>>>>>;>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>,>>,>>,>>>,>>>,>>>,>>>>>>>>>>>>>>>>,>>>>,>,,>>>,>>,>,,,>>,>>>,>>>,>>,>,>>>>,,>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,>,>,,>>,,,,>,,>,,,>,,,,,,>,>,,,,,>,,,,,,,,>,,>,,,,,,,>,,>,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,',,,,',',,,,,,',',',,,,,,,,,,',,,',,,,',,'',',,',,',,',,',',,',',',''',',',',',',',',''','',',,',',''','',','',,'','',','',','',''''''''''''''''''''''", -">;>;>;>;;>;>;;>;>;>;>;>;>;>>;>;>>>;>>;>;>;>;>;>;>;>;>;>;>>;>>;>;>;>;>>;>;>>;>;>;;>;>;>;>;>>;>>;;>>;>;>;>>;>>;>;>>;;>;>;>;>;>;>>>;>;>>;>>;>;>;>>;>>>;>;>>>;>>;>>;>>>;>>;>>>;>>>>>>>;>>;>>>>>;>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>>,>,>,>,>,>,>,>,>>,>,>>>>,>,>>,>,>>>>,>>,,>>,,,>,>,>>,,,>>,>,>,>,>,>,>,>,,>,>,>,>,,>,>,,>,,,>,>,,>,>>,,>,,,>,,>,>,>,,,,,>,>,,,,>,>,>,,,,,,>,,>,,,,,,,,>,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,,',,,,,,,,,,,',,,,,,',,',,,,,,',',',',',',',,',',,',,,',',,',,',,,',',',,',',',,,',',',',',',',',',','',''','',',','',',''',''',''','''','''',',',',',','',','','", -">;>;>;>>;>;>>;>>;>;>;>>;>;;>;>;;;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>;>;;>;>;>>;>;>;>;>;;>>;;>>;;>;>;>;>;;>;>;;>>;>;>;>;>;>>;;>;>;;>>;>>>;>;>>;>;>>>;>;>>;>>;>>;>>>;>>;>>>;>;>;>>>>>>>;>;>>>;>>>>>;>>>;>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>,>>>,>>>,>>,>>>>,>>,>>>>>>>>>>>>>>>>>,>>>,>,>>>>,>>,>>,>,>>,>>>,>>>>,>,>,>>>,,>,>,>,>,>,>,>,>>,,>,,>,,>,>,>,,>,>,,,>,,,>,,>,,>,,>,,,>,,>,>,>,,,,>,>,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,',,',,,,,,',',,,,,,,,,,,,,,',,,',,,,',,,,',',',',',',,,'',',,',',,',',',',',',',',',',,',',',','','',''',','','',','',','',','''''''''''''''''''''", -";>;>>;>;>>;>;>;;>;>;>;>>;>>;>;>>>;>;>>;;>>;>;>;>;>>;>>;>;>;>;>;>>>;>>;>;>>>;>;>;>;>;>;>>>;;>>;>;>>;>;>;>;>>;>;>>;;>;>;>>>;>;;>>;>>>;>;>;;>>;>;>;>>;>;>>>;>>;>>;>>>;>>>;>>;>>>>>>;>;>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>,>,>,>,>,>,>,>>>,>,>>>,>,>>,>>,>,>>,>>,>,>,,>,>,>,>,,>>>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>,>,,>>,,>>,,>,,>,,>,,,>,,>,,,,,,>,>,,,,>,,,>,>,,>,,,,,>,,>,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',,,,,,,',,,,,',,,,,,,',,',,,,,',',',',',',',,',,',',,'',',,',,',',,,'',,,',',,','',',',',',',',','',''',','','','','',',','',',''''',''',''''',',',',',',','','','", -">>;;>;>;;>;>;>>;>;>;>;;>;>;>>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>>;;;>;>>;>>;>;>;;>;>>;>;>;;>;>;>;>>;>;>;>;>>>;>;>;>;>>;;>;;>;>>;>>;>;>>;>>;>>>>;>;>>>>;>>;>>>;>>>;>>>;>>>>>>>>>>>>;>>;>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>>>,>>>>>>>,>>,>>,>,>,>>>>>>>>>>>>>>>>>,>>,>>>,>>>,>>,>,>>,>>,>,>>,>>,>,>,>>,>>,,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,,>,,,>,,,>,,>,,>,,>>,,>,,>,>,,,,,,>,,,,>,,,,,,,,,>,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,',,,,',,',,,,,,',',,,,,,,,',,,',,',,',,,',,,,',',,',,,',',,''',,,'',',,',',',',',',',',',',,',',,','',',',',''','','',',,'','',','''''''''''''''''''''''", -">;>>;>;>>;>;>;>>;>;>;>>;>;>;;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>>>;>;>;>;>;>;>>;>;;>;>;>>;>;>;>;;>;>;>;>;>;>;>;>;>;>>;>>;>;>;>>;>>;>;>;>>;;>;>>>;>;>>;>>>;>>>;>>>;>>;>;>>;>;>>;>>>>>;>>>>>>>>;>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>,>>>>>>>,>,>,>,>,>,>,>,>>,>>>,>>,>>,>>,>>,>,>,>>>,>>,>,>>,>,>,>,>>,>,>,>,>,>,>,>,,>,>,>,,,>,>,>,,>,,>>,,>>,,>,,>,,>,,,>,,>,,,,,>,>,,,>,>,,,,>,,,>,,,,,>,,,>,,,,,,>,,,>,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,',,,,,',,,,,,,,,',,,,,,',',',,,,',,',,',,',',,'',,',',,',',',',,,,''',,,',',',',',',',',',',','','''',',','',''',,'',''',''''',','''',',',',',',','','','','", -";>;>;>;>;>>;>;;>;>;>;>;>;>>>;>;>;>;>;>;>;>;>>;>;>;>;>>;>>;>;>>;>;>;>;>>;;>;>;>;>;>;>;>;>>>;>;>>;>;>;>;>>;>>>;>;>;>;>;>;>;>;>;>;>;>>>;>;>;>>>;>;>>>>;>>;>>;>;>>;>>>;>>>;>>;>>>>>>>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>>>>>,>>,>>>>>>>>>>>>>>>>,>>,>,>,>>,>>,>>,>>>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>>,>,,>,>>,>,,>,>,,>,,,>,,,>,,>,,>,,>,,,>,,>,>,,,,,>,,,,,,>,,,,>,,,>,,,,,>,,,>,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,',,,,',',,',,,,',',,,,,,',',,,',,',,',,,,',,,',,,',',,',,','',',,,'',',',',',',',',',''','',',',,',''','',',''',',','',',''''',','''''''''''''''''''','''", -">;>;>>;>;>;>;>>;>;>>;>>;>;;>>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;;>;>>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>>;>;;>>;>;>;>>;>>;>>;>>;>>;>>>;>>>>>;>>;>>;>>>>;>>>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>>,>,>,>,>,>,>,>>>,>>>>>,>>,>>,>>,,>>>,>>,>>,>>,>>>,>,>,>>,>,>,>,>,>,>,>,,>,>,,>,,>,>,,>,>,,>,>,>,>,>,,,,,>,,,>,,,,,,,,>,>,,,>,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,',,',,',',,,,,,',,,,,',,',',,'',,',',,',',,',',,',',',,',',',',',',',',',',','',','''',,'','',',',''','''','',,',''''',',',',',','',','''','", -">;>;>;>>;>;>;>;>>;;>;;>;>;>;>;>;>;>;>;>;>;>;;>;>;>;>;>;>;>;>>;>;;>;>;>;>;>>;>;>>;>>;>;>;>;>;>;;>;>;>;>;>;;>;>;>;>;>;>;>>>;>;>;>;>;>;>;>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>;>>>;>>>>>;>>>>>;>>>>>>;>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>>>>>,>>>>,>>>>>>,>>,>>,>>>>>>>>>>>>>>,>>>,>,>>>,>>,>>,>>>,,>>,>>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,,>,,>,>,,>,,,>,>,,,>,>,>,>,>,>,,,,>,,,,,>,,,,,>,,>,,>,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,',,',',',,,,,',,,,',,',,','',,,',,,,',,,',',,',,,',',',',',,',',,,',',',',',',',',',',,','',,,''',','','',',''',','',''''',',''''''''''''''''''''''''", -";>;>;>;;>;>>;>;>;>>;>>;>;>;;>>;>>;>>;>;>;>;>>;>;>>>;>;>;>;>;>>;>>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>>;>;>;>>;>>;>;>;>;>;>>;>>;>;>;>>;>;>>;;>>;>>;>>;;>>>>>;>>>;>>>>>;>>>>;>>>>>;>>>;>>>>>>>>;>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>>,>,>,>,>,>,>>,>,>>,>,>>,>>,>>,,>>>,>>,>>,>,>,>>,>>>,>,>,>,>,>,>,>,>,>,>,,,,>,>,>,>,,>,>,>,,,>,,>>,,>,>,>,,,,,>,,,,,,,>,,,>,>,,,,>,,,>,,>,,,,,,>,,>,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,',,,,,,,,,,,,,',,,,',,',,',,,,',',,',',,',',,',',',',,',,',,,'',',''',',',',',',',',',','',',,''',,'',','',''',',','',''',',''''',',',',',','','',','','", -">>;>;>>;>;;>;>;>;>;>;>;>;>>>;>;>;>;>;>>>;>;>;>>;;;>;>;>>>;>;;>;>;>>;>;>;>;>;>;>;>;>;>;>;;>;>;>;>>;>;>>;>;>;>>>;;>;>;>;;>;>;>;>;>;>>;>>>;>;>;>;>>;>>;>>;>>>;>;>>>;>>>;>;>>>;>>>>>;>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>>>>>,>>,>>,>,>>>>>>>>>>>>>,>>>>,>>>,>>>,>,>,>>,,>>,>,>,>>,>,>>,>,>,>>,>,>,>,>,>,>,>,,>,>>,>,,>,>,>,,,>,,>>,,>,,,>,,,,,>,>,>,,>,>,>,,,>,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,',,',,,,,,,,',,',,',,',,,,',,',,,,,,',,,,,',,,,',,',',,,',,',',',',''',,',,,,,',',',',',',',''','',',''',,''',''',',',,''','','',','',',',''''''''''''''''''''''''", -";>;>;>;>;>>;>;>;>;>;>;>;>;;;>;>;>;>;>;;;>>;>;>;>>>;>;>;>;>;>>>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;;>>;>;>;>;>;>;>>;>;>;>>;>;>>;>>;>;>>;>;>>>;>;>>>>;>>;>>;>;>>>;>>;>;>>>>;>>>;>>;>>>>>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>,>>>>>>>>>>>>>,>>,>>>>>,>>>>>,>,>,>,>,>,>>>,>,>>,>>>,>>,>>>,>>,>,>>>,>,>>,>,,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,,>>,,>,,>,>,>,>,,>,>,,>,,,>,,,,,,,>,,,>,>,,,>,>,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,,,,,,,',,',',,',,,',',',,'',,',',',,',,,',',,',,,',',,,,',',''',',',',',',',',',',',','',,''',',',',''',''','''''',''','''''',',',',','','',','','','", -";>;>;>;>>;>;>;>;>;>>;>>;>>>;>;>;>;>;>>>;;>;>;>;>;>;>>;;>;>>;;>;>;>;>;>>;>>;>;>;>;>>>;>;>;>>;>;>>;>;>;>>;>;>;>;;>;>;>>;>;>>;>;;>;>>;>;>;>;>;>>;;>>>;>>;>>>>;>>>;>>>>;>;>>;>>>;>>>>;>;>;>>>>;>>>>;>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>>>>>>>>,>>>>>,>,>>>>>>>>>>>>,>,>>>,>>,>,>>>,>,>>>,>>,>,>>,>,>,>>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,,,>,,,>,,>,,,,>,>,,>,>,>,,,>,,,,,>,,,,,,,,,>,,,>,,>,,>,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,',,,,,,',,',,,,,,,,,,',,,',,,,,',,,,',,,',,',,'',',,',,',',,','',,',,,,',',',',',',',',',',','','',,'',''',',','',',',',','',''',','''''''''''',''''''''''''''", -">;>;>;>;;>;>>>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;;>>;>;;>;>>;>;>>;>;>;;>>>;>;>;>;>;>;>;;>>;>;>;>;>;;>>;>;>>>;>;>;;>;>;;>;>>>>;;>>>;>;>>>;>>>;;>>;>>>;>;>>;>>;>;>>>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>,>>,>,>>>>>,>>>>>,>,>,>,>,>,>>>>>,>>,>>>,>,>>,>,>,>>,>,>>,>,>,>,,>,>,>>,>,>,>,>,>,>,>,,>,>,>,,>,>,,>,>,>,,>,>>,,>>,,>,,>,>,,,,>,,,,,,,>,,,>,>,,,,,>,,>,,,,,,,,,,,,,,,>,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,',,,,,',',,,,,,,',,',',',,,',,,',',,',',,,',,',,',,,',',',',,,',',,',','',',',',',',',',','','',',',','','',,''','',','''',''','',',''',',',',',','''','','','',''", -">;>;>;>>;>>;;>;>;>;>;>;>;>;>;>>>;>;>;>;>;>>;>;>;>;>>;>;>>>;>;;>;>;>;>;>>;>;;>;>>;;>;>;>;>>>;>;>;>;>;>>;;>;>;;;>;>;>>;>;>>;>;;>;>>>;;>;>>;;>;>;>>>;>>;;>>;>>>>>>>>>;>>>>;>;>>>>>;>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>,>>>>>>>>>>>>>>>>>>,>,>>>,>>>>>>>>>>>>>>,>,,>>,>>,>>>>,>,>>,>>,>>>,>,>>,>>>>,>,>>,>,>,>,>,>,>,>,>>,>,>,>>,>,,>,>,,>,>,,>,,>,,,>,,>,,>,>,>,,>,>,>,,,>,,,,,,>,>,,,,,,>,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,,,,,,,,,,,,,,,,',',',,,,,,,,,,',,,',,,,',,,',',,',,',,',,',,',,',',',',',,',,',',',',',',',',',,'',',',',',',',''',,'',''',',''',''','''','''''''''''''',''''''''',''''", -";>;>>;>;>;;>>;>;>;>;>;>;>;>;>;;>>;>>;>;>;>;>;>;>>;>;>;>;;>>;>>;>;>;>;>;>>;>>;>;;>>;>>>;>;;;>;>;>;>>;>;>>;>;>>>;>>;>;>>;>;>;>>;>;>;>>>;>;>>>>;>>;>>;>>>;>>;>;>;>;>;>>;>>>>>;>;>>>>>>>;>>>>;>>>>>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>,>>>>>>>>>,>,>,>,>,>,>>,>>>>,>>>,>>,>,>>>,>,>,>,>,>>,>,>,,,>,>>,,>,>,>,>,>,>,>,>,,,,>,,,,>,>>,>,,>,,,>,,>,,>,,>,,,>,,>,,,>,,,,>,,>,,,>,>,,,,,,>,>,,,,,>,>,>,,>,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,,',',',',,,',,,,',,',',,,',,,',,',',,',,,',,',,',',',',',,,',',',',',',','',','',','','',',',''',',,'','',',','',',''',',',',',',''','',',''''',''", -">>;;>;>;>>;;>>;>>;>;>;>;>>>;>>;;>;;>;>;>;>;>;>;>;>;>;>;>;;>;>;>>;>;>;>;;>;;>;>>;>;>;;>;>>>;>;>;>;;>;>;>;>>;>;>;;>;>;;>;>;>;>;>>;>;>;>>>;>;>>;>>>;>>;>>;>>;>>>>>>>>;>>;>>>>>>>>;>;>>>>>;>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>,>,>>,>>,>>,>>,>,>>>>,>>>,>,>,>>>>,>,>,>>,>,>,>,>,>,>,>,>>>,,>>>,,,,>,,>,,>>,,>,,>,,>,,>,,,,,,>,,,>,,,,>,,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,>,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,,',,,',,,,,,,,,,,',,,',,,',,,,',,',',,',',,',',',',',',',,',',,''',',',',',',',',',',',','',',','','',,',''','',''''','''',','''''''''''','''''''','''''''", -";>>>;>;>;>>;>;>;;>>>;>;>;>;>;;>>;>>;>;>;>;>;>;>;>>;>;>>;>>;>;>;;>;>;>;>>;>>>;>;>;>;>>;>;>;>;>;>;>>;>;>;>;;>;>;>>;>;>>;>;>;>;>;>>;>;>;>;>;>;>>;;>>;>>;>>;>>>;>;>;>>>;>>;>>;>>;>>>>;>;>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>>>>>>,>,>>>,>>>,>,>,>,>,>,>,>>,>>>>,>>,>>,>>>,>>>,,>,>,>,>>>,>,,,>>,>,>>,>,>,>,>,>,>,>,>,,,>>,,,>>,>,,>,>,,,>,>,>,>,,,>,,>>,>,,,>,,>,>,,,>,,,>,,,>,>,,>,,,,,>,,,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,,',,',,,',,,',,',',',',,,',,,',,',',,',,,,,',,,',,',',,,',',',',',',',,,,',',',',',',',','',',',,'','','',''''',',''',',','',',''''''',',',','''','',''''','',''", -";;;>;>;>;;>;>;>>;>;>;>>;;>;>>;>;>;>;>>>;>>;>>;>;;>;>;>;>;>;>;>>;>>>;>;;>;>;;>>;>;>;;>;>;>;>>;>>;>;>>;>;>>;>;>;>;>>;>;>>;>;>>>;;>>>;>;>;>>>;>>>>;>>;>>;>>;>>>>>>;>;>>;>>;>>>>>>>>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>,>>,>,>,,>>>,>>,>,>,>,>>>,,>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,,>,>,,,>,,,>,>,,>,,,,>,>,,>,,,,>,,,>,,,>,,,,,,,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,,',,,',',,,'',,',,,',',,,',,,',',,',''',',',',',',',',',','',''',,','',',',,'','','''','',''',',',','''''''','''''''','''''''''", -">>>;>>;>>>;>;>;;>;>;>;>>;>;>;>;>;>;>;;;>;>;>;>;>>;>;>;>;>;>>;>;>;;>>;>>;>;>>;;>;>;>>;>;>;>;>;>;>;>;;>>;>;>;>;>;>;;>>;;>>;>;;>>>;;>>;>>;>;>>;>;>>;>>;>>;>>;>;>;>>>>>>>>>>>;>;>;>;>>;>>>>>>>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>>>>,>>>,>>,>,>>,>,>,>,>,>,>,>,>>>,>>,>>>,>>>>>>,,>>,>>,>>,>>,,>>>,>,,>,>,>,>,>,>,>,>,,>,>,>,>,>>,,>,,>,>,,>>,,>,>,,,>,,,>,>,,,>,,,,>,,,>,,,>,,,,,>,,>,,,,,>,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',',,',,,',,',',,',,,',',',',',,,',,,',,',,',',,','',,,',,'',,','',,''',,',',',,,',',',',',',',',',',',',,''',',''','','','',','','',',''''''',',',',''''','','''',',''''", -";;>;>;>;;>;>;>>>;>;>;>;>;>;>;>;>;>;>>>;>;>;>;>;>;>>;>;>;>;;>;>;>>;;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>>;;>>;;>;>>;;>>>>;>;>>;>;>>>;>;>>;>>;>>;>>>>>;>;>;>;>>;>>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>,>>>>>>>>>>>>>>,>>>,>>,>>,>,,>,>>>,>,>>,>,>,>>,>,>,>>>,>>,>,>,>,>,>,>>,>,,>,,>,,,>>,>,,,>,>,,>,>,,>,,>,>,,,,>>,,>,>,,,>,,,>,,,>,>,,,,,,>,,,,,,,,,,,,>,,,,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',,,,',,,,,',,,',,,,,,,,,',,,,,,,,',,'',',',',',',','','',','','',,''',','','',','','','','''',',',''''''''',',''''''','''''',''", -">>;>;>;>;>>;>;;;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>>;>;>;>>;>;>>;>;;>;>;>;;>;>;>;>;>;>;>>;>;>>;>;>>;>>;>;>>;>;>>;>>;>>;;;>>;>;>>>;>;>>>>;>>;>>;>>>>;>>>>>>>;>>>>>>>>;>>;>>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>>>,>>,>>,>>>>,>,>,>,>,>,>,>>,>>,>>,>>>>,>>,>,>>>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>>>,,>,>,>,,,>,,>,>,,>,,,,>,>,,,>,,,,,>,,,>,,,>,,,,,>,,>,,,,>,>,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,',,,,,,,,,,,,,',,',,,,,,,,,>,,,,,,',',,,,,,,,',,,,,,',,,,,,,,,,,',,,',,',',',',',',',',','',',',','',,'',','',,''','',''','',','''''',',',','''''',','''','''''''", -";>;>;>>;>;>;>>>;>;>;>;>;>;>>>;>;>;>;>;>;>;>;>;>>;>;>>;>>;>;>>;>;;>;>;;>;>>;>;>>;>>>;>;>;>;>;>;;>;>;>;>>;;>>;>;>;;>;>;>;>;>;>>>>>;>;>;>;>>>;>;;>>;>>;>>;>;>>;>;>;>>>>;>;>;>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>,>,>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>,>>,>>,>>,>,>>,>>,>,,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,,>>,,,,>,,,>,>,>,,>,,,>,,>,>>,,,>,,,,>,>,,,>,,,>,,,,>,,,,,,,,>,,,,,,>,,,,,,,>,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,',,',,,,,,,',,,,,,,,,,,,,,,,,,,,,,>,,>,,,,,,,',',',',,,,,,,,,,,,',,,,,,,,,,',,',',',',',',',',',',,',',',','''',','',''',,'','',''','''',',','''''''','','''''','''','''''", -">;>;>;>>;>;>;;>>;>;>;>>;>>;;;>>;>>;>;>>;>>;>;>;;>;>;>;>;>;>;;>;>>>;>>;>;>;>>;>;>;;;>>;>>;>>>;>>;>;>;>;;>>;;>;>;>>;>;>;>;>;>;;>;;>>>;>;>;>;>>>>;>>;>>;>>>>;>>>>>>;>;>>>>>>>>;>>>>>>;>>>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>,>>,>>>>>,>,>,>,>,>,>>>>>,>>,>>,>>>,>,>>,>>>>,>>>,>,>>>,>,,>,>,>,>,>,>,>,>,>,>,,>,>>,,>,>>,>,>,,,>,>,,>>,,>,,,,,,>,,>,>,,,,,>,,,>,,,>,,,,,>,,>,,,,>,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,,,,>,,>,,,,,,,',,,,,,',,',,,,,,,,',,,,,,,,,,',,,',',',',',',','','''',''',',,',''',',','''',''',','',','''''''',',',''''','','''',''''',''", -">;>;>;;>;>;>>;;>;>;>;>;>;>>>;>;>;>;>;;>>;>;>;>>;>;>;>;>;>;>>;>;>;;>;>;>;>;;>;>;>>>;>;>;>;;;>;>;>>;>;>>;>;>>;>>;>;>>;>;>;>>>>;>>>;;>>>;>>>;>;>>;>>;>>;>;>>>;>;>>>>>;>>;>>;>>>;>;>>>>>;>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>>,>,>>>>>>>>>>>>,>,>>,>>>,>>,>,>>,>,>,>,>>,,>,>>,,>,>>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,,,>,,>,>,,>,>,,>,,>,>,>,,>,,,>,>,>,,,>,,,>,,>,,>,,,,,>,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,',,,,,,,,,,,,,,,,',,,,,,,,>,,>>,>,,,,',,,',',,,,,,,,',,,,,,,,,,,,,,',,,',',',',',',',',',',',,',',',''',',,',''',,','','''','','',',',','''''',''''''''','''''',''''", -";>;>;>>;>>;>;>>>;>>;>;>;>;>;>;>;>;>>>;;>;>;>;>;>;>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>;>;>;>;>>>;>;>;;>>;>;>;>;>;>;>;>;;>;>;>;;;>>;;>>>;;>>;>;>>>;>>;>>;>>>>;>;>>>;>;>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>,>>>>>>>>>>,>>,>,>,>>>>>,>>>>,>,>,>,>,>,>>,>,>>>,>>>,>>>>,>>>>,>>,>>>,>,,>>>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,,>>,,,>,>,,,>,,>,,,>,,>,,>,,,,,,,>,,,>,,,,,,,,,,>,,,>,,>,>,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,>,>,,,,',,,',,',',',,,,,,,,,,,,,,,,,,,',,,,',',',',',',',',','',',',',','''','','','','',','','',''''''''',',''','','','''''','''''''", -">>;>;>;>;>;>;>;;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>>;;>>;>;>;>>;>;>;>>;>;>;>;>;>;>>;;>;>;>>;;>;>;>;>;>;>;>;>>;>>>;>>>>;>>;>;>>;>>;>>;>>;>>;>>;>;>>>>>;>>>>>;>;>;>>>>>>;>>>>>;>>>;>>;>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>,>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>>>,>>>>,>,>,>>,>,,>,>,,>>,>,>,>>>>,>,,>,>>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,>,,,,>>,,,,>>,,>,,>,,,>,,>,,>,>,>,,,>,,,>,>,,>,,>,,,,,,,,,,,,>,,,>,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,',,,,,,,,,,,,,,,,,,>,>,>>,>,>,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,,,,,,'',',',',',',',''',',','','','',','',',','','','',','','',',',',''''','''''',''','','''''',''", -";>>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;;>;>;>>;>>;>;>>;>>;>;;>>;;>;>;>;>>;>;>;;>;>;>;>;>;>;;>>;>>;>;>>;>;>;>;>;>;>>;>;>;;;>;>;;>>;>;>>;>;>>>;>;>>;>>;>>>>>;>;>>>;>;>>>>>>;>>;>>>>>;>>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>,>>,>>,>>>>>,>>>,>,>,>,>,>>,>>>,>,>>>>>,>>>>>>,>>,>,>>>,>,,>,>,>>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>>,,>,>>,,,>,,>,>,>,,>,,>,,,,,,>,,,>,,,,>,,,,,,,>,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,',',,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,>,>,,,,,',,',,,',,,,,,,,,,,,,,>,,,,,,,,,,,,,,',',',',',',','',',',','','',','',''',''''','''','','''''''',',''',',''''''''''',''''''''", -";;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>>>;>;>;>;;>;>;>;>;>;>>;>;>>>;>;>;;>;>;>>;>;>;>>;>>;>>;>;>;>;>;>;>>;>;>;>;>;;>;>;>>>;>>;>>;>;>>;>;>>;;>>>;>>;>>>;;>;>>>>;>>;>>;>>;>>>>>>;>>;>>>>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>,>>>>>>>>>>>>>>,>>,>>,>>,>,,>>,>,,>,>>>,>>,,>>>>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,,>,,,>,,>>,,>,,,,,>,,,>,,>,>,,,,>,,,>,,,,,>,,>,,,,,,,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,',',,,,,,>,>,,,,,,,,,>,>,>>,>>,,,,,,,,,,,',,,,,,,,,,,,,,>,,,,,,,,,,',',',',',',',',',',','',',',,',','','',',',',,'',','''''',',','''''','''''','',',','''','''','", -">>;>;>>;>>;>;>;>;>>;>>;>>;>;>>>;>;;;>>;>;>>;>>;>;>;>;>;;>;>;>;>;>;>>;>>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>>;>;>>>;>>;>;>;;>;>;>>;>;>>;>;>;>>>>;>>;>>;;>>>>>>;>>>;>>>;>>>>>>;>>>>;>>>>>>>;>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>,>>,>>>>>>,>,>,>,>,>,>>>,>>,>>>,>>>>>,>>>>>>,,>>,>>>,>,,>>>,>,>,,>>>,>,>,>,>,>,>,>,,,>,>,,>,>>,,>,>,,>>,,>,,,>,,,>,>,,>,>,,>,,,>,>,,,>,,,>,>,,,,,,,>,,>,,,,,,>,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,',,,,,',,,,,,,>,>,,,,,,,,>,,>,>>,>,,,,',,',,,,,,,,,,,,>,>,,,,,>,,,,,,,,',,',,',',',',',',',','',','''','',','',','''',''''',,','''''',',',''','','''''''''''''','''''", -";>;>;;>;>;>>;>;>;;>;>;>;>;>>;;>;>>>;;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;;>;>>;;>;>;>>;>>;>;>>;>;>>;>;>>>;>;>>;>>;>>>>;>;>;>>;>>>;>>>;>;>>>>;>>>>>;>;>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>>,>>>>,>>,>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>,>>,>>>,>,>>,>,,>,>>>,>,>,>,>>,,,>>,>>>,,,>,>,>,>,>,>,>,>,>,>,>>,>,,,>,>,>,,,,>,>,>,,>>,,,>,,,,,>,,,>,,,,>,,,>,,,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',,,,,,,,,,,',,,,,,,,,,,,,>,>,,,>,,>,>>>,>,>,,,,,,,,,,,,,,,,>,>,,,,>,,>,,,,,,,,,,,',,',',',',',''',',',,''',',',',''','','',','',',,'''',','','''''',''''''',',''',''''''''''''", -">;>;>>;>;>;;>;>;>>;>;>;>;>;;>>;>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;;>>;>;>>;>;>;>;>;>>;>;;>>;>;>;;>;;>>;>;>>;>;>;>;>;>;>;>>;>>;>;>>;>>>>;>>;>>>;>>>>;>>>>;>;>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>,>>>,>,>>>,>,>>,>,>,>,>,>>>,>>,>>,>,>>>,>>>>>,>,>,>>,>>,>,>>>,>,>,,>>>,>,>,>,>,>,>,>,>,>,,>,,>,>>,>,,,,>>,>,,,>,>,,,,>,,>>,>,,,>,,,,>,,,>,,,>,>,,,>,,,,,,>,,,,>,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,',,',,,',,,,,,',,,,,>,>,>,,,>,,,>,>,,>>,>,>,,,,,,,,',,,,>,,,,>>,,>,,,,>,,,,',,',,'',',',',',',,,''','',',',''',',',',''','''','''',','''','''',',''','',''''','''','''''','''", -">;>>;>;>;>>;>;>;;>;>;>;>;>>;;>;>;>;;>;>;>;>;>>;>>;;>;>;;>;>;;>;>;>;>;>;>>>;>;>;>>;;>;>>;>;>;>;>;>;>>;>>;;>;>;>>;>>>;>;>;>>;>>>;>;>>>>>;>>;>>;>>;>>>;>>>;>>>;>>>;>>>;>>>>>>>;>>>;>>>>>;>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>,>>,>>,>>>,>,>>,>,,>>>,>,>>,>>,>>,,>>,>>>,,>>,>,>,>,>,>,>,>,>,>,>,>,,,,>,>,>>,,,>,>>,,,>,>,>,,,,,,>,>,,>,>,,,>,,>,,,,,,,,,,>,,>,,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,,,,',,',,,,,,,,,>,>,>,,,>,>,>>>,>>>,,>,>,,,,,,,,,,,,>,>,,>,,>,,,,,,,,,,,,,',,',',',',''''',,',',',',','',',''',','',','',''','','''',','''',''',''',''''','''','',''','", -";>;;>;>;>;>;>>;>>;>;>;>>;>;>>;>>;>>;>>;>;>;>;;>;>>;>>;>>;>;>>;>>;>>;>;>;>;>;>;>;;>>;>;>;>>;>>;>>;>;>;>;>>;>>;>;>;;>;>>;>;>>;>;>>>;;>;>>;>>;>>;>>>;>>>;>>>;>>>;>>>>>>>;>>;>>>>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>,>>,>>>,>>>>>>,>>,>>,>>>>,>,>,>,>>>>>>,>>,>>>>>,>>>>,>,>>>,>>,>,>,>>,,>,,>>,>,>,>,>,>,>,>,>,>,,>,,>,>>>>,,>,,,>,>,,,,>>,,>,,,,>,>,>,,,>,,,,,>,,,,,>,>,>,,>,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,',,,',,,,,,,,,,,,>,>,>,>,,>,,>,>,,>>,,>>>,>,>,>,,,,,,,,>,,,,,,>,,,,,,,,,,',',,,',',',',',,',,''',',',','',',''',,'',','',''',','','',',''''',''','''''''',''''','''''''''''", -";>>;>;>;>;>>;>;>;>>;>;>;>;>;>;;>;>;>;>;>>>;>>>;>;>;;>;>;>>;>;>;>;>;>>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>>;>>;>;>;>>;;>;>>;;>>>>;>>;>>;>>>;>>;>;>>>;>>;>>>>;>;>>>>;>>>;>>;>>;>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>,>>>,>>,>>>>>>>>,>>>>>>>>>>>,>,>,>>,>,>,>,>>,,>,>>,,>,>,>>,>,>,>>>>,>,>,>,>,>,>,>,>,>,,>>,,>,>,,,,,>,>,>,,>,>,>,,,>,,>,>,>,,,,>,,,>,>,,,>,>,,,,,,,,,,>,,>,,>,,,,,,,>,,,,>,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,',,,,,,>,>,>,,>>,>,>,,,>>>,,>>>,>,>,>,,,,,,,>,>>,>,>,>,,,,,,,,,,',',',',',','',',,,',',''',','',',''',','','',',''','','''',',''',''','','''''','''''''''''''''", -";>;>>;>>;>;;>;>>;>;>;>;>;>;>;>>;>;>;>;>;>;>;;>;>;>>;>;>;>;>;>;>;>;>;>;>;>>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;;>;;>;>>>;>>>;>;>>>;>;>>;>>;>>;;>;>>>>>>;>>;>>>;>>>>>;>>>>>;>>>>>>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>,>,>,>,>>,>>>,>>>>,>>>>,>>>>,>>>,>>>,>>,>>,>,,>,>>,>,>,>,>,>,>,>,>>,,>>,>,>,>>,>,,>,>,,>,>,,>,,>,>,,,,,>,>,,>,,,,,>,,,,>,>,>,,>,,,,,,,,,,>,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,,>,>>>,>>,>>>,>,>,,,>>>>,>>,>>,>,>>,>,>,,,>,,>,,,,,,,',',',,',',',',',','',''''',',',''',','',',''',''','''','','''',''''',''','''''','','''','','','','''", -">;>;>;;>;>>;>;;>;>;>;>;>;>;>;>;>>;>;>;>;>;>>;>;>;>;>;>>;>;>;>;>;>;>;>;>;;>;;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>>>;>>;;>;>;>;>;>;>>>;>>;>>;>>>>>>;>;>;>>>>>;>>;>>;>>>;>>>>>>;>>>>>;>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>,>,>>,>>>>>>,>,>>>>>>>>>>>>>>,>>>,>,>>,>,>,>,,>>,>>,>,>>,>,,>,>>,>,>,>>,>,>,>,>,>,>,,>,>,,,>,>,,>,>,,>,,>,,,>,>,>,,,,>,>>,,,,>,,>,>,,,>,,,,,,,,,,,,>,>,,>,,,,,>,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,,',',',,,,,,,,>>,>>>,>>>>>>>,>,>,,,>,>>>>,>,>,,>,>,,>>,,>,,>,>,,,,,,,,',',,',',',',',',',',,',',',','''',',',','','',',','''',',''',',''',''',',''''''',''''''''''''','", -">;>;>>>;>;;>;>>;>;>;>;>>>;>;>>;;>>;>;>;>;>;;>;>;>;>;>;;>;>;>;>;>;>>;>;>>;>>;>>;>;>;>;>;>;>;>;>;>;>;>>>;>;>;>;;>;>;;>>>;>>;>>>;>;;>>;>;>>;>;>;>;>>>>>>;>;>>;>>>>>>>>>;>>;>>>>>;>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>>,>,>,>,>,>,>,>>,>,>>>>,>>>,>>>,>,>,>>,>,>,>>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,,>>,,,,>,,>,>,,,,>,>,,>,,,,>,,,>,>,>,,>,>,,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,>>,>>>>>>>;>>>,>,,>,>>,,>,>>>,>>,>,>>,,>,,>,,>,,,,,,',',,,'',',',','','',',','',',',',,,'',''','',','','''',','''',''''','','''''','',''''',''''',''''''", -">;>;;;>;>>;>;>;>>;>;>>;;>;>>;;>>;>;>;>;>;>>;>;>;>;>;>>;>;>>>;>;>;;>;>;>;>;>;>;>>;>;>>;>>;>>;>>;>;>>;;>;>;>;>>;>;>>;>;>;>>;>;>;>>>;>>>>;>>>;>>>>;>;>;>>>>;>>>;>;>>;>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>,>>,>>,>>,>>,>>>,>>>>>>>>>>>>>>>>,>>>,>,>>,>,>>,>>,>>>,>,>>,>,>,,>,>,>>>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,>,>,>,,,>>,>,>,,,,>,>,,,>,,,>,,,,>,,,,,,,>,,,,,>,,>,,,,,>,,,>,,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,',,,,,',,',,,',,,',,,,',,,>,>>>>>>;;;;;;;>>>,>,>,>>>>>,,>>,>,>,,>,,>,,>,,>,>,,,,,,,'',,',',',',,',','','',',''','''','',',','''''',',',''',',''',','''''',''''',''',''''',''''',''''", -";>;>>>>;>;>;>>;;>>;>;;>>;>;>>;>;;>>;>;>>;>;>>;>>;>>;>;>;>;;;>>>;>>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;;>>;>;>;>;;>;>;>>;>>;>;>;>>>;>;>>;>;>>;>>;>;>>>>>>;>;>>>;>>>>>>>>>;>>;>>>>>>;>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>,>>>>,>,>,>,>,>,>,>,>>,>>>>,>>>>>,>,>>,>,>>>,>>,>,>>>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,>,>>,>,,,>,>,,>,,,,,>,>,,,,>,,,>,,,>,,,>,>,>,,,,,>,,,,,,,,>,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,',,,,,,,,,,,',,,,',,,,,,,>>>>>;;>;;;;;;;>,>,>,>,>,,>>>,,>,>,>,>,>,>,,>,,>,,,,,',,,,'',',',','',',',',',',',,'',','',,''','',,','','''',''''','''''',',''','''''''','''''''''''''''", -";>>;;;>;>;>>;;>>;>;>>;;>;>;;>;>>;>;>>;;>;>;>;>;>;>;>;>>;>>>;>;>;>;>>;>;>;;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>>;>;>;>;>;>;>>>;>;>;>>;>;>>;>;>>;>>;>;>>>>>>;>>>;>>>;>>;>>;>>>>;>>>>>>;>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>,>>,>>>>,>>>>>>>>>>>>>>>>,>>,>,,>>,>,>,>>,>,>>,>,>>,>,>,,,,>>,>,>>,>,>,>,>,>,>,>>,>,>,>,,>,>,,,,,>,>,,,>,>,>,>,>,,,>,>,,>>,,,>,,>,,,,,,,>,,,,,,>,>,,>,,,,,>,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,',,,,,,>;;;>;;;;---;;;>>,>,>,>>>,>>>,>,>,>,>,,,>,>,>,>,>,,,,',',,,',',',',',',',',','','',''',','','',''''',''',','',',''',',',''''',''','',''''',''','',''',''", -">;;>>>;>;>;;>>;>;>;>;>>;>;>>>;>;>;>;;>>;>;>;>;>;>;>;>;;>;>;>;;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>>;>>>;;>;>>;>>;>>>;>>;>>;>>>>;>>;>;>>>;>>>>;>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>>>,>>>>>>>,>,>,>,>,>,>,>,>>,>>>>>>,>>>,>>,>>,>,>,>,>>,>>>>>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,>>>>,,>,>,>,,,>,>,,>,>,>,,>,,,,>,,,,,>,>,>,,,>,,>,,,,,,,,,,>,,,>,,>,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,',,,,,',,,,',,,,,,,,>>>;;;;;;;----;;>>>,>,>,>,>,,>>,>>>,>,>>,,>,>,>,,,,,,',,,,',,',',',',',''','',','',',',''',',','',',''',','',''''','''''''','''',''''''',''''''''''''''''", -">>;>;>;>;>>;>;>;>;>>;;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>;>>>;>;>>;>>;>;>>>;>;>;>;>;>>;;>>;;>;>>;>;>>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>;>>>;>;>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>,>>>>>,>,>>>>>>>,>,>>>>>>>>,>>>>>>>>,>>,>,>,>>,>>,>,>,>>,>>>>,>,>,,,>,>,>,>,>,>,>,>,>,>,>,>,>,,>>,>,>,,>,,,,>,,,>,>,>,,,,>,,,>,,>,,>,>,,>,>,,,,,,,>,,,,,,,>,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',,,,,,,,,,,,,,',,,,',,,,',,',,,,>>;;----------;>>>,>>>,>,>>>,>>,>>,>,,>>,>>>>>>,,,,,,,',',',,,',',''',',',','',,''',',',''','',''',','''','',',''',',',',''''''''','',''''',''''''',''''", -";;>;>;>>;>;>;>;>;>;;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>;>;;>>;>;;>;>>;>;>;>;>;>;>;>;;>;>;>>;>;>>;>;>>;;>;>>;>>;>>>;>>;;>>;>>>;>;>>>;>>>>>;>>;>>>>;>>;>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>,>>>>>>>,>>,>>>>>>>>,>,>>>>>,>,>,>>,>>,>>>>,>>,>>>>>,>>,,>,>>>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,,>,>,>,>,,,>,>,>,,,>,,,,,>,,>,,,,,,,>,>,>,,,,>,>,,,,>,,,>,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,',,,,,,,,,,,,,,,>>;;;;---====-;;>>>,>,>>,>,,>>,>>>>>>,>,>>>>,>,>,,,',',,,,,'',,',',',',',',',''',','','',,'','',,'''',','',''''','''''''''','',','','''','''','','''''''", -">;>;>;;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>>;>;>;>;>;>;;>;>;>;>>;;>;>>>;;;>;>;>;>;>;>;>;>>>>;>;;>>;>;>;>>;>>>>;>>>;>>;;>>;>>>;>>;>>>>>;>>>;>>>>>>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>,>>,>>,>,>>>>>>>,>>,>>,>,>>,>,>,,,>>,>>>,>,,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,,,>,,>,>,,>,>,>,,>,>,,,>,,,>,>,>,,,,,,>,>,,,,,>,,,,>,,,>,,>,,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,,,',,,,',,',',,',,,,,>>>;----=-===--;>>>>>>,>,>>,>,>,>>>>>>>>>>>>>>,,,,,,,,'',',,,',,,',',','','',,,','','',''','',''',',''',''',',''',',',',','''''''''''','''''''''''''',''", -">>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>>;>;>;>;>>;;>;>>;>>;>;>>;>;>>;>;>>;>;;;>>>>;>;>>;>;>;>;>;;>;>;>>;>>;>>;>;>;;;>>;;>>;>>>;>>>;>>>>>>;>;>>;>>>>;>>;>>>>;>>>>>>>;>>>>>>;>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>,>>,>,>>>,>>>>>>>>>>>>,>,>,>>,>>>,>>>,>>>,>>>,>,>>,>,>>>,>,>>,>,>,>>>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,,>,>,>,,>,,>,,,,,,>,,>,>,,,>,,,,,,,,>,>,,,,,,>,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,,,',,,,',,,,,,,,,,,,,,,,,,>>;;--=====--;;>>>>,>>,>,>,>>>>>>>>>>>>>>>,>,>,,,,',,',,,,,,'',,','',',','''','',','',,'',''','','',''',''''',''''''''''',''',''',''''''''','''','''''", -";>;>>;>;>;>>;>>;>;>;>;>;>;>;>>>;>;>>>;>;>;>;>;>;>;>;>;>;>>>;;>;>;>>;;>;>;>;>;>;>;>>>;>;;>;>;;>>;>>;>;>>;>;>;>>;;>;>>;>;>>>>;>>>;>>;>>;>;>>;>;>;>>>>;>>;>;>>>>>;>;>>;>>>>;>>>>>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>,>>,>>>>>>>>,>,>>,>>>>>>>>>>>,>,>,>,>,>,>>>>>>,>>,>>,>,>>,>>>,>>,>>,>,>>,,>>,>,>,>>>,,,>,>,>,>,>,>,>,>,>>,,>,,>,>,,>,,>,,,>>,,>,,>>,>>,,>,,,>,>,,>,>,>,>,,,,>,,>,,,,>,,,,>,,,>,,,,,,,,,,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,,',,,',,,,',',,',',',,,,,,,>>>;--==**==-;;>>>>>>,>,>,>,,>>;;>;>>;>>>>>>,>,,,,',,,',,,,,,,',',','',',,,''',','',''',',','','','',','',',''',',','','''',''',''',''','''''','''''''", -">;>;;>;>;>;>;>;>;>;>;>;>;>;>;;>>;>;;>>;>;>;>;>;>>;>>;>;>;;;>>;>;>;>>;>>;>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;;>;>;>;>>>;>;>>;>>;;>>;>;>>;>>;>>>;>>;>>>;>;>>;>>>>>>;>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>,>,>>>>>>>>>>>>>,>,>,>>,>>,>>>>,>>,,>>,>,>,>>>,>>,>,>,>,>,,>>>>,>,>,>,>,>,>,>,,,>,>,>,>,>,>,>,,>>,,,,>,>,,,,,,>,,,>,,,,>,,,,,,,,,,>,,,,,>,,,,,>,,,>,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,,,,',,,,,,>>;;--=***==--;>>>>>>,>,>,>>>>>>;;;;;>;;>>>>,,,,,,,',',,,,,,,',','',,'',''',',''','',,'',''','',''',''',''''','''''''''',''''''''''''''','''''''''''''", -">;>>;>>>;>;>;>;>>;>>;>;>;>;>>;;>;>>;;>;>;>;>;>;>;>;>;>;>>>;>>;>;>;>;>;>;>;>;>;>;>;>;>;;>;>;>;>;>;>>;>>;>;>>;>;>>;>;>>;>;>>;>>>>;>>;>>;>;>>>>;>>>>>>>>;>>;>>>>;>>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>,>>,>>>,>>>>>,>,>,>,>,>>>>>>>>,>>,>>,>,>>,>>>,>>>,>>,,>>,>,>,>,>>>>,,,>,>,>,>,>,>,>,>,>>,,>,,>,>,>,>,,>,,,>>,>,,>,>,>,,,>,>,>,>,,>,>,>,>,>,,,>,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,,,,,',,,,,',,',,,',,,,',,,>,>;--==*****--;;;>>>>>,>,>,>,>>>;;;;;;;>;>>>>>,,,,,,,,',',,,,,,,',,'',',',,','',,'',''','',''','',',',''',',''',',',',''''','','',','''''''',''''',''''", -">;>;>;>;>;>;>;>;>;>;>;>>;>>;;>>;>;;>>;>>;>>;>;>;>;>;>;>;>;>;;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;;>;>;>>;>;>>;>>;>>;;>>>;>>;>>>>;>>>;>;>;>;>>>>>>;>>>>;>>>>>>>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>,>>>>>>>>>>>>>,>>>>>>>>>>>,>,>,>,>>,>>>,>>>,>>,>,>,,>>,>>>,>>,>>>,>,,,>>>,>,>,>,>,>,>,>,>,,>,>,>>,>,,,>,>,,>>,,,,,>,,>,,,>,>,,,,,>,,,,,,,,,,,,,>,,,,>,,,,,>,>,,>,,,,>,,,,,,,>,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,',,,',,,,,,,,',,,,',,,,,,>>;--==**&***=--;>;>>>>>,>,>,>>>>>;;;;;;;;>>>,>,,,,,,',,,,,>,,',','',','','',',''','',,'',',',''',''','',''''','''''''''','''''''''''',''''''''','''''''", -">;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>>;>;>;>;>;>>;>;>;>;>;>;>;>>;>;>;>;>;>>;>>;>>;>>;>;>;>;>>;>;>;>>;>;>;>>;>>;>>;>;>>>;;>>;>;>>>>;;>>;>;>;>>>;>>>>>>>>>;>;>>>>;>;>>;>>;>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>,>>>>>,>,>,>,>,>>>>>>>>,>>,>,>>,>>,>>,>>>>,>,>,>,>,>,,>,>>>,,>>,>,>,>,>,>,>,>,>,>,>,,,>,,>>,,,>,>,,>>,>,>,>,,>,,,,>,>,,,>,>,>,>,>,>,,,>,,,,,>,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,',,',,,,',',,',,,,,>;-==**&*&**==--;;;>>>>>,>,>,>,>;;;-;;;;>;>>>>,>,,,,,,,',,,>,,,,',,',',',',''',','',''',',''',','',''','',',''',',',',',''',','',''''''','',''''''''''''", -";>;>;>;>;>>;>>;>;>;>>;>;>;>;>;>;;;>;>;>>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;;>;>;>;;>;>;>;>;>;>;>>;>;;>>>;>;>>;>;>>>;>>>>;>>;>>>;>;>;>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>;>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>,>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>,>,>,>>>,>>>,>>,>>>>,>,>,>>>,>>,>>,>>>>,,>>,>,>>,>,>,>,>,>,>,>,,>,>>,>,>,,>,>,,,>,,,>,,,>,,>,,>,>,,,>,>,,,,,,,,,,,,>,,,,>,,,,>,,>,>,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,,,,,,',,',,,,,,,',,,,,,,,,',,>>;;==***&&&&*==--;;;;>>>,>,>,>>>>>;-;--;;>;>>>,>,,,,,,,,,>,>,>,,,,'','','',',',',','',,'','','''',''','',''''',''''''''''''''''''',',''''''''','''''','''", -";>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>>;>>;;>;>;>;>>;>>;>>>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>>;>>>;>;>>;>;>>;;>>;>>;>;>>>;>;>;>>;>>;>;>>>;;>>;>>>;>>>>;>>>>;>>>>;>;>>>;>>;>>>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>,>>>,>>>,>,>,>,>,>,>>>>>>,>>>,>>>,>>,>,>>>,>,>,>>,>>,>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>,>,>,,>>,,>>,,>>,,>,,>,>,,>,,>,,>,>,>,>,>,,,,>,>,,,>,,,,,,,,,>,,,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,',,,,',,',,,,,,,>>;-=*&&&&&***==--;;;;>>>>,,>,>>>>>;;--;;;;>>>>>,>,,,,,,,,,,>>>,,',,',,',','',''','',''','','',','',','''',',''',',',',''',','','''''''',''''''''','''''''", -";>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>>;>;>;>;>;>;>;>;>;>;>;>;>;;>>>;>;>;>;>;>;>>;>>;;>;;>>;>;;>>;>;>>;>;>;>>>;>;>;>;>;>>;>>>>;;>>>;>>>;>>;>;>>>>;>>;>>>>>>;>>>;>>;>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>,>,>,>,>>,>>,>>,>,>,>>>,>,>,>,>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,,,>,,,>,,,>,,>,,,,>,,>,,,,,,,,,,,,>,>,,,,,,,,,,,>,,>,,,,,>,,>,,,,,,>,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,,>;;==**&&&&&**=---;;;;;>>>,>,>>>>>;;;---;;;;>>>>>,,>,,,,,,>>>>>,,,',''',',','',,'','',,'',''','''',''',',''''','''''''','''''''''','','''''','''''''''''''", -">;>;>;>;>;>;>>>;>;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>>;>>;;>>;;>>;>;>;>>>;;>;>;>;;>;>;>;>;>;>>>;>>;>>;;>>>>;>>>;>>;>>>>>;>;>>;>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>,>>,>>,>>>>>,>>,>>,>,>,>,>,>>>>>>,>>>,>>,>>>,>>>,>,>,>,>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,,>,,>,>,,,>,>,,>>,,>>,,>,,>,>,,>,,>,>,>,>,>,,,,,,>,,>,,>,,>,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,,,,,',',,',,,,,,',,,,,,,,,,,,>>;-=*&&&&&&&**=---;;;;>>>,>,>,>>>>;;----;;>>>>>,>>>,>>,>>>>>>>>,,,,,,,','',',''',',''',',',''',','','','',',''',',',''''',''',','''''''''','''',''''''''''", -";>;>>;>>;>;>;;>>;>;>;>>;>>;>;>;>>;>;>>;>;>;>;>>;>;>;>>;>;>>;>;>;>;;>>;>>;>;>;;>>;;>>;>>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>;>;>>>;>;>>;>;>;>>>;>;>>>>;>>>;>>;>>;>;>>;>>>;>>>>>>>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>,>,>,>>>,>>>,>>,>>,>,>>>,>>>,>>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,>,,,>,,,>,,,>,,>,,>,,,,,,,>,>,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,,',,',,,,,,,,,,,,,,,,,,,,,,,,,,,>>;-=**&&&&&**==----;;;;>,>,>,>>>>>;;---;;;;;>>>>>,>>>>>>>>>>>>>,,,'''',',','',,'',',','','',',''','','''''''','''''',',''',''''''','''',''''''''',''',''''", -";>;>;>;>;>;>>;;>;>>>;;>>;>;>;>;>;>;>;>>;>>;>;;>;>;>;;>;>;>;>;>>;>>;;>;;>;>;>>;>;>>;>;;>;>;>;>;>;>>;>;>;>>;>>>;>;>>;>>;>>>;>>;>>;>>;>>>;>>;>>>;>>>;>>>>>>;>>>>>>>>;>>>>>;>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>,>>>>>,>,>,>,>>>>>>>>,>>,>,>>,>>,>,>>,,>>,,>>,>>,>>,>,>>>,>,>>,>,>,>,>,>,>,>,,>,,>,>,>>,>,>,,,>,,>>,,>>,,>,,>,>,,>,,>,,>,>,>,,,,,,,>,>,,>,>,>,,>,,,,,>,,>,,>,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,;;-=**&&&&&&**==--;-;;;;>>>,>,>>>>>;;----;;>;>>>>>>>>>>>>;>;>>>>,,,,,','','',''',''','','',''',','','',',',',''',','''''''''','','''',''''''','''''''''''''", -">;>;>;>;>>;>;>>;>;;>>;;>;>>;>;>;>;>;>;>;>;>;>>;>;>;>>;>;>;>;>;>;>;>>>>;>;>;>;>;>;;>;>>;>;>;>;>;>;;>;>;>;>>;;>>;>>;>;>;>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>;>>>>>>;>>;>>>>>;>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>>,>,>>>,>,>>>>>>>>>,>,>,>,>>,>>>>,>>,>>>>,>>>,>>>,>,>,>,>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,,>,,,>,,>,>>,,>,,,>,,,>,,>,,,,,,,>,,>,,,,,,,>,>,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,>,>,,,,,,>,>;;-=*&&&%&&&*==----;-;;>>>,>,>,>>>;;----;;;;>;>;>>;>>;;;;;;;;;>>,,,',',',','',',',',','',',',''''','','''''''',''''','','','''''',''''''','''',''''''''''''", -">;>;>;>;;>;>;>;>>;>;>>;>;;>;>;>;>;>;>;>;>;>;>;>>;>;>;>>;>;>>;;>;>;;;;>;>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>>;>>>;>>;>;>>>>>;>;>;>>;>>;>>;>>>;>>>;>>>;>>>>>;>>;>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>>>>>>>>>,>>>>>>>>>>>>>>,>,>,>,>>>>>>>,>>,>,>>,>>>,>,>,>,>>,,>>,>>,>,,>>,>,>,,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,,,,>,>,>,,>>,,>,,>,>,>,,,>,,>,>,>,,,,,,,>,,,,,,>,,>,>,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,,,,,,,,,,,>,>,,,,,,,>>;-=**&&%&%&**==--;-;;;>>>>,>,>>>>>;;-=--;;;>;;>;;;;;;;;;;;;;>;>>,,,',',','',',''',''','',''',',,''','',',',',''',',''''',''','''''','''''''''''','''''','''", -";>;>;>;>>;>;>;>;>;>;>;>;>>>;>>;>>>;>;>;>;>;>;>;;>>;>;>;>;>;>>>;>;>>>>>;>>;>;>;>>;>;>;>;;>;>;>>;>;>;>>;>;>;>;>;;>>>;;;>;>>>>>;>>;>>;>>>;>>>;>>;>>>;>>;>>>>>>>>>>>;>>>>;>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>,>>,>>,>>,>>,>>>>>>>>>>,>,>>>,>>>>,>>,>,>>>,>,>,>>>,>>,>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,,,>,>,>,>,,>>,,>,>,>,,,,>,,>,,,>,,>,,>,,,,,,>,>,>,,,>,,>,,,,,,,,>,,>,,>,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,',,,,,',,,,,,,,,',,,>,>,>,>,>>>,,,,,,>>>;;-=*&&&%&&&&*=---;;;;;>>>,>,>,,>>>;--==--;;;>;;;;;;;;;;;;;;;;;>>,,,','',',,''',,'',',',''','''',',''','''''''','''''',''''''','','''','''',''''''',''''''''", -">;>>;>>;>;>;>;>;>;>;>;>;>;;>;>;;;>;>;>>;>>;>;>>;>;>>;>;>;>;;;>;>>;;;;>;>;>>;>;;>;>;>;>>;>;>>;;>>;>;>;>;>>;>;>>>;;>>>>>;>;>;>>;>>;>>;>>>;>>>;>>;>>>>>>>;>;>>;>>;>>>;>>>>>>;>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>,>>>>>>,>>>>>>>>>>>,>>>>>,>,>,>,>,>>>>,>>,>,,>>,>>>,>,>>>,>>,>>,>>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>>,>,,>,,>,>,,>,,,>,,>>,,,>,,>,>,,>,,,,>,>,,,,,,,,>,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,,,,,,>,>>,>>>>>>,,,,,>>>;--**&%&%&&&*==-;;;;>>>>>>,>,>>>>>;;===---;;;;;;;;;---;-;;;;;;>;>>,,,',',''',,''',',''',','',',''',','',',','''',',',''','','''''''''''',''''','''''''''''''", -">;>;>;;>;>;>;>;>;>;>;>;>;>>;>;>>>;>>;>;>;;>>;>;>;>;;>;>;>;>>>;>;;>>>>;>;>;>>;>>;>>>;>;>;>>;;>>;;>>;>;>>;;>>>;;>>;>;>;>>;>>>;>>;>>;>>>;>>>;>>>>>;>;>;>>>>>>>>>>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>,>>,>>>>>>,>>>>>>>>>>>>>,>>>,>>>>,>>>,>>,>,>,>>,>,>,>,>,>>,>,>>>,,>>,>,>,>,>,>,>,>,>,,>,,>,>,,>,>,,>,,>>,,>,,,>>,,,>,,,>,,>,>,,,,,>,>,>,,,>,,>,,,,,,,>,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,',,,>,>>,>>,>;>>>,,,>,>>>--=*&&&%%&&&*==--;;>;>>>,>>,>,,>>;;-====--;;;;;;-;-;---;--;;;;;>>>',','',',''',',''',,',''','''','''','''''',','''''''''''''',','','''''''''''''''''''''''''", -">;>;>>;>;>;>;>;>>>;>;>;>;;>;>;>;>;;>;>;>>;>;>;>;>;>>;>>;>;>;>;>>;>;;>;>;>;;>;>;>;;>;>;>;>;>>;>>;>;>;>;>>>;;>>>;>>;>>;>>>;;>>;>>;>>>;>>;>>;>;>;>>>>>>;>>;>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>>,>>>>>,>>,>>>>,>,>,>,>,>,>>,>,>>,>>>,>,>>>,>>,>,>,>>,>>,>,,>>>,,,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,,,>,,>>,,,>,,>,>,,>,,,>,>,>,,,,,,>,,,,,,,>,>,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,>>>>>>>;;;>>>>,>>>;;--=*&&%&%&&**=--;;;>>>>>>,>,>>>>;;--====----;--;--------;-;;;;;;>>,,',,','',,'',',,''''','',','',','',',',''''',',','','','''''''''',''''','''',''''''',''''", -">;>;>;>;>>;>>;>;>;>;>>>;>>;>>;>;>>;>;>;>;>;>;>;>;>;>>;;>;>;>;>;;>;>>;>;>;>>;>;>;>>;>;>;>;>;;>;;>;>;>;>;;>>>;>;>;>>;>>;;>>>;>>;>>>;>>;>>;>>>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>,>>>>,>>,>>>,>,>>,>>,>>>,>>,>>,>>,,>>>>,,>,>,>,>,>,>,>,>,>,>,>,,>,>>,>,>,,>,,>,>,>,,,>,>,>,,>,,>,,>,,,,,,,>,>,,,>,>,>,,,,,,,>,,>,,,,,,,,,,,,,,,>,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,',,,,,,',,',,,,,,,,,,',,,,',,,,>>>>;>>;;--;>,>>>>>;;-=**&&%%%&&&*=--;>>>>>>,>>,>,>>;;--=***==---------=-=----;;;;;;;>,,,,',',',''',''''',,',','',','''',''''''',','''''',''''''',''','''''',''',''''''',''''''''", -">;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;;>>;>;>;>;>>;>;;>;>;>;>;>;>;>;>;>;>;>;>>;>>;>;>;>>>>;>;>;>;>>;>;>>>>;>>>;>>;;>>>>>;>>>;>;>;>>>>;>>;>>;>;>>;>>>;>>>;>>>>;>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>,>>,>>,>>>>,>,>>>>,>,>,>,>,>,>>>,>,>>,>>,>>>>,>>,>>,>,>>,>>,>,>>>,,>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,>,>,>,>,>,,>>,,,,,,,,,>,,>,,>,>,>,,,,,>,,,,,,,,>,,>,,,,,,,,,>,,>,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,',,,,,,,>>;>;;;;----;>>>>>;;-==*&&%&%&&&**=--;;;>>>>>>>,>>>>;;-===**==------=-===-=---;-;;-;;;>,,',','',','',,','',''''''''',','',',',''''',',''''',',''''',''','''''''''''''''''''''''''", -">;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>;>;>;>;>;>>;>>;>;>;>;>>;>;>;>>>;>>;>;>;>;>;>;>>;>>;>;>;>;>;>;>;;>;>;>>;>>;;>>>;>;>>;;>>;>>>>;>;>>>;>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>>>>,>>>>>>>>>>>>>,>,>>>,>>,>,>,>>,>,>,>>,>,>,>,>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,,>,,>,,>,,,>,,,>,>,>>,>,,>,,>,,,,,,>,>,,,>,>,,>,,,,,,,>,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,,,,,,',,,,>>;-;-;--==-;;>>>>;--=*&&&%%%%&&**=--;;>;>>;>>,>>>;;;-==*****==--=-=========-;-;;-;-;>>,,,,',,'',',''',','',',,',,',''',''''''',','''''',''''',','''''''','''''','',''''''''','''", -">;;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>>;>;>;>;>;>;>>>;;>;>;>;>;>;;>;>;>>;>>;>;;>>;>;>;>;>;>>;>>>;>;>>;>>;>>>;;>>>;>>>>;>>;>;>>>>;>>>;>;>;>;>>>>>>>;>;>;>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>,>>,>>>>>>>>>,>,>>,>>>>,>>>>,>,>,>,>,>>>>>>,>>,>>>>>>,>>,>>>,>,>>,>>>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>>,>,>,>,,>>,,>>,,,>,,,,>,,,>,,>,>,,,,,,>,,,,,,,,,>,,>,,,,,,,,,,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,>>;;----==**=-;;;;;;--=**&%&%%&&&&*==--;;;;;;>>>>>;-==**&&&&&&**=======*====---;-;--;-;>>,,,,',,''',',''',''''''''''','',',',','''',',',''',''''''','','''''',''''''''''''''''''''", -">>;>>;>>;>>;>;>;>>;>;>;>>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;;;>>>;>>;>;;>>>;>>;>;>;;>;>>;;>;>;>;>;>;>;;>;>>>;>;>;>;;>>>;>;>>;>;>>;>>>;>;>>>;>>;>>>>>>>>;>;>>>>>>>;>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>,>>>>>>>>>>,>,>,>>,>>>,,>,>>,>>,>,>>>,>,>,>,>,>>,>>,>,,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,,,>,,,>,,,,>,,>,>,,,>,,,>,,,,>,>,,,>,>,>,,>,,,,,,,,,>,,,,>,,>,,,,,,,>,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,',,',,,,>>;---===****=-;;;;--=**&&%%%%%&&**==-----=------==***&&&%%%%%%&&&*********==-;------;;;>>,,,,',,',',',,',',,',',',',','''''''''','''''''''',''','''''''''''''''''''','''','''''''", -";>;>;>;>;;>;>;>;>;>;>>;;>;>>>;>;>;;>;>;>;>;>;>;>;>;>;>>>>;;>;;>;>>>;;>;;>;>;>>;>;>;>>;>>;>;>;>;>>;>>;;>;>>>;>>>;;>>;>;>>>;>;>;>>>>>;>>;>>>>;>;>>;>>>>>>;>>>>>>>>;>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>>>,>>,>>>>,>>>>,>,>,>,>,>>>>>,>>>,>,>>>,>>,>>,>>,,>>>,>>>,>,>,>,>,>>>,,>,>,>,>,>,>,>,>,,>,,>,>,,>,>,,>,>,>,>,>,>>,>,,,,>,>,,>,,,>,>,,,,>,,,,,,,,,,,>,>,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,',,,,,,,,,,,,,>;;======*&&&*=-----==**&&&%%%&&&***=-===**&*===----;----==**&&%%%%%&&***=*==-------;;;;;;>>,,,',''','''','''',''','''',',',',',''',','',''''',''','',''','','','',''''','''''''''", -">;>;>;>;>>>;>>;>;>>;;>>>;>;;>>;>;>>;>;>;>;>>>;>;>;>;>;;;;>;>>>;>;;;>>;>>;>;>;>>;>;>;;>;;>>;>>;>;>;>;>>>;>;;>>;>>>;>>>>;;>>>>>>;>;>>>;>>>>;>>>>;>>>>>;>>>>;>>>;>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>,>>>>,>>>>>>>>>>>>,>,>>,>,>>>>,>>,>,>,>,>>>,,>>,,>>,>,>,>>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,,>,,>,,,,,>,>,,,,>,>,>,,,,>,>,,,,>,>,>,>,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,',,,,',,',,,,>;-==*****&&&&*=--===**&&&%%%%%&&&**=**&%%%&*-;>,,',,''',,>;;;--*&&%%%%&****===--==--;-;;;>>>,,,,,','',','',','',''',','''''''''',''',''''',''''''''''''''''''''''''''''''''',''''", -">;>;>;>;>;;>;>;>;;>>;;;>;>>;;>;>;>>;>;>;>>;;>;>>>;>;>>>>;>>;;>;>>>;;>;>>;>;>;;>;>;>>;>>;>;>;>;>;>>;>;>;>>>>;>;>;>>;>;>>>;>;;>>>>>;>>>;>;>>;>>>>>>;>>>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>>>>>>>>>,>,>>>>>,>>>,>,>,>,>,>>>>>>,>>>,>,>>,>>>>>,>>,>,>>>,>>>,>,>,>>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,>,>,,>,>,>,,,>,>,,>,,,,>,,,,,,>,>,,,,,,,,,>,,,>,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,',,,>;-=**&*&&&&&&&*====***&&%%%%%%&&&*&&&&%%&*->,,',','','',,>>;;;>>;-*&&%%%&**=====*=--;-;;;;>>,,,,,'',','','''','',,'''',',',',',''',''',''''','',',''','''''''''''''''''''''''''''", -";>;>;>;>;>;>;>;>>;>;>>>;>;;>>;>>;;>>;>;>;;>>;>;;>>;>;;>;>;;>>;>;>;>>;>;;>;>;>>;>;>;>;>;>;>;>;>>;>;>>;>>;>;;>>;>>>;>>>;>;>>>;>;>;>>>;>>>>;>>;>>;>>>;>>>>;>>>>>>>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>>,>>>>>>>,>>>>>>>>>>>>>>>,>,>,>>>,>>>,>>,>,>,>>,>>,>>,>>,,>,>>,>,>,>>,,,>,>,>,>,>,>,>,>,,,>,,>,>,>,,>,>,,,>,,,>,>,>,,,>,,>,>,,,,>,,>,>,>,,,,,>,>,,>,,,,>,,,,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,',,,,,,>>;-**&&&&&%%%&&**=****&&&&%%%%%%&&&&%$%&*->,,',',''''',',,>>>>;>;>>>;=*&%$%&*=*=**=---;--;;;>>,,',,,''','',','','''',,''''''''''','''''',','''''''''''''','',','''''''''''''''''''", -">;>>;>;>>;>>;>>;>;>;;>;>>>;>;>;>>;;>;>;>>;;>;>>;;>;>>;>;>>;>;>>;>;>;>;>>>;>;>;>>;>;>;>;>;>;>;;>;>;>;>;>;>>>;>;>;>>;>>;>>;>>>>>>;>;>>;>;>>>>>>>>;>>>>;>>>>;>>>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>,>>>>,>>,>,>,>,>,>>>>>>>,>,>>,>>,>>>>>,>,>,>>,>,>,>>,>,>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>>,>,,>>,,>>,,,>,,>,,>,,,,,>,>,,,,,,,,,>,>,,,,,,,,,>,,,,,>,,,,,,,,>,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,',,',,,,,',,,,,>--**&&&&&%%%%%&&***&*&&&%%%%%&%&%%%%%&=;,,',','',',''''',,>>>;>;>;;>;;=*%%$%&****=-------;;>>,,,,',',','''','',','''',',',',',''',',''''''',','','',''''''''''','''''''''''''''''", -">;>;>>;>;>;;>;;>;>;>>;>;;;>>;>;;>>>;>>;>;>>;>;;>>>;>;>;>;>;>;;>;>;>>;>;;;>>;>;>;>;>;>;>;>;>;>>;>>;>>;>;>;>;>;>>>;>>;>>;>>;>;>;>>>>;>>>>>;>;>;>>>>>;>>>;>>>>;>>>;>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>,>>>>>>>>>>,>,>,>,>>>,>>,>>,>,>,>>>,>,>>,>>>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,,>,,,>>,,>,,>,,>,>,>,,>,>,>,>,>,,,,,>,>,,>,,,,>,>,,,,,,,>,,,,,,>,,,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,',,,>>-=*&&&%%%%%%%%&&&&*&&&&&&%%%%%%%%$%&*=;;,,,,',',''''',',,,,>>>>>>>>;>;;;=&%%%%&&**---;-----;;>,,,,',''',','','''',',''''''''''','''',''','''''''''''''','''''''''',''',''',''''''", -">;>;;>;>;>>;>>;>;>;>;>>;>>;>;>>;;;>;>;>;>;>;>>;>;;>>;>;>;>;>>;>;>;;>;>>>;>;>>;>;>;>>;>>;>>;>;>;>;>;>>>;>>;>>;>;>>;>>;>>;>>>;>>;>>>>;>;>>>>>>>>;>>>>>;>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>>>>>>>,>>,>>>>>>>>,>,>,>>,>>>>>>>>,>>,>>>,>>>,>,>,>>>,>>,>,,>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,,>,>,,,>,>>>,,,>,>,,>>,,,>,,>,,>,,,>,,>,,,,,,,,,,>,>,,,,,,,,,>,,,,,,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,>>-=*&&%%%&%%$%%%&&&&&&&%%%%%%%%$$%%&*=-;>>,',','',',''''',,,,,>>>>>>>>;;;;-*&%%%&**=--------;;>>,',',,,'',','',',''',',',',','''',''''',''','',',''''',''','',''''''''''''''''''''", -";>;>>;>;>;;>>;>;>;>;>;>;>;;>;>;>>>;>;>;>;>>;>;>;>>;;>;>;>;>;>;>;>>;>;>;;>;>;;>;>;>;;>;>;>;>;>;>>>;>;>;>>;>;>>;>;>>;>>>;>>;>>>>>;>;>>>>>;>;>>;>>;>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>>>>>,>>>>,>,>,>>,>>,>,>>,>>>>,>,,>,>,>,>>,>,>>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>>,,>,,,>,>,>,>,,,>,>,>,,>,,,>,,>,,>,>,>,>,>,,,,>,>,>,>,,,,,,,>,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,',,,,,,,,',,,,,,',,',,,,>-=&&&%%%%%$%$$%%%&&&&%&&%%%%$$$%%&*=--;>>,,,',',''',',','',,,,,,,>>>>>>>;;-*&%$$&*==----=----;>,,,,''','''','','',''''''''''',''',','''''''''''''',''''''''''''''''''''''''''''''", -";>;>>;>;>>>;;>>;>;>;>;>;>>;>;>;>;>;>;>;>;;>;>;>;;>>;>;>;>;>;>;>>;>;>>;>>;>;>>>;>;>>>;>;>;>>;>;;>>;>;>>;>;>>;>>>;>>;>;>>;>;>;>;>>>>;>;>>>>>>>>>>>>>;>>>>>>;>>>>>>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>,>,>>,>>>>>>,>,>>>>>,>>>>>>,>>>,>>>>,>>,,>,>>>>,>>,>>,>>,>,>,>,>>,,>>,>,>,>,>,>,>,>,,>,,>,,>,>,>,>,,,>,,>>,,,>,,>,,>,>,,,,>,,,,,,,,,,>,,,,,,,,,,,>,>,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',,,,,',',,,,,,',,>>;=*%%%%$%$$%$%%%%%%%&%%%%%%$$$$&&===--;>>,,,,,',,,',',',,,',,,,,,,>>>>;>;;;-*&%$$&*====-====--;>,,',''',','','','',',',',',''','''''','',','','','''''''''''','''''''''''''''''''", -">;>;;>;>;;>>;>;>;>;>;>>;>;>;>;>;>;>;>>>;>>;>;>>>;>;>;>;>>>;>;>;;>;>;;>;;>;>;;>>;>;;;>;>;>;;>;>>;>>;>;;>>;>;>>;>>;>>;>>;>>>>>>>>;>>>;>>;>>;>;>>;>>>>>;>>>>>>;>>;>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>,>>,>>>>>>,>>>>>>>>>,>>,>>>>,>,>,>>,>,>,>>,>>,>,>>,>>,>>>,,>>>,>>,>>,>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,,>>,>,>,,>,>,,>,,,>>,,>,,,>,,,>,>,,>,>,>,>,>,,,>,>,>,,>,,,,,,,,,,,,>,,>,,,,,>,,,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,,,>>-**&%%%%$%$$$$$%%%%%%&%%%%$$$%%&**=--;>>>,,,,,,,',,,,,,,',,,,,,,,,,,>>>>;;;;-*&%$%%*=====-===--;>,,',',''',''','',''''''','',''','','''''''''''''''''','','''''','''',''','''''''", -">;>>;>;>>;;>;>;>;>;>>;;>>;>;>;>;>;>;>;>;>;>>;;;>;>;>>>;;;>;>;>>;>;>>;>>;>;>>;;>;>>>;>>;>;>>>;>>;>;>>>>;>>;>;>>;>>;>>;>>;>;>;>;>>;>>>;>>;>>>>>>>>;>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>,>>,>>>>>>>>>,>>>>>>>,>>>>>>,>>,>>>,>>>>>,>,>>>,,>>,>,>,>,>>,,>,>,>,>,>,>,>,>,>,>,>,>,,>>,,>,>,>,>,,>,>,>,,,,>,,>,,>,>,,,>,,,,,,,,,,,>,,,,,,,,,,,>,,,>,,>,,,,,,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,',,,,,',,,,>;=*&%%$%$$%$%$$%%%%%%%%%%%$$$%&**==-;;>>>,,,,,,,,,,,,,,,,,,,,,,,>,>,,>>>>;;--=*&$$%&**=========;;,,,''',''',''','',',',''',''',''''''','','','''''','''''''''''''''''''''''''''''", -">;>;>>;>;>>;>;>;>;>;>>;;>>;>;>;>;>;>;>;>;>;>>>>;>;>;;>>>;>>;>;>;>>;>;>;>>;>;>>;>;>;>;>>;>;;;>;;>>>;;>;>;>;>>;>>;>>;>>;>;>>>>>>;>>>;>>>>>>>>;>>;>>;>>>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>>>>>>,>>,>,>>>,>,>,>>>,>,>,>>,>>>,>>>,>,>>,>,,>>,>,>>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,,>,,>,>,,>,>>,>,,>,>,,>,,>,,,>,>,>,>,>,,,>,>,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,,,',,,,,',,,,,,>>-=&&%$%$%$$$$$$$$%%%%%%%$$$$%&&*==-;;>>>>,>>,,,>,>,,,,>,,>,,,>,>,>,>>>>>>;;;--=*&$$$%**====**===;>,,,,''',',','','''''','''','','',','''''''','',''''',''',''''''''''''''''''''''", -">;>;;>;>;>;>>;>;>>;>;>>;;>;>>;>>;>>;>;>;>;>;;;>;>;>>;;;>>;>;>;>;>;>;>>;;>;>;>;>>;>;>;;>;>>>;>>>;;>>>;>>;>>;>>;>>;>>;>>>>;>;>>>>;>>>;>;>;>;>>>>>>>>;>>>>>>;>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>>>>>>>>,>>,>>>>>>>>>,>>>>>>,>>>>>>>,>>,>>,>,>,>>,>>>>>,>>>,>,>,>>,>,,>>>,>>,>,>,>,>,>,>,>,,>,,,>,>,>,>,>,>,,>,,>,,,>,>,,,,,,,>,,>,>,,,,,,,,,>,,,,,,,,,,,,,,,>,>,,>,,>,,>,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,,',,,',,,,,',,',,>;=*&%%$$$%$%$%$$$$%$%%$%$$$$%&**=--;;>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>;;;---=*%$$%%*****=**==-;,,'',',''''','',','''',','''''''''''',','''''''''''''','''''''','''''''''''''''", -";>;>>;>;>;>;>>;>;>;>;;>>>;>;>>;;>;;>;>;>;>;>>>;>;>;;>>>;>;>>;>;>;>;>;;>>;>;>;>;;>;>;>>;>;>;>;>;>>;;>;>;>;>>;>>;>>;>>>;;>>>>;>>;>>;>>>>>>>>>>;>;>>>>;>>>>>>>>;>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>>>>,>>>>>>>,>,>>,>>>>,>,>>>>,>,>,>>>,>>,>>>>>,>,>,,>,>,>,>,>>,>,>,>>,,>,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,>,,,>,>,>,,>,,>,>,>>,>,,,>,,,>,>,>,>,,,>,>,>,>,,>,,>,,,,,,,,,,,,,,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,>;=*&%%$%$$$$$$%$%$$%$$$$$$%%&&*=--;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;>;;;-=-=&%$$$&&*******=-;>,','''',','','''',','''''',',''',','''''',''','','''''''','''''''','''''''''''", -";>;>>;>;>;>;;>;>;>;>>;;;>;>;;>>;>>;>;>;>;>;;>;>>;>>;>;;>;>;>;>;>;>;>>;>;>>;>;>>;>;>;;>;>;>;>>;>;>>>;>>;>>;>>;>>;>>;;>>>;>;>>;>>>;>>;>;>>;>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>,>>>>>>,>,>>>>>>>>>,>,>>>>,>,>>>>>,>,>>,>>,>,>>,>>,>>,>>,>>>,>,>>,>,>,>>,>>,>,>,>,>,>,>,>,>,,>,,>,>>,>,,>>,,,>,,>,>,,>,,,,,,>,>,,>,,,,,,,,,>,,,,,,,,,,,,,,,>,,>,>,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,',,',,,,,,,',,',,,',,',,,>>-*&%%$$%$$%$$$$$%$$%$$$$$%&&**=-;;;;>>;>;>>;>>>>>>>>>>>>>>>>>>>>;>>>;>;>;;;----==&$$$%&********=;>,,',',','','','''''',',',''''','''''',''''''''''''',''''''''''''''''''''''''''", -">;>;;>;>;>;>>;>>;>;>;>>>;>;>>;;>>;>;>;>;>;>>;>;>;>;>;>>;>;>;>;>;>>;>;>;>;;>>;>;>;>;>>;>;>;>>;>>;>;>;>;>;>>;>>;>>;>>>>;>>>>;>>>;>>;>>>>>>>>;>>>;>>>;>>>;>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>>>,>>>,>,>>>>>>>,>>>>>>,>,>>>,>>>,>>>,>>,>>>,>>,>,>,>>,>,>,>>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,>,,>,,>,>,,>,>,>,,,>,,>,>,>,>,,,>,>,>,,>,>,>,,,,,,,,,>,,>,,>,,,,,>,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,;-*&%%%$$$$$$%$%$$$$$%$$$$%&**=--;;;;-;;-;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--==&%$$$$&&&&&&**=-;,,,',''','','',',','''''',','''''',''''',',''''','''',''''''''''''',''''''''''", -">;>>;>;>;>;>;>;>;>;>;;>;>>;;>>>;;>>;>;>;>;>;>>;>;>;>;>;>;>;>>;>;;>;>;>;>>;;>;>;>>>;>;>>;>;>;>;>>>;>>;>>;>>;>>;>>;>;>>;>;>>>;>>>>>>;>;>;>;>>;>>>>>>>>>>>>>>>;>;>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>>,>>>>>,>>>>>,>,>,>>>,>,>>>>>,>>,>,>>,>>>,>>,,>>,>>>,>>,>,>,>>,>,>,>>>,>,>,>,>,>,>,>,,>,>,>,,>>,>,>,,>,,>,>,,>,,>,,,>,,>,,>,,>,,,,,,>,,,,,,,>,,,,,,,>,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',',,',',,',,,,,>-=&%%$%$%$%$$$$$%$$$$$$$%&&*=---;--=*******=--;-;;;;;;;;;;;;;;;;;;;;;;;;;;-;---==*&$$$$%&&**&**=-;,,,'',''',''''''''',',''''''','',''',','''''',''''''''''''','','''''''''''''''", -">;>;>>;>>;>;>;;>>;>;>>;>;;>>;;>>;;>>;>>>;>;>;;>;>;>;>;>>;>;>;>;>>;>;>;>>;>>;>;>;;;>;>;;>;>;>>;>;;>>;>>;>;>>;>>;>>;>;>>>>>;>>;>;>;>>>>>>>>>>>;>>;>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>,>>>>>>>>,>>>>>,>,>>,>>>>,>>,,>>,>>>,>>,,>>,>,>>,>,,>,>>,>,,>,>,>,>,>,>,>,>,>,,>,>>,,,>,,>,>,>,,>,>,,>,,>,,>,,>,,>,,>,>,>,,,>,>,>,,,,,,>,,,,,,>,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,',,,,,,,,,,,,,,,,,>,>;-*&%$$$$$$$$$$$$$$$$$$$%&**=---=*&&%&%%&%&&&*=----------;----;--;--;-;-;-;-----==&$$$$$&&&&&**=->>,',',',''',',',','''',','','''''''''''''''''''''''''','''''''''''''''''''''''", -">;>;;>>;>;>;>>>;>;>;>;>;>>;>;>;>>;;>;;;>;>;>>;>;>;>;>;;>;>;>;>>;>;>;>>;;>;>;>;>>>;>>;>>>;>>;>>;>>;>;>;>>;>>;>>;>>>>;>;>;>>>>>>;>>;>>>;>>;>>>>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>,>>,>,>>>>>,>>>>>,>,>,>>>,>,>>,>>,>>,>,>>,>>>,>,>,>,>,>>,>,>>,>,>>>,>,>,>>,>,>,>,>,>,>,>,>,,>,>,,,>>,>,>,,,>,>,,,>,>,,>,,,,>,,>,,,,,,,,,>,,,,,,,,>,>,,,,>,,,,,>,,,,,>,,>,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,',,,,,,,,',,,,',,',,',,',,',,,,>>-=&%%$%$$%$$%$$$$$$$$$$%&**==*&&%&&&&**&&&&%%&&=---;-------;-----------------===**%$$$$%%&&&**=-;,,,'','','','''''','''''','''','','','','','''','','''''''''''''''''''''''''''", -";>;>>;;>;>;>;;;>;>>;>>;>;;>>;>;>;>>;>>>;>>;>;>;>>;>>;>>;>;>;>;;>;>;>;;>>;>;>;>;;>;>;>;;;>;>;>;>>;>>;>>;>>;>>;>>;;>>;>>>>>;>;>>>>>>;>>>>>>;>>;>;>>>>>;>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>>>>,>>>,>>>>,>>>,>>>,>>,>,>>>,>>,>>>,>>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>>,,>,>>,,>,,,>>,,,,>,>,,,>,,>,>,,>,,,>,>,>,>,,,>,>,>,,,,,,>,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,,>>-*&%$$$$$$$$$%$$$$$$$%&**==*&%%&&*=***=***&&%%&*=----------------------------==**%$$$$$%&&&**=-;,,,,',',',''',',''',',','''',''''''''''''''','''''''''''''''''''''''''''''''''", -";>;>;>>;>>;>>>;>;;>;;>;>>>;>;>;>;>;>;;>;>;>;>>;>;>;>;>;>>;>;>>;>>>;>>;>;>>;>;>>;>;>;>>>>>;>>;>;>;>;>;>>;>>;>>;>>>;>>;>;>>;>>;>;>;>>;>>;>>>>>>>>>;>>>>>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>,>>,>>>>>>>>>>>,>,>>>,>>>>,>>>,>,>>,>>,>>>>,,>>,>>,,>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,,>,,>,>,,>,,>,>,,,>>>,>,,>>,,>,,,>,,,>,,>,,,,,,>,,,,,,,>,,,>,,,>,,,,>,,>,,>,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,',',,',,',,',,,,,,,>>;=&%$%$$$%$$$$$$$$$#$%&***&%%&&***&&%%%%&%&&%%$&&*=============================**&$$$$$%%&&**=->>,',',','',''''','''''''',''''','','',''''''''''''','''',''''','''''''''''''''", -">;>;>;;>;>;>;;>;>>;>>;>;;;>;>;>;>;>;>>;>;>;>;;>;>;>>;>;>;>>;>;>;>;>;;>;>;;>>;>;>;>;>;;;>;>;>>;>;>>>;>;>>;>>>;>>;>>;>>>>;>>>;>>>>>>>>>>>>>>;>>;>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>,>>>>,>>>>>>>>,>>>,>,>>>>>,>>>,>,>>>,>>>>,>>,>>,>,>>,>,>,>>>,>>,>,>,>>,>>,>,>,,>,>,>,>,>,>,>,>,>,>,,>,>,>>,,>,>,,,,,,>,,,>,,,>,,>>,,>,,,>,>,,,>,>,>,,,>,,,,,,,,>,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,',,,,,,,,,,,,',,,,,,,',,,,,>;=&%$$%$$$%$$$$$#$$$#&&**&%%&&*&%###$$$###@$%$%%%&=============================**&%#$$$$%&&&*=-;,,,,',','''',',''',',','''',','',''''''',''','','''''''''''''''','''''''''''''", -">;>;>>;>;>;>>;>;>;>;>;>>>;>;>;>;>;>;>;>;>>;>>;>;>;;>;>;>;;>;>;>;>;>>;>;>>;>;>;>>;>;>>>;>;>>;>>>;>;>;>>;>>;;>>;>>;>>;>>>>;>>>>;>;>;>>;>>;>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>,>>,>>>,>>>>>,>,>>,>>>>>,>>,>,>>>,>>,>>>,>>>,>>,>,>,>,>>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,,>,>>,>,,>>,,>,>,,,,,>,,>,,,,,>,,,,,,,>,,,,>,,>,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,',,,',,',,,,,',,,,,,',,,,;=&%$$$$$$$$$$$$#$##$&&*&%%&&&$#@@$%&*&&&$@+@@#$$$&*====*=====****&*&*****==*=***&%#$$$$$&&**=;;,,'',,',,','''',''''''',''''''''''','','''''''''',''''''''',''''''''''''''''''", -";>>;>;>;>>;>;>;>;>;>>;>;;>;>;>>>;>;>;>;>;>;>;>;>;>>;>;>;>>>;>;>;>;>;>>;>;>;>;>;;>>;>;;>>;>;>;;>;>>;>;>>;>>>;>>;>>;>>;>;>>>;>;>>>>>;>>>>>;>>>>>>>;>>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>,>>>>>>>>,>,>>>,>>,>,>>,>>>,>>,,>>,>,>>,>>>,,>>,>>,>>>,>,>,>,>,>,>,>,>,>,,>,,,,>,,>,>,,,>,>,,,>,>,,,>,,>,,>,>,,>,,,>,>,,,>,>,>,,,>,,,,,,,,>,,,>,,>,,>,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,',,,,,',',,,,,>;=&%%$%$$$%$$$##$#$#$&&&%%%&%#@@$&-;,,,,;=&$++++@@#&*********&&%&%&&&%&%&&&******&%#$$$$$%&**=-;,,,,',,',''',''',',',''','',''',',''''''','''''''''','''''''''''''''''''''''''", -";>;>;>>;;>;>;>;>;>;;>;>>;>;>>;;>;>;>>;>;>;>;>>;>;>;>>;>;>;;>>;>;>;>;;>;>;>;>;>>;>;>;>>;>>;>>>;>>;>;>>;>>;>>;>>;>>>;>>>>;>>;>>>;>>>>>;>>>>>;>;>>>>>;>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>,>>>>,>>>>>,>>,>>>,>,>,>>>>>,>>>,>>>,>>>,>>,>,>>,>>>>,>>,,>>>,>,>,>,,>,>>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,>,,>,,>,,>,,,>,,>,,,>,,,>,,,,,>,,,,,,,>,,,,>,>,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,',',,',,,',,,,,,,,,,,>;=&%$$$$$$$$$$#$####%&&$$%%$@+#&->'''''''',-&#+..++#&*****&%%%%&&******&&&%%&****&%##$$$$$&&*=-;>,',',,,',''',''''''',''''''',''''','''''''','','''''''','''''''''''''''''''''", -">;>;>;;>>;>;>;>;>>>;>;>;>;>;;>>;>;>;>>;>;>;>;;>>;>;>;>;>;>>;;>;>;>;>>;>;>;>>;>;>;>;>;;>;>>;>;>;>>;>>;>>;>>>;>>;>;>>>;>>>;>>>;>>>>;>>>;>>;>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>,>>>>>>>>>>>>>>>>,>,>>>>,>>>>>>>,>>>>>>,>,>>>,>,>>,>>>,>>,>>>>,>>,,>,>,>>>,,,>,>,>,>>>>,,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,,>,>,,>,>,>,,,,>,>,,>>,,>,>,,,>,>,>,,,>,,,,,,,,,,,>,,,>,,,,,,,,>,,,,,,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,',,,,,',,,,,',,',,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,>;*&%$%$%$$$$$##$####%&%$$%$++$=>''''''''''''>*$....@$&&*&&$#%&******=*==**&%$$&&&&$###$$$$%&*=->>,,,,,,,,'',''',',',''','',''''',''''','''''''''''''''''''''''''''''''''''''''", -">;>;>>;>;>>;>>>;;;>;>;>;>;>>;>;>>;>;;>;>;>;>>;>;>>;>;>;>;;>>;>;>>>;;>;>;>;>;>;>;>>;>>>>;;>;>>>;;>>;>>;>>;;>>;>>>;>;>>;>>>;>>>;>;>>;>>>>>>>>;>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>,>>>>,>,>>>>,>,>>>>>>,>>>>>,>>,>,>,>>,,>>,>>>,>>>,>,>>>,>,>>>,,,,>>,>,>,>,>,>,>,>,,>,,>,,>,>,>,,>,,>,>,,>,>,,,>,>,,,,>,,,,>,,,,>,,,,,,,>,,,,>,,>,>,,>,,,>,,,>,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',',,',,',,',,,,,,,>-=&%%$$$$%$$$#####@@%%$$$$++$*-,''''''''''''',=$....@%&&$##$&&&%%%%%%%%&&**&%$#%&&$@##$$$$%&**=;>,,',,>,,,''','''''',''''''',''''','''''',''',''',''''''''''',''''''''''''''''", -">>;>;>;>;>;>;>;>>>>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;;>;>>;>>;>;>;>;;>>>;>;>;>;>>;>;>;>;;;>>>>>;;>>;>;>;>>;>>>;>>;>;>>>;>>>;>>>;>>>>>>>>;>;>;>>>>>>;>>>>>>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>,>>>>,>>>>>>>,>>>>,>,>,>>>,>,>>>,>>>>>,>>>,>>,,>>,,>,>>,,>>,>,,>>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,>,,>,,>,,,>>,,>,>,>,,,>,>,,,>,,,>,>,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,,,,,,,,,,',,,,,,,,,,,,,,>>;=&%%$$$$$$$#$$##@@@$$#$$@+#*=;>'''''''''''''',=#...+$%$@@$$$###@@@@++@@#%&*&&##%%$@###$$$$&&*=->,,>,>>,,'',''',','''','',''''',''','''''','''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;>;;>;;>;>;>;>;>;>;>;>;;>;>;>;>;>;>;>>;>;>;>;>;>>;>>;;;>>;>>;>;;>;>;>;>>>;>;;;>>>;>>;>>>;>>;>>>;>>>;>>>>;>>>;>>;>;>>>;>>>>>>>;>>>>>>>;>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>>>,>>,>>>,>>>>>>>>,>>,>>,>,>>,>,>>,>>,>,>>,>>>>>,>>>,>,>>,,>,>>,>,>,>,>,>,>,,>,>,,>,>,>,>,>,,>,,>,,>,>,>,,,>,,,>,,>,,>,,,>,,>,,,,,,,>,,,,>,>,,>,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,,,,,,,,,',,',,,,,,',,,,,,,,>,,,,>-=&%%$%$$$$$######+@###$@++&=-;;>,'''''''''''''>*@...@@+@#@@@@@#$$#$###@@+@$&&&#@##+@#$$$$$%&*=-;>,>>>>>,,'',''''',''''''','','''''''',''''''',''''',''''','''''''''''''''''''", -">;>;>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>;>;>;>;>;>;;>;>;>;>;>;;>;;>>>;>;>;>;>>;>>;>;>;>;>>>>;;>>;>;>;>>;>>;>;>>;>>;>;>>;>>>;>>>>;>>>>>>;>>>>;>;>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>>>,>>>>,>>>>>>,>>>>,>,>,>>>,>>>,>>>>,>>>>,>,>>,>>,>>,,>,>,,>,>>,>>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,>,>,>,,>,>,>,,,>,,>,,,>,,>,,>,,,>,,>,,,>,>,>,,,>,,,,,,,,,,,,,,,>,,>,,>,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,',,',,,,',,,,,>>,>,>>;=*%%$$%$$$$#$###@++@#$#@+%=-;;>,>''''''''''''',-%+.+@++.+++$&=;>>,,,>;=*%@+@%%%@+@+@###$$$%&**=;>>>;;;,,,''',',''','',''''''''',''''''''','''''''''',''''''''''''''''''''''''", -">;>>;>>;>;>;>;>;>;>;>;>;>;>;>>;>>;>;>>;>;>;>;>;>>;>;>;>;>;>>;>>;>;>;>;>;>;>;>;>;>;>;>>;;>>>;>;>>;>>;>>;>>;>>;>;>>>>;>>;>>>;>;>>;>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>,>>>>,>>,>>,>,>>>>>>,>>>>,>>,>,>,>,>>>>,>,>,>>,>>>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,>,>,,>,,>,>,,,>,>>,,>,>,>,,>,,>,,>,,>,,,,>,,,,,,>,,,,>,,,>,,>,>,,,,,,,,,,,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,',,,,',,,,,,,,,',,,,,,>,>>,,,>>;=&&%$$$$%$$####@@+++##@.#*--;>>,,,'''''''''''''>*#..++...#&=->''''''''',;*%@@$%$.+++##$$$$$%&*=------;>,'','''','''''',','','''''','''''''',''','''''''''''''''''''''''''''''", -";>;>>;;>;>;>;>;>;>;>;>;;>>;>;>;>;>;>;;>;>>>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>>;>;>;>>;>>;>>;>>;>>;>>>>>>;>>>;>>;>>>>>>>>>>>>;>>>>>>>>>;>>>;>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>,>>,>>>>,>>>>>>>>>>>,>,>,>>>,>,>>,>>>,>>>,,>,>>>>,>,>,>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>>,>,>,>,,>,>,,>>,,,>>,,,,>,>,,,,,,>,,,,>,,>,,,,>,,>,>,>,,,>,,,,>,,,,,,,>,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,,',,',',,,,,,,,,>>>>>,,>>-=&%%$%$$$$$$###@@+++##@+%=-;>>,,,,'''''''''''',,;%+.@+.+%*--;>,'''''''''',-&@+#$+..+@##$$$$&&&=======;>',''',''',',''''''''','',''''','''''''''''''''''''''''''''''''''''''''", -">;>;;>>>;>;>;>;>;>;>;>>;;>;>;>;>;>;>>;>>;;>;>>;>;>;>;>>>;>;>;>;>;>;>;>;;>;>;>;>>;>;>>;>>;>>;>;>;>>;>>;>>;>>;>;;>>>;>>>;>>>;>>;>>;>;>>>>;>;>>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>>,>>>>>>,>>>>,>>,>>,>>>>>>>>,>>>>>,>>,>>>,>>>>>,>,,>>>,>>,>>,>,>>>,>,>>,,>,>,>,>,>,>,>,,>,>,,>,>,>,>>,,,>>,,,>>,,,>,>>,>>,,>,>,,>,,>,>,,,,,,,,,>,,,,>,,,,,>,,,,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,',,,,',,',,,,,,,,',,',,,>>>>>>,,>;=*&%%$$$$$$#$###@++++#@+@*-;;>>,,,,'''''''''''',,;*@+++@%=-;;;>>,'''''''''''>*#@#@.++@##$$$$%&&****&*=;,,'','',''''',','','''''''',''''',''''''''''''''','''''''''''''''''''''", -";>;>>;;>>;>;>;>;>;>>;>;>>;>;>;>;>>;>;>;;>>;>;>>;>;>;>;;>>;>;>;>;>;>>>;>>;>;>;>;;>>;>;>>;>;>;>>;>>;>>;>>;>>;>>>>>;>>>;>>>;>>>>>;>>>>>;>>>>>;>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>>>>>,>>,>,>,>,>>>,>,>>>,>>,>,>,>,>,>>>,,>>,>>,>>,>,,,>>,>,>>,>,>,>,>,>,>,>>,,>,>,>,,>,,,>>,,,>>,,,>,>,,,,,,,,>,,,>,,>,,,,,>,>,>,>,,,>,,,,>,>,,>,,,>,,,,,,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,',,',,,,,,,,,,>;;>>,>;=*&&%%$%$$$$$###@@+++@#@.$=;;>>,,,,','''''''''',,,>=$+@#&=-;;>,>,,'''''''''''';*@@+..+@##$$$$%%&&&&&&*=>,',''''',','''''''','',',''''''''','','''''''''''''''''''''''''''''''''", -";>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;;>;>;>>;;>;>;;>;>;>;>>;;>;>;>;>;>>;;>;>;>>;>;>>;>;>>;>;>>;>>;>>;>>;>>;>>;>>;;>;>>;>>>;>>>;>;>>>>>;>>>>;>>>>>;>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>,>>>,>>>>>>>>,>,>>>>>>>>>>>>>,>>>,>,>>,>>>>>,>>>>,,>>>,>>,>,>,>>>>,>,>>,>,>>,>,>,>,>,>,,>>,>,>,>,>,>>,,,>,,,,>>,>,,>>,>,>,,,>,,>,,,>,>,,,,,,,,,>,,,,>,,,,,,,,,>,,,,,>,,,>,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,',,,,,,,,',,',,,,,,',',,,,,>>;;>>>>-*&%%%$$%$%$$$###@@+.++#@+&-;;;>,,,',',''''''''',,>>-&@@%=-;;>>,,,,,''''''''''''>&++..++@#$$$$%%%%&%&&*->,'',','''''','',''''''''''''',''''''''''',''',''''','''''''''''''''''''", -">;>;>>;>;>;>>;>>;>;>;>;>;>;>>>;>>;>;>>;>>;>;>>;>;>;>;;>>;>>>;>;>;>;>>;>;>;>;>;>;>>;>;>>;>;>;>;>>;>>;>>;>>;>>>>>;>>>;>>>;>>>>>>;>>>>;>>>;>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>>,>>>>>>,>,>,>,>,>,>>,>,>>>,>>,,>,>>>,,>>>>,>,>,>>>,>,,>,>,>,,>,>,,>,>,>,>,>,>>,,,>,,>,>,>,,>,>,>>,>,,,,>,,,>,,,>,>,,>,,>,,,,,>,>,>,>,,,>,,,,,>,,,>,,,,,>,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,>>;;-;>>;=&%%%$%$$$$$#$$$#@+++++@+@*;;;>>,,',',',''''''',;----&##*=;;>,,,,,'''''''''''''',-%....@@##$$$$%%%%%%&=;,',''''',','''''','','',''','''''''''','''''''''''''''''''''''''''''''''", -">;>;>;>;>;>;>;;>;>;>>;>>;>>;;>;>;>>;;>;>;>;>;>>;>>;>>;>;>;;>;>>;;>;;>;>;>;>;>;>;>;>>;>;>>;>;>>;>>;>>;>>;>>;>;>>>;>>>;>>;>;>>;>>;>>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>,>>>>,>>,>>>>>>,>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,,>>,>,,>,>>>,>,>,>>,>,>>,>>>,>>,>,>,>,>,>,,>,>,>,>,,>,,>,>,>,,,>,>,>,>,>,,>,,>,,>,,>,>,>,>,,,,,,,,>,,,,>,,,,,>,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,',,,,,,',,,',',,',,,,',,,',,,>>;---;;-*&%%%$$$$$$$$####@@..++@+$=;>>>>,,,,',','','''>*&*-==*$&**=->,,''',,''''''''''''';*@..++@#$$$$$%%%%%&&-,,'',',''''','','''''''''',''''','','''''''''''''''''''''''''''''''''''''", -";>;>;>>;>;>;>>>;>>;>;>;;>;;>>;>;>;;>>;>;>>;>;>;>;>;>;>;>;>>;>;>>>;>>;>;>;>;>;>;>;>;>>;>;>>;>;>>;>>;>>;>>>;>>>>;>>>;>>;>>>>>>>>>>;>>>>>>>>>;>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>,>>>>,>>,>,>,>,>,>,>,>,>,>,>>>,>,>>>,>,>>>>>,>,>>,>>,>>,>,>>,>,>,,>,>,>,>,>,>>,>,>,,>,>,>>,>,>,,>,,>,>,,>,,>,,>,,>,,>,,,,,,,,,,>,>,>,,,>,,,,,>,,,,,>,>,,,,,,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,,',,,',,,,,,,>;-=---=*&%$$$$%$$$$$$$##@+++.+++$->;>>,,,,',',,,',',,=@#;',=&&&%%*=-,,,,''',''''''''''',>=$...+@##$$$$$$%%%&=;,',''''',',''''''',','',''''',''''''''''''''''','''''''''''''''''''''''''", -";>;>;;>;>;>;;;>;;>;>;>>;>>;;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;;>;>;;;>;>;>>;>>;>>;>>>;>;>;>>;>;>>;>>;>>>;>>;;>>;>;>>>;>>>>>;>;>;>>>;>>>;>>;>>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>,>>>>>>>,>>>>>>>>>>>,>>>,>,>>>,>,>>>,>,>,>,>,>,>,>,,>>>,,>,>,>>,>,>,>,>,>,,>,>,,>,>,>,,,,>,,>,>,,>,,>,,>,,>,,>,,,>,,>,>,>,>,,,,,,,>,,,,>,,,,,>,,,,,,,,>,,,,,,>,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',',,,,,,,,',,,,,>;-*===*&%%$$$$$$%$$$####@++.++.+%->>;>>,,,,,,',,',,'>%+.#=>-&&%@%>,-;,',,',',''''''''''>;=&..+++##$$$$%$%%%*->,'',','''''','','''''''''''''''''','',''''','''''''''''''''''''''''''''''", -">;>;>>;>;>;>>>;>>;>;>;>;>;>>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>>;>;>;>;>;>;;>;>;>>;>>;>>;>>;>;>>;;>>;>>>;>>>>>;>>>;>;>>>>>>;>>>>;>>>>>;>>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>>,>>>,>,>>,>>>>>,>,>>>>,>,>,>,>,>>>,>>,>>,>>>>>,>>,>,>>>>,>>,>,>>,,,>>,>>,>,>,>,>,>,>>,>,>,>,>,,>,>>,>,,>,,,>,,>,,>,,>,,>,,,>,,,>,,,,,,,,>,>,>,,,>,,,>,,>,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,,,',,,,',,',,,,,,,,,,',',,',,,,,,,>;=****&&%$%$$%$$$$$#$$#@@++.....%->>>>>,,',',,',,,,,=#..+%=*%%#++%;;*>,'',',',''''''',,>;=&+..+@@#$$$$$$%%&=>,',''''',','''''''''',',','''''',''''''',''''''''','''''''''''''''''''''''", -">;>;>;>>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>>;>>;>;>;>;>;>;>;>;>;>>;>;>>;>>;>;>;>;>>>;>>>>;>>;>>>;>;>>>;>>;>>>;>;>>>>;>>>>>;>>>>;>>>>;>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>,>>>,>>>,>,>,,>,>,>>>,,>,>,>>>,>,>>>,>,,>,>,>,>,>,>,,>,>,>,>,>,>,,,>,>,>,>>,,>,>,,>,,>,,,>,,>,>,,>,>,>,>,,,,,,>,,,,,,,,,,,>,,,,,>,,,>,,>,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,,,,,,,,,',',,,,,;-*&&&%%%$$$$$$%$$$$####@+......%;>>>>,,,,,,',,,',',*$+..@$@#$#..+&*%=,,',',',''''''',,;;-&+..++##$$$$%$%&=>,''',',''''','','',',''''''','','''''''''''''''''''''''''''''''''''''''''''", -";>>;>;>;>;>;>;>;>;;>;>;>;>;>;>;>;>;>;>;>;>>>;>;>;>;>;>;;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>>;>;>>;>>;>;>>>>;>>;>>>;>>>>>;>>>>>>;>>>>>>>>;>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>,>>,>>>,>>,>>>,>,>,>,>,>,>,>,>>>,>>,>>>>,>>>,,>>>,>>>,,>,>>,,>>,>>,>,>,>,>,>,>>,>,,,>,>,>,>,>,>,>,,,,>,,>,>,,>,,>,>,>,,>,,>,,,,,,,>,,>,,,>,,>,,>,>,,,,,>,,,>,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,',,',,',,,,,,,,,,,;-*&&%%%$$%$$$$$$$$#$##@@++.....%;>>>>>,,,,,,,',,,,,&%+.....+##+..@++*',,,,,,',,'''',,>>--&+..++@#$$$$$%%*;,,',''''',',''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''", -";>;>>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>>>;>;>>;;>;>;>;>;>;>>;>>>;>;>;>;>;>;>;>;>;>>;>>;>;>>>;>;>>;>>>;>>;>>;>>;>;>>;>>>;>>;>>;>>>;>>;>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>,>>>>>,>>>>>>>>>,>>>>>>,>>>>>,>>>>>>>>>>>>,>>>,>,>>,>>,>,>>,,>>>,,>>,,>>,>,>,>>,>,>,>>,>,>,>,>,,>,>>>,>,,>,,>,>,,,>,>>,,>,,,>,>,,,>,,,,>,,>,,>,>,>,,,>,,>,,,,,,,,,,,,>,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,',',,,,,,,,,,',',',,,,,>-*&%%%%$$$%$%$$$$$#$##@@+......%->>,>>,,,',,,,,,,,,*%#.....+#%@.....&,,',',,,,,,',,,,>;;=&+..++@##$$$%%&-,,''',',''''''',',',''',','''''''''','''',''''''','''''''''''''''''''''''''''", -">;>;;>;>>;>>;>;>;>;>>;>>>;>;>;>;>;;>>;>;;>>;>;>;>>;>;>;>;;;>;>>>;>>;>>;>;>;>;>;>;>>;>;;>>>;>>;;>>;>>;>>>;>>>;>>>;>>>;>>>>>>>>;>>>>;>>;>;>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>>,>>>>,>,>>>,>,>,>,>,>>>>,>>>>,>>>,>>>,>>>>,>>>,>>>>,>,>>,>,>,>,>,,>,>,>,>,>>,>,,,>,>,>,>,>,>,>,,,>,>,>,>,,>,>,,>,>,,,,,>,,,,,,,>,,,,,>,>,>,>,,>,,,,,,,,,,>,,>,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,,,,,',',',,,,,,,,,,,>;=&&%%$$$$$$$$%$$$$###@+++.....%->>>>,>,,,,,,,,,,,,*&%+....+$%#....+*',,,,,',',,,,,,>>;-=&+..++@#$$$$$&*>,'',''''',',','''''','''''',','',''''''''''',''''''''''''''''''''''''''''''''", -">;>>;>;;>>;>;>;>;>>;>;;;>>;>>;>;>>;;>;>>;;>>;>>;;>;>;>;>>>;>>;;>;>;>;>;>;>;>>;>>;>;>>>>;;>>;>>>;>>;>>;;>>;>>>;>>>;>>>>;>;>>;>>>>;>>>>>>>>>;>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>,>>,>>>,>>>>>,>>>>>>>>>>>,>,>>,>,>>,>>>,>,>,>,>,>,>>,,>,>>,,>,>,>>>,>>,>,>,>,>,,>,>,>,>,>,,>,,>,>,,>,,>,,,>,,>,,,>,,,,>,>>,,,>,>,>,,,>,>,,,,,,,,,,,,,>,,,,>,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,,,,,,,,',,,',,',,,,,,,,',',,',,,,,>=*%%%$%$%$$$$$$$$#$##@@+......$->>,>>>,,,,,,,,,,,,=&&#....@$&&@...@-,,,,,,,,,,,,,,,>>;-=%...++@##$$$$&-,,,'',','''''''''','''',''''''''''',''',''''''''''''',''''''''''''''''''''''''", -";>;;>>>;;>;>>;>;>;;>;>>>;>;>;>;>;;>>>;>;>>;>;>;>>;>;>;>;>;>;;>>;>;>;>;>>>;>;>>;>;>>;;>;>>;>>>;>>;>>;>>>;>>>;>>>;>>;>;>>>>>>>>>;>>;>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>>>>>,>,>,>,>,>>,>>,>>>,>>,>,>>>,>,>,>>,>,>>,>,>>,>>,>,>,>,,>,>,>,>,>>,>,>,,,>,>,>,>,,>,>,>,,>>,>,>,,>,,>,>,,,,>,>,,,,,,,>,,,,,>,>,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,,',,,',,,',,,',,,,,',,,,,,,>;*&%%$$%$$%$$$$$#$###@++......#=;>>,>,>,,,,,,,,,,,>&&&#++@##%*%#++&>,,,',,,,,',,,,>>;;-*$....+@#$$$$$*;,'','''',','',','''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>;;>>;>;;>;>;>>;>;>;>;>;>;>;>>>;;>;>;>;;>;>;>;>>;>;>;>;>>;;>;>;>;>;>;>;>>;>;>>;>>;>;>>>;;>>;>>;>>;>>>;>>>;>>;>>>>>;>>>;>>;>>>>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>,>,>>,>,>>,>,>,>>>>>>>>>>>>>,>>,>>,>>,>>,,>>>,>>,>>,>,>,>,>,>,>,>,>,>>,>,>,>,>,,>,>,,>>,>,>,>,>,>,,>,,>,,,,,>,>,,>,,,>,>,,,,>,>,>,>,,,>,>,,,,,>,,,,,,>,,,,,,>,,>,,>,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,>;-*%%%$%%$%$%$$$$#$##@++......+*;>>,>>,,,,,,,,,,,>,-**&%$$$@#&&&%&=,,,,,,,,,,,,,,>>>;;=&@...++@@#$$$$*>,'',''''''','''''''''',''''','',''''','''''''''','''''''''''''''''''''''''''''", -">;;;>;>;>;>>;>>;>;>;>;>;>;>;>;>;;;>>;>;>;>>;>;>;>;;>>;>;>;>;>>;>;>;>;>;>;>;;>>;>;>;>>;>;;>>>;>>;>>;>>;>>>;>>>;>>>;>;>>>;>>>>>>>>;>>>;>>>>>>>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>,>,>,>,>,>,>>,>>,>>,>>>>>>,>,>>,>,>>,>>>,>,>,>>>,>,>,,>,>,>,>,>>,>,>>,,,>,,>,,>,,>,>,>,,>>,>,,,>,,,>,,,,>,>,,,,,,,,,>,,,,,,>,,,,>,>,,,,>,>,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,',,,,',,',,',,,,',,,',',,,,,,,,>-=&&$%$$%%$$%$$#$###@++......+%->>>,>>,>,,,,,,,,,>;=&&&%&#+#%&&*=>>>,,,,,,,,,,,>>>;;-=$.....+@##$$$$*>,',',',',''''',','',''''','''''''','''''''',''''''''''''''''''''''''''''''''''", -">>>;>>;>;>;>;>;>;>>;>;>;>;>>>;>>>;;>;>;>;>>;>;>;>>;>;>;>>;>;>;>>;>;>>;>;>>>>;>;>>>;>;>>>>;>>>;>>;>>;>>;>>>;>>>;>>>>>>;>>>>;>>;>>>>>>>>>>>;>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>,>>>>>>>>>,>>,>>>>>>>,>,>,>>>>>>>>>>>,>>>,>>,>>,>,,>>,>>,>>>,>>>,,>,>>>,,,>>>,>>,>,>,>,>,,>,>,,,>>,>,>,>,>,>,,,>,>,,>,,>>,,>,,>,>,,>,,>,>,>,>,,,>,>,>,,,>,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,',,,,',,,,',,,,,,,,>-*&%%%%%%$$$$$$$###@++.......#=>>>,>>,>,>,>,>,>,>>;=*&*&#.+%*=-;>>>>>,,,,>,>>>>>>;;=&+.....++##$$$#&>,,',',,'',''''''''''',''''''''',''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;;>;>;>;>;>;>;;>;>;>;>;;;>;>;>>;>;>;>;;>;>>;>;>;>;>;;>;>;>;>>;>;;>;>;;;>>;>;>;>;>>;;>>;;>>;>>;>>;>>;>;>>;>>>;>;>>>>>;>>;>>>>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>,>>>>>>>>>,>,>,>,>,>>,>>,>>>,>>>,>,>>,>,>,>,>,>>,>,,>>>>,,>,>,>,>,>,>,>>,>,>>,,,>,>,>,,>,,>>,,>,>,,>,,,>,,>,,>,>,,>,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,>,,>,,,,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,,,,,,,,,,,',',,',,,,,',,',',,,,,>,>,,>>-=&&%%%%%$$%$#$$#@@+........+&->,>,>>,>,,,,,>,>>>;-=*&&#@#$&*-;;>>>>>>>>>>,>>>>>;-&@......+@@##$$$%;,,,,,',,',',''','',''','','','''''',''',''''''''',''''''''''''''''''''''''''''", -";>;>>;>>;>>;>;>;>>;>>;>>;>>>;>;>;>;>>;>;>>;>>;>;>;>;>;>>;>;>;>;;>;>>;>;>>>;>;>>;>;>>;>>>;>>>;>>;>>;>>>>>>>;>>>;>>>>;>>;>>>>>>>;>>>;>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>,>>>>>>>,>>,>>>,>>>,>,>,>,>>>>>>>>>>,>>,>>,>>,>,>>,>,>,>>,>>,>,>,>>>,,>,>>,>,>,>,>,>,>,,>,>,,>>>,>,,>,>,>,,,,>,,,>,>,>,,,>,,>,,,,>,,>,>,>,>,,,>,>,>,,>,,>,,,,>,,>,,,,,,,,,,>,,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,',,',,,,,,,,,',,,,,,,,,,',,,,,>,,>>;-*&&%&&%$$$$$$#$#@+.........%=>>>,,>>>>>>>,>>>;==*&*&***&****==;;>>,>,>,>>,>>>;=&#........+##$$$$%->,,>,>,,,''',''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''", -">;>;>;>;>;;>;>>;>;>;>;>;>;>;>;>;>;>;;>>;>;>;;>;>;>;>;>;>>;>;>;>>>;>;>;>;>;>>;>;>>;>;>;>;>>;>>;>>;>>;;>;>;>>>;>>;>;>>>>>>>>;>;>>>>>>>>>>>>;>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>,>>>>>>>>,>>>>>>,>>>>>>>>>>>>>,>,>,>,>,>>,>>,>>,>>>>,>>,>>>,>>,>>,>,>,>,>>,>,>>,>,>,>,>,>,>>,>,>,,,,>,>,,>,>,>>,>,,>,>,,,>,>,,>,,>,>,,>,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,,,',,',',,,',',',',',,,,,>,>,,,,>>-*&&&&%$%$$$$##@@++........@&;;>>,>,>,>,>>>-**&&*==;;>>,>>>;-=*=-;>,>,>,,>>>-=&#........++@##$$$$*;;>;;>>>,,,,''',',','',''''','',''',''''',''''''''''''''''''''''''''''''''''''", -">;>;>;>;>>;>;>;>;>;>;>;>;>;>>;>;>;>>;>;>;>;>;>;>;>>>;>;;>;>;>;>;;>>;>;>;>>;>>;>;>>>;>>>;>>;>>;>>>;>>>>>>>;>>>;>>>;>>;>>;>>>>>>>;>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>,>>>>>>,>>,>,>,>,>>>>>>>>>>,>>>,>>,>>,>,>>,>>,,>>,>>,>,>>,>,>,>,>,,>,>,>,>,>,>,,>,>,,>>,>,,>>,>,>,,,>,>,>,,>>,,,>,,,>,,,>,,,>,>,>,>,,,>,>,>,,>,,>,,,,>,>,,,>,,>,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,',,,,,',,,,,,,,,,,,,,,,,,,,,',,,,,>>,,,,,>>-**&&%$$$$$$$##++..........$=;>>>>,>>>>>;=&&&*--;>>>,,'''''''>-*=->>,>>>>;=*$+..........+@##$$$$&=------;>>',','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>>;>;>;>;>;>;>;>;>;>;>;>;;>;>>;>;>;>;>>;>>;>;>;;>>;>>;>;>;>;>>;;>;>>;>;>;>>;>;;>>;;>>;>;>>;>;>>;>>;>;>>>;>>>;>>>>>;>>>>;>;>>>>>>;>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>,>>>,>>,>>>>>>>>>>>>>,>,>,>,>,>>,>>,>>,>>>,>,>,>>>,>,>,>>>,>>,>,>,>,>>,>,>,>,>,>,>>,>,>>,,>,>,,>,,>,,>,,>,,,>,,,>,,>,>,,,>,,>,>,,,,,,,,>,,,,,,>,,,,,,>,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',',,,',',,',',',',,',,,,>>>>,,,,>;-**&%%%$$$$###++..........+%=;>>>>>>>;;=%%&**=--;;>>,,''''''''>==-;>>;-*&%#............+@@$#$$$%&*****==-;>,,','','','''','''''','''''''''''''''''''''''''''''''''''''''''''''", -";>>;>;>;>;>;>;>;>;>>;>>;>;>>;>>;>;>;>;>;;>;>;>>;>>;;>;>;>>;>;>;;>>;>>;>;>;>>;>;>>;>;>>;>>>>;>>>;>>>;>>>>;>>>;>>>;>;>>>>>;>>>>;>>>;>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>>>>>>>,>>>,>>,>>,>,>,>>>>>>>>>>,>>,>>,>>,>>>,>>,>,>>,>>,>,>,,>,>>>,>>,>,>,>,>,>,>,,>,>,,>,>,,>,>,>,>,>,>,,>>,,>>,,>,,,>,>,,>,,,,>,>,>,,,,>,>,,,,,>,,,,,,>,,,,,,,,,,>,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,',,,,,,,,',',,,,,',,,,,,,,,,,,,',,,,,>>>>>>,,,,>;==*%%$$$$$$#@++...........#&-;>>>>>>;*&$$%&&**=-;;>>,,'''''''''=*=-==&$@+.............+@@#$$$$$&&&&&&**=-;,,'','''''',''''','''''',''''''','''','''''''''''''''''''''''''''''", -">;;>;>;>;>>>;>;>>;>;>;;>>;>;>;;>;>;>;>;>>;>;>;;>;;>>>;>;>;>>;>>;>;>;;>;>>;>;>>>;>>;>>;>>;;>>;>;>>;>>;>;>>;>>>;>>>>>>;>;>>>>>>>;>>>>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>,>>,>>>,>,>>>>>>>>>>,>>>>>>>>,>,>,>,>>,>>,>>>>,>,>>,>,>>,>>,>>,>,>>,>,,>,>,>,>,>,>,>,>,>>,>,,>,>,>>,,>,>,,>,,,>,,,>,,,>,,,>,,,,>,,>,>,,,,,,>,>,,,,>,>,,,>,,>,,,,,>,,,>,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',,,,,,,,,',,,,,,,',',',',,,,',,,>>;;>>>>>>>;-=*&%%$$$$##@@.............#&-;;>;>;-&%%%%%%%&**=-;;>>,''''''''>***=**$+...............+@##$$$$%%%&&&&&*=-;>,,'',','''''''''''',''''','''''''''''''''''''''''''''''''''''''''", -">>;>;>;>>;;>;>>;>;>;>>;;>;>;>>;>;>;>>>;;>;>;>>;>>>;;>;>;>;;>>;>;>;>>;>>;>>;>;;>>;>;>>>;>>>;>>>>;>>;>>>>;>>;>>>;>>;>>>>>>>;>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>,>>>,>,>,>,>>>>>>>,>>>,>>,>,>>>,>,>>,>>,>,>,>,>>,>,>>,>>,>>,>,>,>,>,>,,>,>,>,,>,,,>,>,,>,,>>,,>>,,>>,,>>,,>,>,,>,,,>,>,>,,,,,>,,,,,,,,,,,,,,>,,,,,>,,,,,,>,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,',,,',,',,,,,,,,,',,,,,,,,>;;;>>,>>>>;-*%%%$$$$##@++............+$*=-;;;;-&&&%%%%&%&&**--;;>>,'''''',*=---==%#.............++@##$$$$$%%%%%%%&&=->,,'',''',''',''',''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;;>>;>;;>;>;>;>>;>;>;>;>;>;>;;>>>;>>;>;>;;;>>;>;>;>>;;>>;>;>;>;>>;>;>>;>;>>;>;>>;>;>>;;>>;>>;>;>>>>>;>;>>>>>>>;>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>,>,>>,>,>>>,>>>,>,>>>,>,>,>>>,>>,>,>,>>,>,,>,>>,>,>,>,>,>>,>,>,>,>,>>,>,>>,>,,,>,,,>,,,>,,,,>,,,>,,,>,,,,,,,>,>,,,>,,>,>,,>,>,,,>,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,',,,,,,,,,,,',,,,,,,,,,',,',',',,',',,,,>;;-;;>;>;;;;-*&%$$$$$##++............+$&=-=----=&&&&%%%%%%%&&&=-;;>>,,''''-*-;>>>;-*$+............++###$$$$$%$%%%%&&*=;>,,'''''',''','''''''''''''''',''''''''''''''''''''''''''''''''''", -";>>;>;>>;;>;>>;>;>;>;>;>;>>;>;>;>;>>;;;>;;>;>;>>>;;>;>;>;>;>;;>;>;>;>;;>;>>;>>>;>;>>;>>;>>;>>>;>>>>>>>;>;>>>>>>;>>;>>>>>>>;>>;>>>>>>>;>>;>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>,>,>>>>>>,>>,>,>,>,>>>>>>>>,>>>,>,>>,>>,>>,,>>>,>>,,>>,>,>,>>,>,>>>,>,>,>,>,>,>,,>,>,,>,>,,>,,>,,,,>,>,,>>,,>>,,>,>,,>,,,>,>,,>,>,>,,,,>,,,>,,,,,,,,,,,,,,>,,,,,,,>,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',',,,,,',,',,',,,,,,,,,,,,,,,,,,,,>>;---;;;;;;;-*&%%$$$##@++............%=;;;--===*&%**%%&%&&%&&&&*=-;;>>,,,;&=>,,,',,>-&+...........++@##$$$$$$$%%%%&&&*-;,,,',',''''''''''',''','''''''''''''''''''''''''''''''''''''''''", -">;;>>;>;>>>;>;>;>;>;>;>>;>;>;>;>>;>;>>>;>>;>;>;>;>>;>;>>;>>;>>;>;>;>;>>>>;>;>;;>>>;>>;>>;>>;>;>>;>;>;>>>>;>;>;>>;>>;>>;>;>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>,>>>>>>>>,>,>,>,>>,>,>>>,>>,>>,>>>,,>>,>>>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>>,>,>,>,,,>,,,>,,,,>,,>,>,,,>,,,,,,,,>,,,>,,,,,>,>,,>,,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',',',',',',,',,,,>;-===------;=*%$%%$$##@+............%-,,,,>;---=*&%**%%%%%&%%&%&*=-;;;>>;**;,,'''''',>&@...........+@@#$$$%$%$$$%%%%&*=->,',''',','','',''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>;>;;>;>;>;>;>;>;;>;>;>;>;>;>;>;;>;>;>>;>;>;;>;>>;>;;>;>;>>;>>>;>;;>>>;>>>;;>>;>>;>>;>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>,>>,>>>>>>>,>>>>>>>>>>>>,>,>,>>>>>>>>>,>>>>,>>,>>,>>,>,>>>,>,>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,,>,,>>,,>>,,>>,,,>,,,,>,,>,>,>,>,,,>,,,>,,>,,,,,,,,,,,,,,,,>,,,,>,,,,,,>,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,,,,,,,,,',',,',,',,,,,,,,,,,,',,,,,,>>>-=======---=*%%%%$$##@+...........$;'''',,,>;;-=*%&*&&%&%&%&&&%&&*=-;;-**->''''''''''>*@..........++@##$$%$%$%$%%%&&&*=;>,',,,'',''''''''''''''','''','''''''''''''''''''''''''''''''''", -";;>;>;>;>>;>;>;>>;>>;>>;>;>>>;>;>;>;>>;>;>;;>;>;>>;>;;>;>>;>;>;;>;;>>;>>;;>>;>;>>;>>;>>>;>>;>>;;>>>>;>>>;>;>;>>;>>>;>>;>;>>>;>>>>>>;>>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>,>,>>,>>>>>>>,>,>,>,>>,>,>>,>>,>>>>,>>,>,>>>,>,>>,>,>,,>>>,>,>,>,>,>,>,>>,>,>,,>,>,>,>,>,,>,>>,,>,,,>,,,>,,,,>,,>,>,,>,,,,,,,,,>,,,>,,,,,,,,,>,>,>,>,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,,,,,,',,,,,',,',',',',,,,,,,,,>>;-=***====-=*&%&%$$##@++..........#;''''''',,,>>;-*%&*&%%&%&%%&&&&&*=--*&=>'''''''''''',*@..........++###$%%%$$$%%%%&&*=;>,,',,,,'',''''',''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>>;>;>;>;>;>;>;>;;>;>;>;>;>>;>;>>;>;>>;>;>>;>;>;>;>>>;>>;>;>;>>>;>;>;>>>;>>;>>;>>;>>>>;>;>>;>>;>>>>;>>>;>>>>>>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>,>,>>>>>>>>,>>>,>>>,>>,>,>>,>>,>,,>>>,>,>>,>>,>,>,>>>,>,>,>,>,,>,>,>,>,,>,,>,,>>,>,,,>,>,>,,>>,,>,>,>,,,>,,>,,>,>,>,>,,,>,,,>,>,,>,,,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,,,,,,,,,',',,,,,,',,,,,,,,,,,,,',',,,,>,>>;-***&****=*&%%&%%$#@@+..........@-'''''''''',,,>;-*&&*&%%%&&%&%&&&&*=*&=>,''''''''''''''*@.........++@##$%%&%%$%%%&&&**-;>,,,,,',''',''''''',''''''''''''''''''''''''''''''''''''''''''", -";>>;>>;>;>;>>;>;>;>;>;>;>;>>;>;>;>;>;;>;>;>>;>;;>>;>;>;>;>>;;>;>;;>>>;>>;;>;>>>;;>>>;>;>>;>>;>>;>>>>>>;>>>;>>>>;>>>;>;>>>>>>>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>>,>>>,>>,>>,>>,>>>>>>>,>,>,>>>,>,>>,>>>,>>,>,>>,>>>>,,>>,>,>>,>,>,>>,,,>,>,>,>,>>,>,>,>,>,>,>,>,,,>,,>,,>,>,>,,,>,,,,>,,>,,>,,>,,,,,,,,,>,,>,,,,,,,,,,>,,,>,,,,,,,,,>,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,',,,',,',',',',',,,,,,,,,>>;;-**&&&&****%%&&%$##@++.........+=''''''''''''',,,>-*&**&&%&%&%&%&%&&&&*;,''''''''''''''',*+.........++@##%&&%%%%%%%&&*==;>>,,,,,',''','''''''''',''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;;>;>;>;>;>;>;>;>;>>;>;>;>>;>;>;;>;>>;;>;>;>;>;>;>;>;>>>;;>>;>>;>>;;>>>;;>>>;>>;>>;>>>>;>;>>>;>>>;>>>>>>>>>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>,>>>,>,>,>>>>>>,>>>>>,>>,>>,>>,>>,>,>,,>>>,>,>,,>,>,>,>,>>>,>,>,>,,,>,>,>,,>,>,,>,>>>,,>,,>,,,>,,>>,,>>,,,>,,>,,>,,>,>,>,>,,,,,,>,,>,,>,,,,,>,,,>,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,>>>>;--*&&&&&&&&%%&&&%$#@++.........+&'''''''''''''''',,>-*&&*&%&%&%&&%&%&%*->,'''''''''''''''',&+........+++##%&&&&%%%&&&***=;;>>>,,,',''''''','''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>>;>;>;>;>;>;>;>;>;;>>>;>;>;>>;>>>;>;>>;>;>>;>;>>;>;>;>;>>;;>;>>;>>;>;>>>>;>>;>>;>;>;>;>>>>;>>>;>>>;>>;>;>>;>>>;>>>>>>>;>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>,>>>>>>,>>,>>>>,>>,>>>>>,>>>>>>,>>,>,>>,>,>>,>>,>>,>,>,>>,>>>,>,>>,>>>,>>>,>,>>,,>,>,>,>>,>,>,>,>,,>,>,,,,,>>,>,,>>,,>,,,>,,,,>,,>,,,,>,,,,,,,,,>,>,>,,,,,,,,>,>,,,,,,,,,,,,,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,,,,,,,',,',,',',,',,,',',',',,,,,,,,,>>;>--=&&&&&&&%%&&*&%$@@+..........%,'''''''''''''''',,,>-*&**&&%&%&%&%%%&->'''''''''''''''''''>%..........+@#$&***&%%&&&**=--;;>>>,,,','',''''''''''','''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>;>>;>>;>>;>>>;>;>>>;;>;>;>;>;>;;>;>;>;>>;;>;>;;>;>;>;>;>>>>;>;>;>;>>;>;>>;>>;>>>>>>>>>;>;>>>;>>>;>>>>>>>>>>>;>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>,>>>>>>,>>,>>>,>,>>>,>>>>,>>>,>>,>>>,>>>>>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>>>,>,,,>,>,,>,>,>,>,>,,>,,,>,>,,>,>,>,>,,,,,,,>,>,,>,,,,,,>,,,>,,>,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,',,,,,,,,,,,,,,,,',,,,,,,,,,',,,,>>>>;;--*&&%%%%%%&&*&*%#@++.........#;'''''''''''''''''',,,>;*&&**%&%&%%&%&-;,'''''''''''''''''''';#.........++@$&*===*%&***==-;;;>>>,,,',''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>>;>;>;>;>;>;>;>;>;>;;;>>;>;>;>;>;>>;>;>;>;>>;>>;>>;>;>;>>;>;;>>;>>;>>;>>;>;>>;>>;;>;>;>;>>>>>;>>>;>>>>;>>>;>;>>>>>>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>,>>>>,>>>,>>,>>,>,>>,>,>>>,,>,>,>>,>>,>>>,>,>,>,>,>>,>>,>,>,>,>,>,>,>>,,>,,>,>,,,>,,>,>,,,>,,>,,>,,,>,>,>,>,,,>,,,,,,,>,>,>,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',',,',,',,,,',',',,,,,,,>,>>>>;-==&&&&%%%&&***&$#++.........@='''''''''''''''''',,'',>;*&***&%%&%%&=;,''''''''''''''''''''''*+..........+#%*==-=*&&*==--;;>>>>>,,,,',''''',''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>>;;>>;>;>;>;>;>;>;>;>>>;;>;>;>;>;>;;>;>;>;>;;>>;>;>;>>;>;>;>>>;>;>;>>;>>;>>>;>>;>>>>>;>>>>;>;>>;>;>>>>;>>;>>>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>,>>>>>,>>,>>>>,>,>>>,>>>>,>>>,>>,>>>>,>>>,>,>>,>,>>,>>,>>,,>,>,>>,>,>,>,,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,>,,,>>,,>,,>,,>,,,,,,>,,>,,,>,>,>,,,,,,,>,,>,>,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,',,,,,,,',,,,,,,,,,',,,',,,,,,,',,,,,,>,>>;;;-=*&&%%%%&&****&#@+.........+&>''''''''''''''''''',,',,>-*&***&&%%&=;>,'''''''''''''''''''''',&.........++@$*=--;-*&=--;;;;>>>,>,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>;;>>;;>;>;>>;>;>;>>;>;>;>>;>;>>>;>;>>;>;>>;>>;;>;>;>;>;>;>>>;;>;>>>;>;>;>>>;>>;>;>;>;>>;>;>>>>;>>>>>;>>>>>>>;>>>>;>>>>>>;>>>>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>,>>>>>>>,>>>>>>,>>>,>>>,>>>,>>,>,>>>,>>>>>,>>>,>,>,>,>>>,>>,>,>,>>,>>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>>,,,>,>,>,>,,>,>,>,,,,>,>,,,,,,,>,>,>,,,,,,,>,,>,,,,,>,,>,,,,,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,,,',,,',,,,,,,,',',',,,,,,,,,>>>>;;-==*&&&%%%***=**%@++.........#-''''''''''''''''''',,,''',>;*&***&&&*;>'''''''''''''''''''''''''-#..........+#&*=--;;*&*-;;;>>>>>>,,,,,','''''',''',''''''''''''''''''''''''''''''''''''''", -";>;>;>>;>>;>;>;;>;>;>;;>;>;>;>;>>;;;>>;>;>;>>;>;>;>>;>;>>;>;>;;>;>>>;>;>>;>>;>;>;>>>>>>;>;>>>>>;>;>>>;>;>>;>>;>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>,>,>>>>>,>>,>>>,>>>,>>>,>>,>>>,>,>>,>,>,>,>,>>>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,,,>>,,,>,,,>,,>,,,>,>,,,,>,>,>,,,,,,,,>,>,,,,,,,,,>,,,,,,,,>,,,,,,,,,,>,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,',,,',,',',,,,,,',,',,,>,,>>>;;-=**&&%%&****=*&#+..........+*,''''''''''''''''''',,,'''',>;*&&*&&*;>>''''''''''''''''''''''''''&+.........+@$*=---;;=*=;;>>>>,>,,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>;;>;>>;>;>>;>;>;>>;>>;>;>;>;>>;>;>;>;>;;>;>;>;;>;>;;>;>>>;>>;;>>;>;>;>;>;>>>;;>;;>>>>>;>;>>>>>;>>>>>>>>>>>;>>>>;>>;>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>,>>>>,>>>>>,>>>,>>>>>>>,>>>,>>>,>>>,>>>,>>>>>,>,>>>,>>,>>>>,>>,,>,>>,>>>,>,>>>,,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,>,,,>>,,,>>,,>,>,>,,,>,,>,>,>,,,,,,>,>,>,>,,,,,>,,>,,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,',,,,,,,,,',,,,,,,,',',,,,,,,,,>,>>>;;-=**&&%%&&***=**%@+..........%>'''''''''''''''''''',>,,'''',,>-*&*=;;>''''''''''''''''''''''''''';$..........+@%&==-;;;=&*->>,>,>>>,,,,'',''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>;>;;>;>>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>;>>;>;>>;>>;;>>;>>>;>;>;>>;>>>;>>>>>>>;>;>>;>>>;>;>>;>;>>;>;>>>>>;>>>>>>>>>>;>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>,>>,>>>>>>>>,>>>,>>>,>>>,>,>>>>,>>,>>>,,>,>,>>>,>,>,>,>,>>,,>>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,,>>,,,>,,,>,>,,,,>,>,,>,,,>,,>,>,,,,,,,,,,>,,>,,,,,,,,,>,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,,,,,',,',',,,,,',,',,,,,',',,,,,,,,>,>;--=*&&%%&***=*=&$@+..........@=,'''''''''''''''''''',,,,''''',,>>;;>>>,''''''''''''''''''''''''''''*+..........+@$&==--;;-&&->>>,>,>,,,,'''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>>;>;;>;>;>;>;>;;>>;>;>;>;;>;>;>>;>;>;>>;>;>>;>;>;;>;>;>;>;>;>>>;>>;>;>;>;>;;>>;>;>>>;>>>>>>>;>>>>>>;>>;>>>;>>>;>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>,>,>>>,>>>,>>>,>>>>,>,>,>>,>,>>>>>>>,,>>,>>,>,>>,,>>,>>,>>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>,>,>,,>,>,>,,,,>,,,>,,>,,,,>,>,>,>,>,,,,,,,>,>,>,,,,,,,,,>,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,',',,,,,,',,,,>,>>;;-=**&%&*******&#+...........+%>'''''''''''''''''''',,>>,'''''''',,>>>>'''''''''''''''''''''''''''''>%...........++@&*=--;;-*%->>,>,,,,,',''',''',''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>>>;>>;>>;>;>>>;>;>;>;>>;>;>;>;>;>>;;>;>;>;>;>;>>>;>;>>;>>;>;>;>>;>>>;>>;>>;>>>>;>>>;>;>;>>>>;>>;>>>>>>;>>>;>>>;>>>>>>>;>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>,>>>,>>>>>,>>,>>>>>>>>>,>>>,>>>,>>,>,>>>,>>,>>>>,,>,,>,>>,>>,>>,>,>>>,>,,>,>,>,>,>,>,>,>,>,,,>,>,,>,,>,,>,,,>,>,,>,,>,,>,>,>,,>,>,,,,>,>,,,,,,,,,,>,>,,>,,,,,,,>,>,,,,,,,>,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,',,,,',,',,',,',,,,',,,,,',',,,,,',,,,,>;;-=*&%&*=**=**&@++...........@=,''''''''''''''''''''>-==;,''''''',,,>>,''''''''''''''''''''''''''''''=@...........+++%*=--;;;*&=>,,,>,,,''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;;;>;>;>;>;>;;;;>>;>>;>;>;>;>;>;>;;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>>>;>>;>>>>>;>;>>>;>>;>>>;>;>>>>>>;>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>>>>,>>>>>>>>>>,>>>>>>>,>>,>>,>>>,>>>,>>>>>,>>,>>>>>,>,>>>,>>>>,>>,>,>,>,>,,>,>>>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>>,,>,,>,>,,>,,,,>,,>,,,>,>,,,,,,>,>,>,>,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,',',,,,',',,,,,,,>>;-=*&%*===***&$@++............%>''''''''''''''''''''-&%%%&='''''''',>>,''''''''''''''''''''''''''''''';$............+.+#&*--;;>=*=>,,,,,'',''''''''',''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>>>;>;>;>;>;>>>>>;>;>;>;>>;>;>;>;>>;>>;>;>;>;>;>;>;>>;>;>;>>;>>;>;>>;>>;>;;>>;>>>;>>>>>;>>>>>;>>;>>>>>>;>>;>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>,>,>,>>>>>,>>>,>>>,>>>,>,>>,>>,>,,>>>,>,>>,,>,>,>>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,,,,>,,>,,,>,>,>,>,,>,,>,,,>,>,>,>,,,,,,,,>,,>,>,,>,,,,>,,,>,,,>,,,,,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,',,,,,,',,',,,,,',,,,,',,,,,,,',,,,,>>;-*&&*==****&$@++............@*,'''''''''''''''''''-&%%%&&&-''''''',,>,,,''''''''''''''''''''''''''''',*+............+.+@%*=-;;>;*->,,'',''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>>>;>;;>;>>;>;>;>;>;;;>;>;>>;>;>>;>>;>;>;;>>;>;>;>;>;>>;>;>>>;>;>>;>>;>;>>>;>>>>;>>>;>>>;>;>>>;>;>>>>>;>>>;>>>>>>>;>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>,>>>>>>>>,>>>>>,>>>,>>>,>>>>,>>>,>>>>>,>>,>,>>>>>,>>,>>,>>,>,>,>,>>>,>,>,>,>,>,>,>,>>,>,,,>,,>,>,>>,>,,>,>>,>,,>,,,>,,,>,,>,,>,,,,,,,>,>,>,,,,,,,,,,,>,,,>,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,',,,',,,,',,,',',,,',',,',,,,,,,>>;-&&=-=*=**%@+++++...........$;'''''''''''''''''''>&%%%=;,,'''''''',;-;,,''''''''''''''''''''''''''''''-#...........++...+$*==;;>>->,,,''','','''''''''''''''''''''''''''''''''''''''''''''''", -">;>;;;>;>>;>>;>;>;>;>;>>>;>;>;;>;>;;>;>;>>;>>;;>;>>;>>;>;;>>;>;;>>>;;>;>>>>>;;>>;>;>>;>>;>;>>>>;>>>>>>;>>>>>;>>>;>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>,>>>>>,>>>>>>>,>>>>>>,>,>>>,>>>,>>>,>>>,>>,>,>,>>,>>>,>,,>>,>,>,>,>,>>,>>,>,,>,>,>,>,>,>,>,>,,>,,>>,>,>,>,>,,>,>,>,,,,>,,>,>,,>,,,>,,,,,>,>,>,,,,,,,>,>,,>,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,',,,,,,,,','',,,>>-&*---==*&%@+++@+++.........+&>''''''''''',,'',;,,;&%%*>>'''''''''';=*;,,''''''''''''''''''''''''''''''>%+........+++++....#&=--;>>>,,',''''''''','''''''''''''''''''''''''''''''''''''''''''", -";>;>>>;>;>;;>;>>;>>;>;>;;>;>;>>;>;>>;>;>;>;>;>>;>;>>;;>>>;>;>>>>;;>>>>>;;>;>>>;>;>>>;>;>>>>;>;>>>;>;>>>;>>;>>;>>>;>;>>>>>>;>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>,>>>>>,>>>,>>>,>>>,>>,>>,>>>>,>>,>,>>>,>>,>>>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,,>,,,>,,>,>,,>,,,>,,>>,,>>,>,,,,,,,>,>,>,,,,,,,,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,',,',,,,,',,',,,,',',',',,,',',',,',,,',,,;**-;-==*&$@+++@@@@+++.......#=''''''''''',>>,',-->-&%&=>,'''''''''>=&*>,,'''''''''''''''''''''''''''''',*@........++++......@%*-;>,,>,,''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;;>;>;>>;>;;>;>;>>;>>;>;>;>;>>;;>;>;>;>;>;;>;>;;>>;;;>;>>;;;>>>;;>;>>>>;>;>>>>;>;>>>;>>>>>>;>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>,>>>>>>>>>,>,>>>,>>>>>>>,>,>>>,>>>,>>>,>>,>>,>>,>,>>,>,>>,,>>,>>,,>,>>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,,>,,>,,,>,,,>,,,,>,>,>,>,,,,,,>,,>,>,,>,>,,,,>,,,>,,,>,,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,',,'',,',>-*;;;-=*%#+++.++###@++.......$;'''''''''',>;>>',-*--&%&=;,'''''''''-&%*;,>,'''''',,,,'''''''''''''''''''';$......++@@+++......+$*-;,,,,,,'''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;;>>;>>;>;>;>>;>;>;>;;>>;>;>>;;>>>;>;>;>;>;>>>;>>;>;>>>;>;>>>>;;>>;>;>;;>>;>>;>;>>>>;>>>;>;>>>;>>>>;>>;>;>>>;>;>>>>>>;>>>>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>>,>>>>>>,>>>,>>>,>>,>>,>>>,>>>>,>>>,>>,>,>,>>>>>,,,>,>>>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>>,,>,,,>,,,,>,,>,>,,,>,,>,>,,,>,,,,,,,,,,>,>,,,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,',',,',',,,,,,',,',,,',',',,,,',,',,,;=;>;-=*%@@+++.+@#$$#@++.....+&,'''''','''>;;>,,,;**=&&&*>>,,,,'''',*&&&>,>;,''',,,>,,''''''''''''''''''',>&+.....++@@@@+++......#*->,,,,,,'','''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>;>;>;>;>;>;>;>;>>;>;>>;;>>;;>;>;>;>;>;>;>;;>;>;>;>;>>;;>>>;>;>>;>>>;>>;>;>>;;>>>;>>>>>;>>>;>;>>>>>>>>;>>>>>;>>>>>>;>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>>>>>>,>>,>,>>>>>>>,>,>>>,>>>,>>>,>>,>>,>>,>,>,>,>,>>>,>>>,>,>,>>>,>>,,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>>,,>>,>,>,>,,>,>,,,,,,>,>,,>,>,>,>,,,,,>,>,,>,>,,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,,,,,,,,,',,',,,,,',,,,,,,,',','',',>;;;;;-*$@@++..++@$%%$#@++....@=,''''',,,,,>>>>,,,>=&*&&&*--=***;''',*&&=>,;--;>>>>,,,''',','''''''''''''''>*@....++@@@@@@++.......#*;>,,,,,,''''','''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>;>;>;>;>;>;;>;>;;>>;;>>;>>>;>;>;>;;>>>;>;>;>;>;>>>;>;>>;>;>>;>>>;>>>;>>>;>>;>;>;>>>;>>>>>;>;>>;>>>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>,>>>>>>>>>>,>>,>>>>,>>>,>>>,>>>,>>,>,>>>,>>>>,>>,,>>,,>>,>,>,>,>,,>>>>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,,,,>,,,>,,,>,,>,,>,>,>,>,,,>,,,,,,,,,>,>,,,,,,,,,,,,,>,>,,>,,,>,,>,,,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,',,,,,,,,,,,,',,',,,,,,,',',,,',',',,,,',',',,;>>>;-*#@+++.+.+#%%%%$#@++....$;''',>>>>',;;-;;;;;>;*&&&&&**&&&&*,'',;**;'';**-;>,,,>>>,,,,,,,'''''''''''',,;#....++@##@#$$#++......#=;,,',,,'''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>;>;>>;>;>>>;>;>>;>;>>;>;;;>;>;>;>>;;;>;>;>;>>>;;>;>>;>;>>;>>>;;>>;>>;>;>>;>>>>>>;>;>>;>>>>>>>>>>>;>>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>,>>>>>>,>>>,>>>,>>>,>>>>>>>>,>>>,>,>>,>>>,>>>,>,>,>,>,>>>,,,>,>,>,>,>,>,>,>,>,,>,,>>,>,>,>,>,>,>,>,,>,,>,,>,,,,>,,,,>,,,>,>,>,>,,,,,>,,>,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,',',,,,,,',,',,,,,',,,,,,,',,,',',''>>,>;-*$@+++++@#$%&&%%$##@+....&;,''=**=>,>********=;-=*&*&&*&**&*>''',>>,''>=**-;;;===;>>>>>>;;;;;>'''''''',;%+...+@@##@#%&&%#@+....+$=>,,',,,''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;>;>>;>;;;>>;>;>;>;;>;>>>;>;>>;>;>>>>;>>;>;;>>;>>;;>>>;>>;;>>>>;>;>>>>;>>;>;>;>>>>;>>>;>>;>;>;>>>>>;>>>;>>>>>>>>;>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>,>>>>>>>>>>>>>,>>>,>>,>>>,>>>,>>>,>,>>,>,,>,>>,>,>>>,>>,,>>,>,>>>,>,>>,>,,>>>>>,>,>,>,>,>,>,>,>,,>>,,,>,>,,>,>,,,>,,>,>,,>,,>,>,,>,>,>,>,,,,,,,,>,>,,,>,,,,,,,,>,,,>,,,,,,,,,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,',,',,,,,,,,,',,',',',,,',,,',',,,,>>;*%@+++@#$%%&&&%%%%$@@+...+*,'',=**=,,;**&******->;=*********-''''>>-;,'>=***==**=;,>>>>-=******-;''''',,>&+...++#####%***&%##+...@%=>,,,>,,'''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>>;>;>>;>;>;>>>;;>;>;>;>>;>>;;>;>;>;>;>;;;>;>;>>>;>>;>;>>;;>;>>>>;>;>>>>;;>>>>>>>;>>;>;>>;>>>>>>>>>>;>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>,>>>>>,>>,>>>>>>>>>>,>>>,>>>,>>>>>,>>,>>>,>>,>>,>,>,>>>,>,>,>,>>>,>,>,>>,,,,>,>,>,>,>,>,>,>,>>,,,>>,>,,>,>,,>>,,>,>,,>,>,,,,>,,>,,,,,>,>,>,>,,,,,>,,,,,>,,>,,,,>,,,>,,,,,,>,,,,,>,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,,,,,,,',',,',,,',,,,,,',,,,',','',,,>>=&#@+@#$%%&&=;-&&%$$#@+...#=>,',=**=,,;***->;***-,,;-*****--;,''''>==;''>-*******->>>>>-**********-,''''>>=@...+@#####&-;-=*&%%#+.+#&;,,',>,,''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;;>>;>;;>;>;>;>;>>;>;>>;>;>;>>;>>;>;>;>;>>>;>;>;;>;>;>;>>;>>>;>;>;>>>;>;>>;>;>;>;>>>>>>>>>>>;>;>>;>>>>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>,>>>,>>>,>,>>>,>>>,>>,>>>,>>>,>>,>>,>>,>>,,,>,>>,>,>>>>,>,>,>,>,>,>,>,>,,>>>,,,>,>,>,>,,,,>,,>,>,,,>,>,,>,,,>,>,,,,,,,,,>,>,,,>,>,,,,,,>,,,,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,',,,,',,',,',',,,,,,,,',,,,',,',,,,',,',',,,,,,-*%##$$%&&*->,>;&%%%##@++..$;,'',-**-,,;=*=->>===-,'>;=**=,'''''''>-==,'',-=**=*==;,>;;;==*==---==*=;,,',,>-#...+@####$&-;>>;-*&%$#+@$*-,,,>>','''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>;;>;>>;>;>;>;>;>;>>;;>;>;>;;>;>;>>;>;>;>;>;>;>>;>>;>>;>;>;>;>>;>>;>>;>>;>>>;>>>>;>;>;>;>;>>>>>>>>;>;>>;>>>;>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>,>>,>>>>>>,>>>>,>>>,>>>>>,>>>,>>>,>>,>>>,>>,>,>,>>,>>,>>>>,>,>,>,>,,>,>,>,>,>,>,>,>,,>,,,,>>,>,>,,,>,>>,>,,>,,>,,>,,>,,>,>,,>,>,>,>,>,,,,>,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',',,',,,,',,',',,',,'',,',,>=*%%%%&&*;,,,,>;*&%%$#@++.+%;>'',-==-,>;===-;-===;,',;-===,'''''''>==-,''';====-->,,>;--===->,,,-===;,,,,,>;$+.++@####$&-;>,,,>;=&%$##%*;,,;;,''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;;>>>;>;>;>;>;>;>;>;;>>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>>;>>;>>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>>>>>;>>;>>>>>>;>>;>>>>>>>;>>>>;>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>>,>>>,>>>>>>>>>>,>,>>>>,>>>,>>>>,>,>>>,>>,>,>>>,>,>,>,>>>,>,>>,>,>,,>>,>,>>,>>>,>,>,>,>,>,>,>,>,>,>>>,,>,,>,>,>,,,,>,>,,>,>,,>,,,>,,,>,,,,,,,,,,,>,,,>,,>,,,>,,>,,,,>,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,',,,,,,,,,,,',,,',,,,,,,,,,,',',,,,,,,',,',,',,',>;=**&&&=;,,,,,,>;&&%%$#@++.+&;,,',-==-,>;-===---=-,''>>-==-,'''''',;-=;''',;==-->,,''>---===>''',;-=-;>>,,>>>%+.++@##$#$&-;>>,,',>;*&&%%&=;>;;>,'''''''''''''''''''''''''''''''''''''''''''''''", -";>;>>;>;;>>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;;>;>;>>;>;>;>;>>;>>;>>;>>;>>;>;>>;>>;>>>;>;>;>;>>>>>;>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>,>>>>>>,>>>,>>>,>,>>>>>,>,>>,>>,>,>>>>>>,>,>>>,>>,>>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>>,>,,,>,>>,,,>,>,,,>,,>,,,>,,,>,>,>,>,>,,,>,,,,,,,,,,,,,,>,,,,,>,,>,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,',,,',,,',,',,',',,,,',',',,,',,',',,,,>;-*&**;,,,,',',,;*&%%%##++.@*;,,'>;--;'>;-------;>''',;----,''''',>;---,''';---;>,''',;=----,'',>--;;;;>,',>>&@.+@@$#$#%*-;>>,,,'''>-*&&&&*--->''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>;>;;>>;>;>;>;>>;>;>;>;>;>;>>;>;>;>;>;>;>;>>;>>;>;>>;>>;>;;>;>>;>>;>>>;>>>;>>>>>;>;>>>>>>>>>;>>>>>>>;>>>;>>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>>,>>>>,>>>,>>>>>,>,>>>>,>>>,>>>,>,,>,>,>,,>,>,>>,>,>,>>,,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>>,>,,,>,>,,,>,>,,,>,>,,>,>,,,,,,,,,>,,,>,>,,>,,>,,>,,,,,>,,,,,,,,,,,,,,>,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,',,',,,',,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,>,>>--*=;>,,,',,,,,>>*&&%%#@@+.#*>>,,>---;',;---;>>,'''''>;----''''',>;---;''',;---;>>'''';----;>,,,>>;;;;;;,,,>>*@.++##$#$$*-;>>,,',''',>-**&&&&-,''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>>;>>;>;>;>;>>;>;>;>;>;>;>;;>;>;>;>;>>;>>;>;>;>;>;>;>;>>>>;>>;>>;>>;;>>;>>>;>;>>>>>>;>;>;>>>>>;>>;>>>>>>>>>>>;>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>,>>,>>,>>>,>>>>,>>>>,>>>,>,>>>>,>,>>,>,>>,>>>>>,>>>>>>>,>>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>,,,>,>,>,>>,>,,,,,,>>,,>,>>,,,,>,>,,>,,>,,>,>,>,,>,,>,,,,,>,,,,,>,,,>,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,',,',,',,',',,',,,',',',,','',',,>>;;--;>,,',',',',,,>=&%&%$@@++#->>,,;;--;',>;-;>''''''''>;;;-;,''''>;;;;-;,''';-;-;;>,''',;-;-;;>>>;>;;;;;>'',>>=#.+@##$$$%*-;>>,,,'''''',>-=**=>,''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>;>;;>;>>>;>;;>;>;>;>>;>>;>>;>;>;>;>;>;>;>;>;>>>;>>>;>;>;>>;>>;>>;>>>;>;>;>>>>>;>;>;>>>>>>;>;>>>>>>;>;>>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>,>>>,>,>>>,>>>>>>,>>>>,>>>>,>>>,>,>,>,,>,,>,>,>>>,>,>,>,>,>,>>>,>,>,>,>,>,>,>>,,>,>,>,,>,>,>>>,,,>,,,,,>>,>,,,>,,>,,>,,,,,,>,,,,,,,>,,,,,>,,,,,,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,',,,,,,,',,,',,,,,,,',,,,',,,>>;;;>,',',,,',',,,,>=&&%%$#@++$->>,>;-;;>''>;;;>''''''',>;;;;>'''',,;-;;;;''',;;;;;;>'''''>;;;;;;;;;;;;;;;,'',>>-#++@#$$#$%=;;>>,,,','''''',,>>>''''''''''''''''''''''''''''''''''''''''''''''''''", -">;;>;>;>>;>;>;>;>>;>;>;>;;>;;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>>;>>;>>>>;>>;>;>>>>>>>;>;>>>>>>>;>>;>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>,>>>>,>>,>>>,>>>>>>>>>,>>>,>,>,>>,>,>>,>,>>,>,>>,>>>>,>>>>,>>,,>,>>>,>,>,>>,,>,>,>,>,>,>,>,,,>,>,,,>,>,,>,,,,>,>,>>,>,,,,,>,,,>,,,,,>,>,,,,>,>,>,,,>,,>,,,>,,>,,>,,,,,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,',,',,,,,',',,,,',',,,,',,,',',',,,',',,,',,,,,,',',,'',,,,',,,>-&&&%$#@++%;>>,,>;;;;'',;;>>''''''',;;;;;>''''',>;;;;;,'''>;;;;;,'''''',>;;;;;>;;;;;;>,'',>>-#++@##$$$&=-;>>,,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>;>;>;>;>;>>;>;>;>;>>;>>;>;>;;>>;>>;>;>;>>;>;>>;>;>>;>;>>;>;>>;>>;>>;;>>>>>;>>;>;>;>>;>>>;>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>,>>,>>,>>>,>>>>>>>,>>>>,>>>>,>>>>,>>,,>>>,,>>,>>>,>,,>>,>,>,,>>,>,>,>,>,>,>,>>>,,>,>>,,>,>,>,>,>,,,,>,,>,>,>,,>,,,>,>,,,,>,>,,,,,,>,,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,',',,,,,,,,,,,,',',,,',,,,,,',',,,,',,,',,,',,,',,,'',',,,,,;*%&%$#@@@%;>>,',,,,''',,,,,''''''',>>;>>''''''',>;>>>''''>;>>>>'''''''',,>>>>;>>>;>>,''',>>;$++##$$$%&-;;>,,,,,',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>>;>;>;>;>;;>>;>>;>;>;>;>>;>>;;>>;>;>;>;;>;>;>;>>;>;>>;>;>>;>>;>;>;>>>;;>;>>;>>>;>>>>>>;>>>>>>;>;>>;>>>>;>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>,>>,>>,>>>>>>,>>>,>>>,>,>,>>,>,>>,>,>>,>,>,>,>>,,>>>,>,>,>,>>,>,>>,>>,,>,>,>,>,>,>,>,,,,>,>,,>>,>,,,>,>,,>>,,>,,>,,,,>,,>,>,,>,>,,,,,>,>,>,,>,,>,,>,>,,>,,,,,>,>,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,',,,,,,,,',,',',,,,,,,,',,,',',,,,,',',',',,,',',',',',,,,',,',,>>*&&&%##@@&;>>,'''''''''''''',,,,,,,>>>>,'''''''',,>>,''''',>>,''''''''''',,>>>>>>>,,'''',>>;$+@##$$$%*-;;>>,,'''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>>;>;>;>>;>;>;>;>;>;>;;>;>>;;>;>>;>;>>>;>>;>>;>>;>;>>;>>;>;>>>>>>;>>>>>>>>;>>>;>;>;>>>;>;>>>>>;>>>>>>>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>,>>>,>>>>>>>,>>>,>>,>>,>>>,>>>,>>>,,>>,>,>>>,,>>,>,>>,>>,>,>,>,>,>,>,>,>>,>,>,,,>,>,>,,,>,,,>,,>,,>>,>,,>,,,>,,,,,>,>,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,,,,,,,',',',,,,',,,,,',',,',,,,,',',,,,,',,','',,',,,,,>=&&&%$@@@&;>>''''''''''''','',,,,',,,,'''''''''''','''''''''''''''''''''''',',',''''''''>>>;$+@##$$%%*-;;>,,,,','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;;>;>;>;>;;>;>;>;>;>;>>;>;>;>>;>;>;>>;;>;>;>;>;>;>>;>;>;>>>>;;>;;>>;>;>;>;>>;>>>>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>,>>,>>,>>>,>,>>>,>>>,>,>,>>,>>>,>>,>>,>>,>,>>,>>>>,>>>,,,>>,>,>,>,>,>,,>,>,>,>,>,>,>,,>,,>,>>,>,>,,>>,,>>,,>,>,,,,,,>,,>,,,>,>,,,,,>,>,>,,>,>,>,>,,>,,,>,,,,,,,,>,,,,>,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,',,',,,,,',,,,,',,',,',,,,,,',',,',,',,,',,,','',,,,','',,',',,,',',',,,>-*&&%$#@@&;>>,''''''''''''',,,,>,,,,'''''''''''''''''''''''''''''''''''''''''''''''''''',;>;%@@#$$%&&=;;>>>,,'','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>>;>>;>;>>>;>;>;>;>>;>;>;>;>;;>;>;>;;>>;>>;>>;>>;>;>;>>>;>;>>;>>>>;>>>>>>>>>>;>;>;>;>>;>>;>>;>>;>>>>>>>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>,>>>>>>>>>,>>>>>>,>>>>>,>>>,>>>>>>>>,>,>>>,>>,>>,>,>,>,>,,>>,,>>>>,>,>,>>,>,>,>>,>,>,>,>,>,,>,>,>,,>,,,,>,>,,,>,,>,>,,,>,>,>,,>,,>,>,,,,>,>,,,,,,>,,,,,,,,,,,>,,,,,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',',,,,,,,,,,,,,',,,,,,,',,',,,',',,,,,',',,,',',,,'',,',,',,,>;**&&%##@&;;>,''''''''''',,',,>>>>,,,'''''''''''''''''''''''''''''''''''''''''''''''''''>>;;$@##$$&%&-;;>>,,,,''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>;>;>;>;>;;;>;>>>;>;>;>;>>;>;>>;>;>;>>;;>;>;>;>;>>;>;>>;;>>>;>>>;>;>;>;>;>;>;>>>>>>>>>;>>>>>>>>>>>;>>>;>>>>>>>;>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>,>>>>>>,>,>>>>>>>,>>>>>>,>>>,>>>>,>,>,>>,>>,>>>,>>,>>>,>>,>>>,>,>>,,>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>>,>,>>,>,,>>,,>,,,>,>,,,>,,>,,>,,,>,>,,,,,>,>,,,,,>,,,>,,>,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,',,,,,,,,,,,,,,,',',,',,',',,',',',,,,,,',,,,,',',',,',',,,',',,,',,',',,,>>***&%$##&;>>>''''''''',,',,,,>>>>,,,,''''''''''''''''''''''''''''''''''''''''''''''''''>>>;%@##%%&&*-;;>>,,',,,'',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>;>;>;>;>;>>>;>;;>>;>;>;>;;>>;>;>;>>;>;>>;>>>;>>;>;>>>;>>;>;>>>;>>;>>>;>>>>>>>;>;>;>;>>>>;>>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>,>>>,>>,>>>,>>>,>,>>>>>>,>>,>,>,>>,>>,,>>,>>,>>,>>>,>>,>>,>,>,>,,>,>,>,>,>,>,>,>,>,,>,,,>,>,>,,>,,,>,,>,>,,>,>,,>,,,>,,>,,,,,>,>,,,,>,>,,,>,,,,,,,>,,,,,,,,,,,,,>,,>,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,,,,,,,,,,,,,,,,,',',,',',',,',,,,',,,'',,',,',',',',',,>>-&**%$##&;;>>'''''',',',,,,,,>>>;>>,,,','''''''''''',,,,,''''''''''''''''''''''''''''',>;;;%##$%&&&=;;>>>,,,''','',','''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>>;>;>;>;>;>;>;>>;;>;>;>;>>;;>;>;>;>;>;>;>;;>>;>>;>>;;>;>>>>;>;>>;>>;>>>>;>;>;>>>>>>>>>;>>>;>>>>>;>>>>>>>>>;>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>,>>>,>>>>>,>,>,>>,>>>>>,>>>,>>>,>,>,>,>>,,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,,>,>,>>,>,,,>,,>,>,,>,>,>,>,,,>,,>,,,>,,>,>,,,,,>,,,,,,>,,,,>,,>,,,,>,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,',,,,',,,,',,,',,',',',,',',',',',,,,',,,',,',,',',,'',,,',',',,,',,',,',,>;***&%##&;;>>,'''',',,,,,,,,,>;;;;>>>>,,>,,,'''',,,,,,>,,,,''''''''''''''''''''''''''',>>;;%##%&&&*-;;>>,,,,,,','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;>;>;>;;>>;>;>>;>;>>;>;>;>;>>;>;>>;>;>;>;>;>>>>;>;>;>>;>>;>>;>;>>>>>>>;>;>;>;>>>>>>>>;>>>>>>;>>;>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>,>>,>>>>,>>>>,>>>>>>,>>,>>,>,>>>>,>>>,>,>>>>>>,>>>,>,>>>,>>>,>>,>>>,>,>>>,>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,>,,>,,,>,,>,,,,>,>,,>,,,,,>,>,,,>,>,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,,',,,',,,,',,',,',',',',',,,,>;=***%$$&-;;>,,,',,,,,,,,,,>,>>;;;;;>>>>>>>>,,,,',,>>>>;>>>,,,,,,,,',',',',,',','''',,>>;>-%#$&&*&*->>>>>,,,'',',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>>;>>;>;>;>>;>;>>;;>;>;>;>>;>;>;;>;>;>;>>;>;>>;>;>;>;>>>>;>>;>>;>>>;>;>;>;>>>>>;>>>>;>;>>>>;>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>,>>>>,>>>>>>>>,>>>,>>>>>,>,>,>>,>>,>>,>,>,>,>,>>,,>>>,>,>,>>>,>>>,,,>>,>,>,>,>,>,>,>,>,>,,,>,>,,>,>,,>,>,,>,,>>,,>,,>,>,,,>,,,>,>,,,,,>,,,,,>,,,,,>,>,,>,>,,>,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,',,,,,,',,',,',,,',,',',',',',',,',',,',,',,,',,','',',,',',,',,',,',,,,>>-***&%$&-;;>,,,,,',,,,,,,,,>>>;----;;;;;;;;>,,,,,,>>;;;;>>,,,,,,,,,,,,,,,',,,',,,,,',,>;;-%$&&**&-;>>>,,,,',,',',''',''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>>;>;>>;>;>>>;>>;>;>>>;;>;>>;>>;>;>>>;>>>>>>>;>>>>>;>>>>>;>>>>>>>>>>>>;>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>>,>>,>>>,>,>>>>>>>>,>>,>>,>>>>>,>>>,>>>,,>,>>,>,>,>,,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,,>,>,,,>,,>,>,,>,,>,>,,>,,>,>,,,>,>,,,,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,',,,,,,,,,,,,,,,,,',,,',,,,,,,,,,',,,,,,',,',',',,',,,,,,',',,,',,',',',,,,,>>;**=*&$&=;;;>,,,,,,,,,,,,,,,>>;-----;-;;-;-;>>,,,>>;;--;;>>>>,,,,,,,,',,,,,,,,,,,,,,,>>;>-&%&****;;>>>>,,,,'',',',,''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;;>;>;>;>;>;>>;>;;>>;>;>>;;>>>>;>>;>>>>;>;>>>;>;>;>>;>;>>>>>;>>>>;>;>>>;>>;>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>,>>,>>>>,>>,>>>,>>>>>,>>>>>,>,>,>,>>,>>,>>,>,,>>,,>>,,>>>>>,>,>,>,>>,>,>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,,>,,>,>,,>>,,>,,,,>,,>,,,>,,,>,,,,>,,,,,>,>,,,>,,,>,,>,,>,,>,,,,,,,,>,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,',,',',,,,,,,,',',',',,,,',',,,',,,,,',,','',',',,'',,',',,',',,,,>>>-****&&=;;>>,,,,,,,,,,>,>,,>>>;-===-=--=-=-;>>,,>;---=-->>>>>>>,>,,,,,,,,,,,,,,,,,,,>;;;=&****&=>>>>,>,,,,,',',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>>>;>;>;>;>>>;>;>>;>;>;>;>;>;>>;>;>;>;>;>;>>;>>;>>;>;>>>;>;>>;>;>;;>>>>>;>>>>>>;>>>>>>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>,>>,>,>>>>>>>>>,>>,>>,>>>>>,>>,>,>>>,,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,>,>,>,,,>,,,,>,,>,>,,>,,>,,,>,,,,>,,,>,>,,,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,',,,,,,,,,,',,,',,,,,,,,',',,,,,',,,',',,',,,,,',,,',,',',,',',',',,,,>>;**=&*&=-;;>>,,>,>,>>,,,>,>,>;;-===========-;>>>>;-====-;;>>>>>>>>>,>,,,>,,,,,,,,,,>>>;>-******;;>>>,,,',',,',',',',''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;;;>;>;>>>;;;>;>;;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>>;;>>>;>;>>>;>>>>>>>>;>;>>>;>;>;>>;>;>>>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>,>,>>,>>>>>>>>>>>>,>,>,>,>>>,>>,>>,>,>>,>>>,>,>,>>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,,>,,,>,>,>,>>,,>,,,,>,,>,,>,,,>,>,,,>,,,,>,,,>,>,,,,>,>,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,',,,,',,,,',',',,,,,',',,',',,,',,','',,',',',,,',',',',',,,,,,>>>-*****=-;;;>>,>,,>,,>,,,>,>,>;--*********==-;>;;;==***=-;>>>>>>>>>>>>>,>>>>>,>,>>,>;;;;-*===*->>>,>,,,,,',',,',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>>;>;>;;>>>>;>;>>;>;>;>;>;>;>;>;;>>>;>;>;>>;>;>>>;;>;>>>;>>;;>;;>;>>;>>;>>>>>>>>>>>>;>>>>;>>>>;>>>;>>;>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>>>>>>,>>,>>>>>>>>,>,>,>,>,>,>>>>>>,>>,>>,>>>,>>>,>>,,>>,>>>,>,>,>,>,>,>,>>,>>,>,>,>,>,>,>,>,,,>,,>,,>,,>,>,,>,>,>,,>,,,>,,>,>,,,,>,,>,>,,,,,>,,,>,,,>,,,,,,>,,,,,>,,>,,>,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,',,,,,,',,,,,',,,,,,,',',,,,',,',,',,',,,,,',,',,,',',,,',,,',',,,,,,>>;*****=--;;>>>>>,>,>,>,>,,>>>>;-=*********=-;;>--=****=--;;;;;;>>>>,>>>>,>,>>,>,>>>>;>;-===**;>>,>,,,,,,,,,',',,'',''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";;;>;>>;>>;;;;>>;>;>;>>>;>>;>>;>;>>;>;>;>>>;>;>>;;>>>;>>;;>>;>>>>>>>;>>>;>>;>;>;>;>;>>>>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>>>>>>>>>>>>,>,>>>>,>>,>>,>>,>,>>,>>>,>>,,>>,>>,>,>,>,>>,>,>,>>,>,>,>,>,>,>>,>,>,>,>,>,>,,>,>,,,>,,>,>,,>,,,>,>>,,>,,,,>,>,,,>,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,',,,,',',,,,',',,,',',',,,,',',,',,',,',,','',,',,'',',,',','',',,',,,>,,>>-****=;-;;;>>,>>>,>,>,,>,>>>>;;=***&&*&&**==-;-=*&&**=--;-;;;;;>>>>>>>>>>>>>>>,>>>;;>;-=-==->>>,,>,,,,''',','',,''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>;;>;;>>>;>;>;>;>;;;>;>;>;>;>;;>;>;>;>;>;>>;>>;>;>;>>>;>>;>;>;;>>>;>>>>>;>>>>>>>;>>;>>>>;>>>;>>>>>;>>>>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>,>>,>>>>>>>,>>>>>>>>,>>,>,>,>,>>>>>,>,>>,>>,>>,>>>>,>>,>,>,>>>,>,>,>>>,>,>,,>,>,>,,>,>,>,>,>,>,>,,>,>,>,>,>,>,,>,>,>,>,,>,>,,,>,,,,,>,,>,>,,,,,>,,,>,,,>,,,,>,,>,,,,,>,,,,,,,>,,,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,',,,,,,,,,,',,,,,,',,,,,,',,,,,,,,',,,,,,,',,',,,',,,,',',',,,',',,',,,',',,,,,,>,,>;=*=*=---;;>>>,>,>,>,>>,>,,>>>;-=**&&&&&&**=-==**&&&**=--;;-;;;;;;;>>>>>>>>>>>>>>>;>;;-=-==;>>,>,,,,',,,,',,,,''',''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";;>;>>;>>>;>;>;>>;>;>>>;>;>;>;>;>>>;>;>;>;>>;>;>;>;>>>;>;>>;>>>;>>>;;>>>;>;>>>;>;>;>>;>>>>;>>>>>>>>>>>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>,>,>>,>>>>>>>>>>>,>,>>>>>,>>>>>,>>,>,>>,>,>>>,>,>>>,>,>,>,>>>>,>>>,>>,>,>,>,>,>,>,,>,>,,>,,>,,>,>,,,>,,,>,>,,,>,>,>,>,,,>,,,,>,>,,,>,,,>,,,,>,,,,,,,>,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,',,,,,,',,,,,,',,,,,',',',',,,',',',,',,',,',',,',,,',',,,',','',,,',',,,,,,,>>-**==----;;>>>>>>>,>,>,,>>>>>;-=**&&&&&&***==*&&&&&&==-------;;;;;>;>>>>>>>>>>>;>;;>;--=*;>>,,,,,,,,',',,''',,,'','''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;;;>;>;>;>>;>;>;>;>;>;>;>;;;>;>;>;>>;>>;>>;>;>;>>>;>>;;>>>;>>>>;>>>>>;>>;>>>>>>>>;>>>>;>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>,>>,>>>>,>>>>>>>>>>>,>,>,>,>>>>>,>>,>>,>,>>,>>,>>,>>>,,>,>>,,>>,>,>,>,,>,>,>,>,,,>,>,>,>,>,>,>,>,>,,>,>,>,,,>>,,>,>,,,>,>,,,,>,,,>,,>,>,,,,,>,,,>,,,>,,,,,>,>,,,>,,,,,,,,,,,,,>,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,',,,',,',,,,',',,,,,,,,',,,',,,',,',,',,,,',,'',,',',',,,',,''',,,',,,,,,,,;***=--;--;;>>>>,>>,>,>>,,>>>>;-=**&&&&&&&****&&&&&**==----;--;;;;;;;>;>>>>>>>;>;>>;;--*->>>>,,,,',,,','',,,''','''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>>>;>;>;>;;>;>;>;>;>>;>>;>>>;>;>;>>;>;>;>;>;>;>;>;>>>;>>;;>>;>;>>;>;>>>>>>;>>>;>>>>>;>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>>>>>>>>>>,>>,>,>>,>>>>>>>>,>,>>,>>>,>,>>,>>,>>>,>,,>>>>,>>>>,>,>,>>>>,>,>,>,>>>,>,>,>,>,>,>,>,,>,>,>,>,>,>,,,>,>,>,>,>,,>,>,,>,,>,,,,,>,>,,,>,,,>,,,,>,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,',,,,,,,,,,,',,,,,,',',',,,',,,',,,',,',,',',,',,,',,,',,'',',',,,',,,',,,,,,>>;***-----;;>>>>>,>,>,,>>,>>>>>;-**&&&%&&&&&&&&&%&&&*===------;;;;;>;;>;>;>>;>;>;;>;;-==;>,,>,,,,,',',,,','',,',','''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>>;>;>;>>>;>>>;>>>;>>;>>>>>>>;>>>>;>>>;>;;>>>;>>>;>;>>>;>>;>>>>>>>>>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>,>,>,>>>>>,>>>,>>>>,>>,>>,>,>>>>>,,>>,,>,>>>,>,,,>>,>,>,>,,>,>,>,>,>,>,,>,>,,>,>,>,,>,,>>,,>,,>,,>,,>,,,>,,>,>,>,>,,,,,>,,,>,,,>,,,>,,,>,>,,>,,,,,>,,>,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,',,,,,',,',,',,,,,',',,,,,,,',,,,',,',,',,,',,,',,'',,'',,',,,',',,'',',',,',,,,,>>=**--;--;;;;>>>>>>>>,>,>,>>>;;-=**&&&&&&&&&&&%&&&**====-------;;;;;;;>;>>;>;;;;>;>;-=;>>>>,,,,,',,,',',',,'',',''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>>;>>;;>;>;>>;;>>;>;>;;>;>;>;>;>>>;>>>>>;>>>;>>>>>>>>>>>>>;>>;>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>,>>>>>>>,>>,>>,>>>>>>>>>,>,>>>>,>>,>,>>>>>,>>>,>,,>,>>,>>>,>,,>,>>>,,>>>,>>,>,>,>,>,>,>,>,>,,>>,>,,>,>,,>,,,>,,>,,>,,>,,>,,,>,,,,,>,,>,>,,,>,,,>,,,,,,,>,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,',,,,,,,',',',,,',,',,',,,',',',',',,,',,',','',,,',',,,',,',,'',,,>>;=*=----======--;;>>>>>>>>>>>;;-**&&%&&&&&&%&%&&&***=-==----;-;;;;;;-==****===-;>;-=->>,,,>,,,,',',',',''',','','''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;;>;>;>>;>>;>;>;;>>;>>;>;>;>;>;>;>;>;>;>;>>>>;>;>>>;>>;>>>>;>>>>>>>>;>>;>;>>>;>>>>>>;>;>>;>;>>>>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>,>>>>>>>>>>,>,>,>,>>>>,>,>>,>>,>>,>,>>,>>,>>>,>>,>,>,>>>>,>,>,>>,>,>,,>,>,>,>,>,>,>,>,>,,,>,>,,>,>,,>>,>,>,,>,>,,>,,>>,,,>,>,,,,,,,,>,,,>,,,>,>,,,,,,>,,>,,,,,>,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,',,,,,',,',',,,,',',',,,,,,,,',,,,',,',',,,,,,',,',',,',,',,,''',','',,,',',,',',,,>-****&&%&&&***====--;;>>>>>>;;-=**&&%&%&%&%&%&&&***===-------==*&&&&&&&&&%%%&&*=-=-;>,>>,,,,,,,',',',',',',','',''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>>>;>;>;>>>;>;;>;>;>;>>>;>;>;>>;>;;>;>>>>>>>>;>>>;>>;>>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>,>>>,>>>,>,>>,>>>>>>>>>>,>>>>>>,>>,>>,>>,>>>,>>,>,>>,>>>,>>,,,>>>,>,>,,>,>>,>,>,>,>,>,>,>,>,>>>,>,>>,>,>,,,>,,>,>,,,>,,,>,,,>,,>,,>,>,>,>,,,>,,,>,,,,,>,>,,,,,,,>,,,,,>,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',',,,,,,,,,,',,,,,,,,,',,,,,,,',',',',,',',,',,,',',',,',,',,',,',,',',,,',,,',',,,'',',',,>>-*&&&%&&&&****====-=-=--;;;>>;;-**&&&&&&&&&&&&&&***===-----**&&%&&&&&*&&&&&%&&**=*--;>,>,,,,,,,,',','',','',',''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;>>;>;>;>;>;>>>;>;>;>;>;>;>;;>;>>>;>>>;>>;>>>>;>>;>>>>>>;>;>;>;>>;>>>;>>>;>>;>;>>;>>>>>;>>>>;>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>,>>>>>>>>>>>,>>>>>>>>,>,>,>,>,>>>,>,>>>,>>,>>,>>>,>>,>>,>,>>,,>>,>>>>,,,>>,>>>,>>,>>,>,>,>,>,>,>,,>,,,>,,,,>,,>,>,,>,,>,>,>,,>,,>,>,>,,,>,,,,,,,,>,,,>,,,,>,,,,,,,>,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,',',,',,,',,',',,,,,,,,',,,,',,,',,',,,',',',',',',',,',',',',',','',',',',,,;-=**&&*=;;>;;--=---=---=-=--;;;;-=**&&&%&%&%&&&&***===-=--*&%%%%&%&&*&***-;>,>>--===--;;,>,,,',,',,',','',',',','''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>>;>;>;>;;>;>;>;>;>;>;>;>>;;>;>>>;>>;>>;>;>;;>>;>;>;>>;>>>;;>;>>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>,>>>>,>>>,>>>>>>>>>>>>,>>>>,>>>,>>,>>,>,>>>,>,>>,>,>>,>,>,,>>>,>,>,,>,>,,,>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,,>,,,>,,>,>,,,,,,,>,>,,>,>,>,,,>,,,>,,,,,>,,,>,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,,,,,,,',',',,,,',,',',,',,',,',,,',,',,',,',',,',,',',,,,',',''',,;;----;,,,,''',,,>;----=--======-;-==*&&&&&&&&&&*&***===-=*&%%%&&&&&&**=;,''''''''',>;----;>,,,,,,,',','',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>;>>;>;>;>;>;>;>;>;;>>;>;>;>>>;>;>;>>>>;>>>>;>;>>;;>>>>>>;>;>;>;>>>>>>;>;>;>;>>;>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>,>,>,>>>,>>>>,>>,>>>,>>>,>,>>>,>,>>>,>>,>>>,>,>,>,>>,>,>>>,>,>,>,>,>,>,>,,>,>,,>,,>,>,>,,>,,>>,,>,,,,>,>,>,>,,,>,,,,,,,>,,,>,,,,>,,,>,,,,,>,,>,,,>,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,',,,,,,,,,,,',,,',,',,',',',',,,,,,,',',',,',,',,,',,',',,',,,',,',,,'','',',',',','',',,>>;;>>,,,,',,,',',,,,>;--=---===*==-==***&&&&&&&&&***===-=&&%&%&%&&&&*=>,'''''''''',',,,>;;-;>>,',',',',','','',,','''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>>;>>;>;>>;>;>;>>;>;>>>;>;>;>;>;;>>;>>>;;;>>;;>>>>>;>>>;>;>;>>>;>>>>;>;>>>>>>>>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>,>,>>>>>,>>,>>>>>>>>>,>>>,>,>>,>>,>>,>,>>>,>,>>>,>,>>,>>,,>,>,>>>,>>,>,>,,>,>,>,>,>,>,,>,>,,>,>,>,>,,,,>,>,>,,>,>,>,,>,,,>,,>,,,>,>,>,,,>,,,>,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,,',,,',,,,,',,,,,,,,,',',',,,,,,',,',,',',,',,',','',,',',',,',,,,',',,',',',',,>,,,,',,,,,',,',,,,,,,,>---=--==****==**&&&&&&&******===*&%&%&&&&&&*=;,,,,''''''',',,,,,,,>;;;>>,,',','','',',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;>;;>>>;>;;>;>;;>;>;>;>>;>>;>>;;>>>>;>>>;;>;>>>;>>;>>>>;>>>>;>>>>>;>>;>>>;>;>>>>>>>;>>>>>;>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>>>,>,>>>>>>>>,>>>,>>>,>,>,>,>>>,>>>>,>>,>>,>>,>>,>>,>,>,>>,>,>,>>>,>,>,,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>>,,>,,,>,,>,,,>,,,>,,,>,,>,,,,,,>,,,>,,,,,,>,,>,,,>,,>,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,,,,,',',',,,,,,',',',,',,,',,,',,,',,',,,',,',',',,''',,',',,',',',,,,,,,,,,,,,,,,,,,,,,,,,>,>;--=-===*&&&*****&&&*&&&***==-*&%&%&&&&&&**;,,,,,,,,'',,,,,,,,,,,,>;;;>,,,',','','''',,',''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;>>;>;>;>>;>;>>;>;>;>;>;>;>;>;>>;;>>;>;>>>>;>;>>;>>;>;>>>;>;>>;>;>>>>>;>>>>>>;>>>;>>>>;>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>,>>,>>>>,>>,>>,>>,>>,>>>,>>,>>,>>,,>,>>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,,>,,>,>,>,,>,,>,>,,>,,,>,,>,>,>,,>,,,>,,,,,,,,,,,,,,,,,>,,>,,>,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',,,,',,',,',,,,',,',,,,,,,',',,,,,',,',,',,,',,,'',',,,'',',,',','',,,'',',',',',',',,,',,,,,,>,,>,>,,,>,>,>,>>;----===**&&&*****&*&*****===*&&&&&&&&&*&=->>,,,,,,,>,,,,,,,,,,,,,,,>>>>,,','','',','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>;>;>;>>;>;>;;>>;;>>;>;>;>;>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>>>>>;>>>>>;>>>>;>>>>>;>>;>>;>>>>;>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>,>,>,>,>,>>>>>,>,>>>>>,>>>>>,>>,,>,>,>,>>,>>,>,>,>,>>,>,>,,>,>,,>,>,>,>,>,,>,,,>,>,,>,,,>,>,>,,>,,,>,,>,,,,>,>,>,,>,,,,,,,,,,>,,>,>,,>,,>,,>,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,,,,,,,,,,,',',',,,,',',,,',,,,',',',',,,,,'',,,',',,',',,',',,,,',',',,,',,',,,,,>>>>>>>>>>>>>>>,,>,,>;-=--===*&&%&&***&*****===-*&%&&&&&*&***->>>>>>>>>>>>>>>>>>>>,>,,,,,>>>,',','','''','','''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;;>;>;>>;;>>;;>;>;>;>;>;>>;;>>;>;>>;>;>>>;>>;>;>>;>>;>;>;>>;>;>>>;>>>>;>;>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>,>>,>>,>>,>>>>>>>>>>>>>>>>>>>,>,>>>>,>,,>>>,>,>>,>>>>>,>>>,>,>>,>>,>,>>,>,>>>>,>,>>,>,>,>,>,,>,>,>,>,>>,>>,>,,>,,>,,>>,,>,,>,>,,,,,>,,,>,>,>,>,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',,',',',',,,,,,,,',,,,,',,,',',,,',,,',''',,,',,',,',',,',',','',',',,',',',,,,>>>>>>;>;;;;>;>>>>>>>>,>>;---===**&%%&*********====&&&&&*&******;>>>>>>>>>>;;;;;;>;>;>>>>,,,,,>,,,'',''',,',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>>>;>>;>;>;>>;>;>>;>;>;>>>;>;>>;>;>>;>;>>>;;>>;>>;>;>>;>>>>>>>;>>>>;>>;>>>>>>;>>;>>;>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>>>>>>>>,>>,>>,>>,>,>,>,>>>>,>,>>>>,>,>>,>,>>,>,,>>,,>>>,>,>,>>,>,>,>>,,,,>,>,,>,>,>,>,>>,>,>,,>,,,>,,,,>,>,>,>,,,>,,,>,,,>,>,>,,>,,,,,,,,,,,>,>,,>,>,>,>,,>,,,,>,,>,,>,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,,',,',,,,',,,',,,,,,,,,,,',',',',,',',,,',',,,,',,,,',,,,,',',',,',,',',,',',',,,,',',,,',,,,,>>>;;;;;;;;;;;;;;;;>>>>>>>;-----==*&&%%&******===-=*&&&&&*&*&***-;>>>>>>;;;;;;;;;;;;;;;;>>>>,,>,,,',''',''',',','''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>>;;>;>;>>;>;;>;>;>;>;>>;;;>;>;>>;>;>>;>;>;>>>;>>>>;>>;>>;>;>;>>>>;>>>;>>>;>>>>>>>>>>>>;>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>,>>,>>>>>,>>>>>>>>>>>>,>>>>,>,>>>>>,>>>>,>,>>>,>>>,,>>>,>,,>>,>,>,>>>>,>,>>,>,>,>,>,,>,>,>,>,>>,,>>>,,,>,,,>,>,>,>,,>,,,>,,,>,,>,>,>,>,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,',,,,,,,',',,,',,,,,,,,,,,,,,,',,',,',',',',',',',,',',,',',,','',',,','',',,,,,,,,,,>>>;;;------------;;;;>>>>>>;---=-==**&%%&****====--*&&&********==-;>>>;;;;---------------;;>>>,,,,,,','''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;;>>;>;>;;>;>>;>;>;>>;>;>>>;>;>;>>;>;>>>;>;>;>>;>;>>;>>;>>;>>>;>;>>;>>>>;>>>;>>;>>;>;>>>>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>,>>>>>>,>,>,>,>,>>>,>>>,>>,>,>>,>,>>>>,,>>,,>>,>,>,>>,>,>>,>,>,,>,>,,>,>,>,>,>,>,,,>,>,>,,>,,,,>>,>,>,>,,>,,,>,>,>,,,>,,>,,,,,,,,,,>,>,>,,,>,,,>,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,',,,,,,',',',',',',,',,,',,,,,',,,,,',',,',,',,',',',,,',',,,,,,,,,,'',,,>>;--=--=-=-=-=-=-----;;;>>>>;-----===*&&%%&*=====--=*&*&*&****====;;;;;;;;----=-=-==-=-------;>>>,,,,,',,''',',',''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;;>;>;>>;>>;>;>;>;;>;>;>;>;>>>;>;>>;;>;>>>>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>>;>>>>>;>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>>>>>>>>,>>>>>>,>>,>>>>>>>>>>,>>>,>>>,>>>,>>>>,>,,>>>,>>>,>>,>>,>>,>,,>,>,>>,>,>>,>,>,>,>,>,>,>,>,,>,>,>>,>,,,,,>,,>,>,>,,,,,,>,>,,>,,,>,>,>,,>,,,,,,>,,,,>,,,,,,,,,,,>,>,,>,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',,,,,,',,,',,,,,',,',,,,,,,,,,,,',,',,',',',,','',,,',,',',',,',,',',',,'',',,'>,,,,,,>>;--=================---;;;;>;-----===**&&%**===--=-=*&******=*===-->;;;;--==================--;>>,,,,,''',','','','''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>;>>;>;>;;>;>;>;>>;>;>;>;>;>;>>>;>>;>>;;;>>;>>;>>;>>;>>>;>>>;>>>;>>;>;>>>>>;>>>>>>;>>>>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>,>,>,>>>>,>,>,>>>,>,>,>,>>>>>,>>,,>>,>,>,>,,>>>>,>>,>,>,>,,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,>,>,>,,,>,,>>,>,,,,>,,,>,,,,,,>,,,>,>,,,,>,,,,,,>,>,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,',,,,,,,,,,',,,,,,',',',',',',,,,,',,',,,,',,,,'',,',,',,,',',',',,,',,,,,,,,>,,',,>>;-=*==***=*=*=**=*=*====-;;;;;;------==*&&&&*=-=----=*******=====---;;;---====*=*=**=*******==--;>>>,,,,',',',,','''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>;>>;>>>;>;>;>>;>;>;>;>;>;>;>>;>;>>>;>>;>>;>>;>>;>>>;>>>;>>;>>>>>;>>;>>>;>>;>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>,>>>>>>>>,>,>>>>>>>>>>,>,>>>>>,>,>>>>>,>>,>,,>,>,>>,>>>,>,>>>,,,>>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,,>,,>,>,>,,,>,>,,>,,,,>,>,>,,>,,>,>,,,,,>,,,,,>,,,,>,,>,,,,,,,,,,,,,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',,',,,,',',,,,,,,,,,,,,,',',,',,',',,',',,,',',',,',',,',,',',,,,,,,>,>>,,,,>>;-==*******************===--;;-;------===*&&&*=------******====------;;--==********************==--;;;>>,,,',',,,',''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>>;>;>;;>>;>;>;;>;>;>>>;>;>;>;>>;>>;>>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>>>>>>>>;>>>;>>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>>>>>>>>,>>,>,>>>>>>>,>,>,>,>>>>,>,>,>>>,,>,>>>>,>>>,>>>,>>,,>>>,>,,>>>,,>,>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,,>,,>,>,,,>,,>,>,,>,,,>,,>,,,,,>,>,,,,>,,,,>,,,>,,,>,,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,',,,,,,,,,,,,',,,,,,,',',',',',',,,,',,,,',,,',,,,',,',,',',,',',',',,',,,,,>>>>;,,,,>--=**&*&**&**&*****&******==-----;---=--==**&*=-----;-*****=====---------==***&****&***&**&*&*&***===---->,,,,,,,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>;>;;>;>;>>;;>;>;>>;>>>;;>;>>;>>;>;>;>>>;>>;>>;>>;>>;>>;>>>;>>>;>>>;>;>;>>;>>>>>>>>>>>>;>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>>>>>,>>>>>>>>,>>>>>,>,,>>,>>,>,>>,>>>,,>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>,,>,,,>,,,>,>,,>>,,,>,,,>,,>,,>,,,,>,>,,,,>,>,,,>,,,,,,,,,,,,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,,',,,',,',,,,,',,,',,,,,,,,,,,,',',,',',,',,','',',',',,,',,',',',,',,,,,>>>>;;>>>>;;-=**&*&&&&*&&*&&&&*&&&&&&***=----;-----=-==***==-;-;;-=*======----;-;--==***&*&&&&&*&&&&&&&*&&&&&******==->,>,,,,,,,,'''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;;>;>>;>;>;;>>;>>;>;>;>;>>;>>;>;>;>>;>;;>>;>>;>>;>>;>>>>>;>;>>;>>>;>>>>>>;>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>,>>,>>>>>>,>,>,>,>>>,>,>,>,>,>,>,>>>>>>,>,>>,>,>>,,>>>>,>,>,>,>>,,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,,,>,,>,>,,,>,,>,,>,,>,>,,,,>,>,,,,>,,,,,>,,>,,>,,,,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,,',,,',,,,',,,',,,,',',',',',',,,,',,,',,',,,,,',,,,,'',',',,,',',,,,,,,>>>>;;;>;;-=***&&&&&&&&&&&&*&&&&*&&&&&&***=---;--=--=-===*=--;;-;-=======--;-;---==***&&&&&*&&&&&&&&&&&&&&&&&&&&&&&&&*-;>>>>>>,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>>;>;>;>>;>>;>;>;>;>;>;>;>>;>;>>;>>;>>>>>;>>;>>;>>;>>;>;>>>>>;>>>;>>>;>>>>>>;>>>>>>;>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>>,>>>>,>>,>>>>>>>>,>>,>>>>>>>>,>>>>>>,>>>>>>>,>,>,>,>>,>,>>,>>>,>,,>,>,>,>,>,>>,>,>>,>,>,>,>,>,>,,>,,,>,>,>,>,>,,>,>,>,,,>,,>,>,,,,>,,,,,,,>,,,,,,>,,,,,>,,,,,,,,,,,>,,,,,,,>,,,>,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,',,,,,,,,,',,,,,,,,',,,,,,,,,,,,,',',,',,',,,','',,'',',,,',,',',',,',,,>>>>>;;;;---==*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&**=------=-=-====--;;;;;-=====-----;-;--=**&&&&&&&&&&&&&&&&&&&&&&&&&&%%&%&&%*=--;;>>>,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>>;;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;;>>;>>;>>;>>>;>>>>;>;>>>;>>;>>>;>>;>>>>>>;>>>>>;>>>>;>;>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>,>,>>>,>,>,>>>,>,>,>>,>>>,>>,>>>,>,>,>>,>>,>>>,>>,>,>,>,>,,>,>,>,>,>,>,>,,>>,>,,>,>,,,>,,,>,,>>,,,>,,,>,>,,>>,>,>,,,>,>,,,>,>,,,,,>,,>,,>,,,,>,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',',,',,,',',',,',',',,,',,',,',',,,,',,,',,',,',',',,',,,,,,>>>;;;---***&&&&%&%&%&%&%&%&%&%&&%&%&&&&&&&&*=-;-----=-=====---;;;;;-==-----;-;--==**&&&&&&&%&%&%&%&&%&%&%%%%%%%%%%%$%%&*=--;;;>>>,,,'''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>;;>>;>;>;>;>;>;>;>;>;>;>>;>;>>>;>;>>>;>>;>>;>>;>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>,>>>>>>>>>,>,>>>>>>>>,>>>>>>>,>,>>,>>,>>,>>,>>,>,>,>>>,>,>,>,>,>,>,>,>>,>,>>,>,>,>,>,>,,>,>,,>,,>,>,,>>,,>>,,>,,,>>,,>,,>,,>,,,,,,,>,,,,,>,,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,',,,,,,,,,,,,',,,,,,,,',,,,,,,',,,,,,',,,',,',,,','',,'',,',',,',',',,,',,,>,>>>;;;-;=*&%&%%%%%%%%%%%%%%%%&%%%&%%%%%%%%%&&*=----====-===-----------==----;----=**&&%%%%%%%&%%%&%%%%&%%%&%%%%%%$$%$$%&**==-;;>>>,,,'''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;;>>;;>>;>;>>;>;>;>;>;>;>;>>;>;>;>>>;;>>;>>>;>>;>>>>>;>>>>;>>;>>>>>>>>>>>>>>>>;>>;>>>>;>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>>>>>>>,>>,>,>>>>>>>,>,>,>>>>,>,>,>>>,>>,>>,>>,>,>,>,>>>,>,>,>>>,>,>>,>,>>,,>,>,,>,>,>,>,>,>,>,>,>,>,,>,>,,,>,,,>,>,>,,,>,,>,,>,,>,>,>,,,>,>,,,>,>,,,,,,,>,,,,,>,>,,,,,,,,>,,>,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,',,',,,',',,,,,,',',,,,',',',,',',',,'',,',,,',,,,,',,,',,',',,',,',',,,,>,>>>;;;;--=*&%%%%%$%%%%%%%%%%%%%%%%%%%%%%%%%%&&**=--=-======-=-----------------;-==**&&%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$%%***==--;;>>>,,,''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;>;>>;;>>;;>;>>>;>;>>>;>>;>;>>;>;;>>>;>>;;>>;>>;>;;>>;>;>>>>>;>;>>;>>;>>;>;>>>>>>>;>>>>>;>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>>>>,>>,>>>>>>>,>,>>>>>>,>>>,>>>>,>>>>,>>>,>,>,>>>,>,>,>,,>,>>,>>,>,>>,>,>,>,>,>,>,,>,,>,>>,>,,>>,,>>,,,>,>,>,,>,,>,,,,,,>,,>,,,,,>,,,,,>,,>,,,,>,,,,,,,,,>,,>,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,,,,,,,',,,,,',,',,,,,',,,,,,,,,,,,,,',,,',,',',','',,'',,',,,',',',',,',,,,,>>>;;;---=**%$$$$$$%$%%%%%%%%%%%%%%%%%$$$%%$%%&*============-=-----------------==**&%%%%$$$%%%%%%%%%%%$%%$%$%$$$$$$$$%&**===---;;>>,,,,,'''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>>;;>>>;>;>;>;>;;>>;;>>>;>>;>>>;>>;>>>>;>>;>>>>>>>>>>;>;>>>>;>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>>>>>,>,>,>>>>>,>,>>,>,>>,>,>>,>,>>,,>>,>>>,>,>,>>,>>>,>,>,>,>,>,,>,>,>,>,>,>,>,>>,,>,,>,>,,,>,,,>>,,>,,,,,,>,,,>>,>,,,,,,>,>,,,>,>,,,,,>,,,,>,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,,,,,',,,,,,,,,',,,',',',,',',',,,',,,',,,,',,,',,',','',',,',',',,,,,>,>>>>>;;---==*&&%&%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&**======*====-------;-;-;------==**&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&**===---;;;>>>,,,''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>>;;>;>;>;>;>>;>;>>;;>;>>;>;>;>>;>;>>;>>;>;>;>;>;>>>>>;>>>>>>;>>;>>;>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>,>>>>>>>,>>,>>>>>>,>>,>>>>>>>>,>,>>>>,>>>,>>>>,>>,>>,>>>,>>,,>,>>>,,>,>,>,>,>,>,>,>>,>,>,>,>,,,>,>,,>>,>,,>,,>>,,>>,,,>,,>>,>>,,>,,,,,>,>,>,,,,,>,,,,,,>,,,,,>,,,,,,,,>,,,>,,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,',',,,',,,,',,',,',,,',,,,,',,,,,,,',,',',,',',,',,',,,',,,,,,',',,,',',,,,,>>>>;;;;----===**************&*&*&&*&&&&&&&&&&**==--==-=-=-------;---;-;;;;----==**&&&&&&&&&&&&&&&&*&*&**&********=*===-=---;;;>>>,>,',''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>;;>>;>;>;>>;>;>;>>;>>;>;>>;>>;>>;>>;>;>;>>>>>>>>>;>;>>>;>;>;>>;>>>>>>;>>>>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>,>>>>>>,>,>,>,>>>>>>,>>>,>>,>,>>,>>>,>>,>,>,>>>>,,>>>,>,>,>>,>>,>,>,,>,>,>,>,>>,,>,,>,,,>,>,>,,,>,,,,>,,>,,,,,,,,>,>,>,,,,,,,>,>,,,>,>,,,,,>,,,,,>,,>,,,>,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,,,,',,',',,,,',',',,',,,,,',,,,',',,'',,','',',','',,',,,,,,,,>>>>;;;;-;---------=====*===*===**==*=**=*=**==--------------;--;;;-;;--;-;---=====**********==*=*==*=========--------;;;;;;>>>>,,,,','''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>>;>;>;>;>;>;>;>>;>>;>>>;;>;>>>;>>;>>>>>>;>;>;>;>>>>>;>>>>>>>>>>>;>>;>>>;>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>,>>>>>>,>,>>,>>>,>,>>>>>>>>>,>,>,>>,>>,>>>>,>>>,,>,>,>>>,>>,,>>>,,>,>,>>,>,>,>>,>>,>,>,>,>,,>>,>,>,>>,>,>,,>>,,>>,>,>,,>,>,>,>,,,>,,>,>,>,,,,,>,,,,,>,,>,,,>,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,',,,,,,,,,,,,',',,',,,,,,,,,',',,,,,',,','',,,',',,,',',,',',,,',,',,',,,',',,,>,>>>>>>;>;;;;;;;-;--;----------=--=-=-=-===-=-----;--------;-;-;;-;;;;;;;;;;-----====-==-=---=-=---=--------;;-;-;;;;;>;;>>>>>,,,,,',','''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>>;>>;>;>;>;>;>;>;>>;>;>;>>;;>>>>>;;>>;>>;>;;>;>>>;>>>>;>;>>;>>;>>;>>;>>>>>>>>>>;>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>>>>>>,>>>>>>,>,>,>,>>>>>>,>>,>>,>,>,>,>>>,>>>,,>>,>>>,>,>>,>>,>,>,>,>,,>,>,>,>,>,>,>,,>,,>,,>,,>,>,,,>,,,>,,>,>,>,,,>,,>,,,>,,,>,,>,>,,,>,>,,,,,,,,,>,,>,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,,',,',,,,,,,,',,',',',,,,,',',,',,,,,',',,,',',,,',,',,',',',,',',',,,,,,,,,,,,>>>>>>>>>>;>;>;;;;;;;;;;-;;-;-;--;-;;--;--;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--;;--;-;--;-;-;;-;;;;;;;;>;;;>;>;>>>>>>>>>,>,,,,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;;>;>;>;>;>;>;>;;>>>;>;;>>;>;;;>>>;>>;>>>>>>;>;>>>;>>>>;>>>;>>>>>>>>>;>;>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>>,>>,>>,>>>>>,>>>>>>>>>>>>,>,>>>,>>,>>>,>>>,>>>,>,>>>,>,>,>,>,>>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>>,,>,,>,>,,>,,>,,,>,,>,,>,,,,>,,,,>,,,,,,>,>,,>,,,,,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,',,,',,,',,',,,,,,,,,,,',',,,,,',,',',,',,',,',',',,',,',',,',',',',,',,,,,,,,,,,,,,,>,>>>>>>>>>>>>>>>>>>;>>;>;>>;>;;;>;;>;;;>>>>>>>>;>;>>>>>>>;>>>>;>>>>;;>;;;;>;;;>;>;;>>;>>>;>>>>>>>>>>>>,>>,>,,,,,,,,,,,'''','''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>>;>;>;>>;>>;>;>>;>;>>>>;>;>>>>>;>>;>>;;>;;>>>>>>;>>;>>>>;>>>>;>;>;>>>>>;>;>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>,>,>,>>>>>,>>>,>>,>>,>>,>,>,>>,,>>,>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>,,>,>,>,,,>>,>,,>,,>,,,>,>,,>,,>,,>,>,,,,>,,,>,>,,,,,,,,,,>,>,,,,,,,,>,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,',',',',,,,',,',,,',,,',,,,',',,,',',',',,,',',',,',',,',',',,,,,,,,,,,,,,,,,,,,,,>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>,>>,>,,,,,,,,,,,,,,,',,','',','''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>>;>;;>>;>;>;>;>;>;;>>;>>;;>;>>;>>;>>>>>>;>;>;>>;>>;>;>>>;>>>>>>>>;>>>>>>>>;>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>,>>>,>>,>>,>>>>,>>>>>>>>>>>,>,>>>,>>>,>>,>>,>>>,>>,>>>,>>>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>>,,,,>,,>,>,>,,,,>,,,>,,>,,,,>,>,,,>,,,,,>,,>,>,,,,,,,>,,,,,,,,,,,>,,>,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,,,,,',',,',,',,,,,,,,,,,,',',,',,',',',,,'',,,,',',,,',,,',',',',',',,'',,,',,',,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,>,,,,>>,>,>,,,>,>,>,>,,,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,',','''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>;>;;>>>;;>;>>;>;>;>>>;>;>>;>>;>;>>;>>>;>;>;>>>>>;>>;>>>>;>>>;>>;>>;>>>;>>>;>>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>>>>>,>>>>,>,>,>,>,>>>>,>>,>,>>,>>,>>>,>>,>>,>,>,,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,,,>,>,>,,>,,,>,>,,>>,,,>,,,>,,,,,>,,,>,>,,,,,,,,>,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,',,',,,,,',,,,,,,',,',',',,,,,,,,,',,,,',',,,',',,','',,'',',,',',,',',',,',',',,',',',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',',,','','',''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>>;>;>>;>;;>;>>>;>;>>;>;>;>>;>>;>>;>;>>;>>;>;>>>>>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>,>>>>,>>>>>>,>>>>>,>>>>>>>>>>>>,>>>,>>>,>>>,>>,>>,>,>,>>,>>>>,>,>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,,>,,>,,>,>,>,,>>,>,,>,,>,,>,,>,,>,,,>,,,>,,,>,>,,,>,,,,,,>,,>,,,,,,,,>,,,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,',',',',,,',',,,',',,,',,',,,',,,,',,',,',',',',',',,'',,,',,'',''','',,','',',',',',,,,,',,,,,,,',,,,',',',,,,'',,',,',,,',',',',,',,,'''','','','''','''',''','''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>;>;>;;>;>;>>;>;>;>;>;>>;>>;>;>>;>>;>>>>;>>;>>>;>;>;>>;>;>>>;>>;>;>>;>;>>>>>>;>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>>>>,>,>,>,>,>>>,>>>,>>>,>>>,>>,>>>>,>,>>,,>>,>,>,>>,>>>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,,>,>,,>,,>,,>,,>,,,,>,>,>,,>,,,,,>,,,>,>,,,,,,>,>,,>,,,,,,,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,',,,,,,',',',',,,,,,,,',',,,,',,,,',,',',,',,',',',',',',,',',',','',,''','',,',,',','',',,',,',','''''',''''''','''''','''''','''''''''''',''''''''''','''''''''','''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>;>;>>;>;>;>;>>;>;>>;>;>;>;>>;>>>;>>;;>;>>;>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>;>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>,>,>>>>,>>>,>>>>>>>>>>>>>,>>>,>,>,>>,>>>,>>,,>,>>,>,>>,>>>,>,,>,>,>,>>>>,>,>,>,>,>,>,>,>,>,>,>,>>,>,,>,,>,,>,>,>,>,,>,,>,>,,,>,,>,,,>,>,,,>,,,,,>,,,,,,,,,,,>,,,>,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,',,',,,,,,,,,,,',,,,,,,,,,,',',',,,,,',',,',',,',,,',',',',',,,',',',',,',',',,',',,',,'','','',',','','''','',,',',',,',','',',','',','''',',',',',''''',',''',''''','','',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;>;>>;;>>;>;>>;>>>;>;>>;;>>;>>>>>;>>>;>;>>>>>>>>;>;>;>;>>;>;>>;>;>>;>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>,>>>>>>>,>>>>>>,>>,>,>,>,>,>>>,>>>>>>,>,>,>>,>>>,>>,>>>,>>,,>>,>>>,>,>>,,,,>,>,>,>,>,>,>,>,,,>,>,>,,,>,>,>,,>,,>,,>,,>,,,,>,,,>,,,,,,>,,,,,>,,,,>,,,>,,>,,>,>,,,,,,,,>,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',',',',,,,,,',',',',,,,,,,',',,',,',,,',,',',,',,',,,',',,,',',',,',,,'',','','',',',','',',','',,,'',''',''',''''''',''','',''',','',''''''''',''''','''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;>>;;>;>;>>;>;>;;>>>;>;>>;>>;>;;>>;>>;>>;>;>;>;>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>>>,>>>>>>>>>>,>>>,>,>,>>>>>,>>>,,>>,>,>,>>,>>,,>>,,>,>,>,>>>,>,>,>,>,>,>,>,,>>,,,>,>,>,>,>,,>,>,>,>,,>,,>,>,,>,>,>,>,>,,,>,>,,,>,,,,>,,,,,,,,,,,,,>,,,,,,,,,,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,',,,,,,,,,,,,,,',',,,,,,,,,',',',,,,',,,',,',,,',',,',,',,'',,','',',,,'',','',,',',',,',',',',,',''',,'''',',','',,'',',,','','',''',''''''''',',',''''',''''','''','''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>;>;;>>>>;>>;>>>;>>;>;>>>>;>>;>>>>>;>;>>>;>>>>>>>;>>;>>;>;>>;>>;>>;>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>>>>,>>>,>>,>>>,>>>>,>,>,>,>,>>>,>>,>>>,>,>>,>,>>>,>>,>>,>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,>,>,,>,,>,,,>,,,>,,>,>,,,>,,,,,>,,,,>,,,,,>,,,>,,,,>,,>,,>,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,',,',',',,,,,,,',,',',,',',',,,,',,',,',,,,',',,',',',,',',,',',',',',,','','',',,''',,',''',',''',',''',''','',',''',',',','''''',',''''','''''''','',''',''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>>>;>>;>;;>>;>;;>;>;>;>;>;>>>;>>;;>;>>>>;>>>>;>;>;>>;>>>>>>>;>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>,>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>,>>,>>,>>,>>,>>>>,,>>,>>,>>,>>>,>,>,>,>>,>>>,>,>,>,>,>,>,>>,>,>,>>,>,>,,>,,>,>,>,,>,>,>,,,,,>,>,,>,>,,>,>,,,>,>,,>,,,,>,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,',,,',,,',,,,',,,',,,,',,,,,,,',',',,',,,',,,,,,','',',',',,'',',,',,',',',,',','',',',','',',,','','',,,''',',,''',','','','',',''''',','''''''',',''''''',''''','','''''''','''','''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;;>;>>;;>>>>;>>>;>>;>>;;>>;>>>>;>;>>>;>;>>;>>>>>>;>>;>>>>>>>>;>>>>>>;>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,>>,>>>,>,>,>,>,>,>>,>>,>>,>>,>>,>,>>>,>,>,>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,>,>,,,>,>,,>,,,>,>,>,,,,>,,,>,,,,,>,,,,,,,,>,,,,,>,,>,,>,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,',,,,,,,',,,,,',',',,,,,,,,,',,',',',',,,,',,,',',,,',',',',',',',,',',,',',',',,',''',',','''',',''',',','','',''',''',',',''''',',','''','','''',','''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>>;;>;>>>;>;>>>;;;>>;;>;>>;>>>>;>>;>;>>>>;>>>>>;>>>;>;>>>>>>;>;>>>>>>>;>>>>>>;>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>,>>,>>>>,>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>>,>,>>>,>>>,>,>>,>>>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,>,>,,,>,>,>>,,>,,,>,>,,>,,,>,>,,,>,>,>,>,,,>,,,,,,,,,,,,,,,,,>,,,>,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,',,,,',,',,,,',',,,,,,',',',',,',,,,',,,,',',,'',,,',',,,',',',,',,'',','',',',','',',',',','',,,',',','',''',','',','',''',''',',''''''',','''''','''''',''''','',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";;>>;>;>>;>;;;>;>;>;>>>;>>>;>;>>;>;>>;>>;>>;;>>>;>;>>>;>>>>>>>;>>>>>>;>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>,>>>,>>,>>,>>,>,>,>,>,>,>,>>>,>>,>>,>>,>>,>>,,>>,>,>>,>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,>,>>,>,,,,,>,,,>,,>,,>,,>,,,,,>,,,,,,,,>,,,,,>,>,>,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,',,,,,,,,,,,,,,,',',,,,,,,,',,',',,'',',,,',,,'',,','',,',,',','',,,,',,',',',',',',','',',,''',',''','',,'',',''''','','',','''',',',''''',',''''''',''','''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>>>;>;>;>;>;>;>;>>>;>;>>;>>>;>>;>>>;>>;>>;>>>;>;>>;>>>;>>;>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,>>,>>,>>>,>,>>,>>,>>>,>,>,>>,>,>,>,>,>,>,>,>,>,,>,,>>,>,>>,>,,>,,,,,,>,>>,,,>,>,>,,>,,>,>,>,>,,,>,>,>,,,,>,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,,,,',,,,,,,,,,,,,,,,',,',,',',,',,,,,',',',',,',,,',,,,,',',',',,,',,,,,','',,',,,,''',',',',',',',','',,',''',',''',,'',''',''',',','','','''',','''''',','''''',',',''',''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;;>>;>;>>;>>;>;>;>;>>>;>>;;>>>;>>;>>;>>>>>>;>>>>;>>;>>>>>>>;>>>>>>>>>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>,>>>>>>>,>>,>>,>>,>,>,>,>,>,>,>,>>,>,>>,>,>>,>>,>>,,>>,>,>>,>>,,>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,,>,,>,,,>,>,>>,>>,,>,,>,>,,,,,>,,>,,,,,,,,,>,,,,,,,>,,,>,,,>,,,>,,,>,,,,,,,,,,>,,>,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,,,,,,,',,',',,,,,,,,,',,,',,,',',,',,',,'',,'','',,,',','''',,,',',',',',',',',''',',,','',,''','',,'',,'',''','','',',''''',',''''','','''''''''''','','','''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>>;;>>>;>>;>;>>;>>;>;>>>;>>>;;>>;>>>>>;>;>;>>;>;>>>>>>;>>;>>>>;>>>>>;>>>>>>;>>>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>,>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>,>,>>,>>,>>,>>>,>>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,,,,,>,,>,,>,,,>,>,>,,>,,>,>,>,>,,,>,>,>,,,,,,,,>,,,>,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,,,,',',',,,,,,',,,,',',',',,,',',',,',,',,',,',,,',,',,',',',',,,,,'',',',',',',',',',,'','','','',','',''',''','',''','',''',',','''',',''''''',''','','''''''''''',''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>;>;>>;>>;;>;>;>>;>;>;>>;>;>;>>;>>>>;>>;>;>>>>>>;>>>>>>>>;>>>>>>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>,>>>>>,>>,>,>,>,>,>,>,>>,>,>>>>,>>,>>,>>,,>>,,>>,>>>,,>>,>>,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,>,>,>,,>>,>,,>,>,,>>,,>,,,>,,,>,,,,,,,,>,,,,,,,>,>,>,,,,,,,,>,,,,,,,>,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,,,,,,,',,',',,,,,,,,',',,,,,',,,,,,,,',',,,,,',,',,',,',,',',,',,',',',','','',,',',',',',',',','',,'',',,','',','',,'',',''',','',''','''''''',''''','',''',''''''''''''''',''''','''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>>;;>;>>;>>;>;>>;>>;>;>>>;>;>>;>;>>;>>>>;>;>;>>;>;>>;>>>>;>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>,>>>>>>,>>>>>,>>>>,>>>>>>>>>>>>>>,>>>,>,>>>,>>,>>,>>>,>>>,>>,,>>>,>,>,>>,>>>,>,>,>,>,>,>,>,,>,>,>,>,,>,,>,>,,>,>,,,>,,,,>,,>,,,>,,,>,>,>,>,,,>,>,,,,,,,,,>,,>,,,,,>,,>,,,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,',,,,,,,,,,,',,,',,,,,',',,,',',',,,,,',',',,,,,',,',',',,',',',',,,',,,,',,,',',',',',',',','','',',','',',''',,''',','',','',''',','',',',''',',''',''''''','',','','','''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;;>>;>;>>;>>;>>;>>;>;>>;>>;>>;>>>;>>;>;>>;>>>>>>>>;>>>;>>>;>>;>>>>>>>;>>>>>>>;>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>,>>>,>,>>>>,>>>>>,>,>,>,>,>,>>>,>>,>>,>>,>>>,>,>,>,>,>,>>>,,,>,>>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>,>,>,>,>,,>,,>,>,>,>,,,,,,,,>,,,,,>,,>,,>,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,',,,,,',,,,,,',,,,',,',',,,,',,',',,',,,',,',,',,,',',','',',''',',',',',',',',',',',',',','',',,''',,'','',''','',',''',''''''','''','''','','''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>>>;>;>;;>;>;>>;>;>;>>;>>;>>>;>>;;>>;>>>>>>>;>;>;>;>>>>>>;>>>;>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>,>>>>>>>>>,>>>>,>,>>>>>>>>>>>>,>>,>>>,>>,>>,>,>>,>>>,>,>>,,>>>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,,,>,,>,>,,>,>,,>,,,>,,,>,,,,,>,,,,,>,,>,>,>,,,,>,>,,,>,,,,,,,>,,,,>,,,,,,,,,,,>,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,',,,,,,,,,,,,',,,,,',',,,',,,,,,',,',',,',',,',,'',,',,',,'',,',',,,',',,,',',',',',',',',',',',''',',,''''','''','','',''','''','',',',',''',''',''''''','','''',''''',''''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;;>;;>;>;>>;>>;>;;>>;>>;>>;>>;;>>;>>>>;>>;>;>;>>>>>>>>>;>;>>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>>,>>>>,>>>>>>,>,>,>,>>,>>,>>>,>>,>>>>>,>>,>,>,>>>,>>>,,>,>,>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,,>,>>,>,>,,>>,,>>,,>>,>,,,>,>,,,>,,,,,>,>,,,,>,,,,>,,>,,,,,,,,,>,,>,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,',,',,',,,',,',,,,',,,',',',,,',,,',,,,',,',,,',',',',,,'',',',',',',',',',',',',',','','',',,'','',',,',',,',','','','',','',''''''''','','''','',''''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;>;>;>;>;>>>>>;>;>;>;>>;>>>;>>;>;>>;>>>;>>>;>;>;>>>>>>>;>;>>>;>>>>>>>;>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>>,>>>>,>>,>>>>>>>>,>>,>>,>,>,>>,>,>>,>,>>,>>,,>>,>,>>,>>,>>>,>,>>,>,>,>,>,>,>,>,,>,>,,>>,>,,,,>,,>,,,>,,,>,,,,>,>,,>,>,,,>,>,,,,,>,>,,>,,,,,,,>,,>,>,,,,,,,,,,,,,,>,,>,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,',,,',,,,,',,,,,,',,',',,',,,,,,,',',,',,',',,',,',,',,,',,',,,',,',',,',',',',',',',',',',',',','',',',','''',''','',''','',''',''',',',','''''','''''''',','''''''''',''','''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>;>;>;;;>;>;>>;>>;>>;>;>>;>>>;>>>;>>>;>>;>>>;>;>>;>>>>;>>>>>>>;>>>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>,>>>>,>>,>>,>>>>>>>>,>>>,>>>>,>,>,>>>>>>,>>>>>,>>,>,>>,>>,>,>>>,,>>,>,>,>>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>>,,>,,>,>,>,>,,>,>,,,>,,>,,>,,,,,>,>,,,,,,,,,>,>,,,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,,,,,,',,,,,,',,,,,,,,,,,,,,',',',,,,',,',,,',,',',',',',,','',',',',',,',,',',',',',',',','',',',','',''',,','','','',,'','','',',''''''''',',''','',','''''','','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>;>>>;>>>>;>>;>;>;>>;>>>>;>;>;>>;>>>;>>>>>>;>>>>>>>>>>;>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>,>>,>>>>>>>>,>,>>>>>>,>,>,>>,>,>>>,>>>>,>>,>>>,>,>>>,>,>,>,,>>,>,>>,>,>,>,>,>,>,>,,>,,>,>>,>,>,,,>,>,>,,>,,>,>,,,,>,,>,,,>,,>,>,,,,,>,>,>,,>,,,,,>,,>,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,,,,,',,',,,',,',',',',',,,,,,',',,',,',,,',,',,',,',',',,,',,',','',',',',',',',',',',',','',',',',','','',','','''','','',''',',',',','''',''''''''','','''''',''''',''''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;;>>;>;;>>;>;>>>;>>>;;>>;>>>;>>>;>>>;>;>>>;>;>>;>;>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>,>>,>>,>>>>>,>,>>>>>>>,>>>,>,>>>,>,>,>>,,>>,>,>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>>,,>,,,>,>,>,,,>,>,,>,,,>,,>,,,,,>,>,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',',',,',,',,',,',,',,',,',,,,',,',,'',,',,,',',',',',',',',',',',','',',',','','','',',',','',''','',''''''''''',''',',''',''''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>;>>;>;>>>>;>;>>;;>>;;>>>>>>;;>>;>>>;>>;>>;>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>,>>>>>,>>,>>>,>,>>>>>>,>>>,>,>>>>,>,>,>>,>,>>>,>,>>>,>>,>>>,>>>,>>>,,>>,>,>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,>,,>>,,,>,,>,,>,,>,,>,,>,,,>,>,,,,,>,>,>,>,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,>,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,',,,,',,,',',,',',',',',',',,,,,,,',,',,',,',,',,',,',','',,','',,,',',',',',',',',',',',',''',',','',','','',',','','','''',''','',',',',',''',''''','''','','''',''',''''''''''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;;>>;>;>;>;;>>>;>>>;>>>>;;>;>>>;>>;>>>;>>>>>>;>;>;>>;>>>;>>;>;>>>>>>;>>;>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>,>>>>>,>>>>>,>>>>>>>,>>>>,>,>>>,>,>>,>,>,>,,>>,,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,>,>,>,>,,,>,>,,>,>,,>,,>,,>,,,>,,,,,>,>,,,,,,,,>,,>,>,,>,,,,>,,,,>,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,',,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,',,',,',,',,',',',,',,',',,,','',',',,,',',',',',',',',',,'',',','','',','',''','','',',',',''',''''''''',''',',''''',''''''''''''''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>;;>;>>;>;>>;;>>;;>>;>;>>>>;>;>>;>>;>>>;>;>;>>>>>>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>,>>>>>,>,>>>,>,>>,>,>,>>,>,>>,>>,>>,>>,>,>>,>>>>,>>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,>,,>,>,>,,>>,,>,>,,,,>,,>,,>,,>,>,,>,>,,,,>,>,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,',,',',,,,',,',',',',,,,,',,,',,,,,',,',,',,',,',,,,',',',,',','',',,',',',',',',',''',','',',',','',',',',','',''',''',','',',',',''','''''',','''',''',''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>>;>>;>;>>;>>;>>;>>>;>>;>>;;>>>>;>>>>>;>>>;>>>;>>;>>;>>>>>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>>>,>>>>>>>,>>>>>,>>>>>>,>>>>>>>>>>>,>>>,>>>,>>,>>>,>>>,>,>,>,>>,>,,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,,>,,,>,,>,>,>,,>,,>,,,>,,,>,,,,,,>,,,,,,,,>,,>,,>,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,',,,',,',,,,,,',',,,',,,',',,',,',,,',',,'',',',,',',,,',,',',',',',',',','',,,'',',',',''',',''','',',''','''',''',''''''''',''',',''''''','','''''''''',''''''',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;;>;>;>>>;>;>;>;>;;>>>;>>;>>>;;>>>;>;>>>;>>>;>>>;>>>>>>;>>;>>;>>>>>>>>;>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>,>>>,>>,>>>,>>,>>>,>,>,>,>,>>,>,>>,>>,>>,>,>,,>>>,>>,>,>,>>>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>>,,>>,,>>,,>,,,>,>,,,>,,>,>,,>,,,>,>,,,>,>,>,,,,,,,,,,>,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,',,,,,,,',,',,,,',,,,,,',',,,,,'',,',',,',,,',,'',',,',,,',,'',,','',',',',',',',',',',',''',,',',','',,'''',,'','''',,'',','','',',',',',''',''''',''','''''','',''','''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>;>;;>>;>>;>>>>;;>>>;>>;>>;>;>>;>>;>>;>>>;>>>>;>>;>>;>>>>>;>>>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>,>>,>>,>>,>>>>,,>>>,>>>,>,,,>>,>,>>,>,>,>,>,>,>,>,>,,>,,>,>,>,>,,>,,,>,,,>,,>,>,,,,>,,,>,,,>,,,>,,,,,>,,,,,,>,,>,,>,,,,,>,,,,,>,,,,,,,,,>,,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,,,,',,',,,,,,,',,,,',',',,,,',',,,,',,,',,,',,,',,,,',,',',',,',',',,,',,',',',',',',',',',,''',''',',''',,,''',',',,'''',''','',''''''''''','''',''','''''',''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;;>>>;>;>;>;>;;>>>;;>>;>>>>>>;>>>;>>;>>;>>>;>>>>;>>>>>>>;>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>>,>,>>,>,>,>,>>,>,>,>,>,>>>,>>>,>>,>>,>>,,>>>>,,>,>,>,>>>,>,>>,,>,>,>,>,>,>,>,>,>>,,>,>,>,>,>,>,>>,,>>,,>,>,>,>,>,>,,,>,,>,>,,,>,>,,,>,>,,,>,,>,,>,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,',,,,,,,,,',,',,,,,,,,,,,,,,',,',,,',',,',,'',,',',',',',',,',,',',',,'',',',',',',',',',',''',,,'',,',',','''',',''','',','',''','',',',',',''',',''''''','',''''',''','''',''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>>;>;>>>;>>>;>>>;>>>>;>>;;>;>>>;>>>>>>>>>;>>;>>>>>>;>>;>>>>;>>>>>;>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>,>>,>>,>>>,,>,>>>,>>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,,>>,,>,,>,,>,>,,,>,,,>,,>,,,>,,,,>,>,,>,,,,,>,,,,,>,,,,>,,,,,,,,,,,,>,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',',,,,,,',,',',',',',',,,,,,',,,',,',,,,',,,',',,',,',,',,',','',,',',',',',',',',',',,'''',,'',',','',',''',,''',''',',','',''''''''''',''''','','''''''','''''''',''''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>;>>;>;>;>;>;>;>>;>;>>;>>>>;>;>>>;>;>;>;>>>>>;>;>>>>>>>>;>>>>>>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>>>>,>>>>>>>>,>>,>,>>>,>,>,>,>,>,>,>>>>,>>,>>>,>>,>>,,>>>,>,>>>,>>>,>,>>,>,,>>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>>,,>>,,>,,>,>,,>,,,,>,,,>,>,,>,>,>,,,>,,,,>,,,>,,,,>,,,,,,,,,,>,,,,>,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,,,,',',,,,,,,,,,,,,,,,',',',,',,,',,',',,',',,',,,',',',',',,,,',,',,,',',',',',',','',,',''',',','',',',',''',,'','''''',''',',',',',''',','''''','','','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>;>;>>;>;>;>;>;>>;>>;>>;>;>>>;>;>>>>>>>;>;>>>>>;>>;>;>>>>>>>;>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>>>,>,>>,>>>,>>>>>,>>>>,>>,>,,>>,,,>>,>,>,>>,,,>,>,>,>,>,>,>,,>,>,,>,,>,>,>,,,>,,,>,,>>,,,>,,>,>,,>,>,,,>,,,,,,,>,,,>,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,',,',',',',',,,,,,,',,',,,',,,',,',,',',',,',,',,,''',',',''',',',',',',','','',',,,',''','','','',,'''','',,','',',''''''''',''''','','''''''''''',''''''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>>;>>;>;>>>;>>>;>>>;>>;>;>>;>>>>>;>;>;>>>>>>;>>>>>>>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>,>>>>>>,>,>,>,>,>,>,>>>,>>>,>,>,>,>,>,,>,>,>>>>>,>>>>,>,>,>,>,>>,>,>,>,>,>,>,>>,>,>>,>,>,,>,>,>,>,>,,>,,,>,,>,,>,,>,,,>,>,,,>,>,>,,,>,,,,,,,>,,,,,>,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,',,',,,,',,',',,,,,,,,,,,,,',',',,,',,',,,',,,',,',,,',',,,',''',,,,',',,,,',',',',',',',,',','''''',',','','','''',,''','''','','',',',',''',',''''''',','','','''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;;>;>;>>;>;>;>;>>;;>>>;>>>;>>>;>;>>;>>>;>;>;>>>>;>;>>;>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>>,>>>,>>>>>>>>>>>>>>>,>>,>,>>>>,>>>,>>>>>>,>,,>,>,>,,>,>,>>,>>,>,>,>,>,>,>,>,,>,,>,,,>,>,>,,>,,>,,>,>,>,>,>,,>,,,>,,>,,,,,>,,,,,,,>,,,>,,>,,,,,>,,,,,,,,,,,,,>,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',',,,,,,,,,,',,,,,,,,,',,',',',',,,,,',,',,',',',,',',',,'',,',',',,,,,'',',','',',',',',',',',',',',',,,',',',','',',',,'',','',','','',''''''''',''''','',''''','''''''''',''''''','''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>;>>;>>;>;>>>;>>>>;;>>;>>>;>>>>>>>>;>>>>>>>>;>>>>>;>>;>>>>>>>>>;>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>>>>>>>,>>>>,>>>>>,>>>,>,>,>,>,>,>,>>,>>>,>,>>>,>>,>,,,>,>>>>,>>,>>,>>>,>,>,>,>,>,>,>,>,>,>>,,>,>,>>,,>,>,>,>,,>,,,>,,>,,,>,,>,,,>,>,>,>,,,>,>,,,,>,,,,,,>,,>,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,',,,',,',,,,,,,,,,,,,,',',,,',,',,,,,',,',,,',',,',,,',','',',,',,',,',',',',',',',''',','','',',',''',',''','',''','','','''',',',','''',','''''',''''''',''',',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;;>>;;>;>>;>;;>>;>;>>>>;>;>;>;>;>;>;>>>;>;>;>>>>;>>>>>>>>>>>>>>>>>;>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>,>>>>>,>>>,>>>>>>>>>>>>>>>,>>>,>>>>,>,>>,>>>>,>>,>,>>,>,>,>,,>,>>,>,>,>,>,>,>,>,>,,>>,>,>,>,>,>,>,,,>,,>>,,>,,>>,,,,>,>,,,,>,,,,>,,,>,>,,,>,,>,,,,,,,,,,,,,,>,,>,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,',',',',',,,,',,,',,'',',,',,',',,,,',',',,,',,',',',',',',',',',',',',,','',','',',',',','',',','',','','','',','''''''',','''','',''','',','','''''','''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>;>;>>>;>;>>>>;>>>;>;>;>>>>;>>>;>>>>;>>>>>>>;>>>>>;>>;>>>>;>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>,>>>>>>>>>,>,>,>,>,>,>>>>,>>,>,,>>>,>>,>,>>,>>,>,>,>>,>,>>,>,>,>>,>,>,>,>,>,>,>>,,,>,,,>,,>,>,,>>,>,>,,>,>,,,,>,>,,,>,>,,,>,>,,,>,,,,>,,,,,,,>,>,,>,>,,,,,,,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,,,,,,',,',,',,,,,,,,,,,,,,,,',,,',,,',,,,,',,',,','',',,',,'',',',,',',',',,',',',',',',',',',',',',''','',','',''',''',''','','',',',',','''',''''''''''''''''''''''''''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;;>;>>;>;>>;>;;>>;;>>;>>>;>;>>>;>>>>;>>>;>;>>>>;>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>,>>>>,>>,>>>>>>>>>>>,>>>>,>>,>>,>>>>>>>>>>>>,>,>>,>>>>>>,>>>,>,>,>>,>>,>>,>,>,>>,>,>,>,>>,>,>,>,>,>,>,,>>,,>>,>,>,>,>,,,>,,,>,,>,>,>,,>,,>,,>,,>,,,,,>,,,>,,,>,>,>,,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,',,',,',',',',',,,',,,',,,',',,',,',,,,',,',,',,,,',',',',',,',',',',',',',','','',',',',','',''','',,'',,''',''''','''''''''''',''',','','','','','''''''''''''''''''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;>;>;>>;>>>;>>>;>>;>>>;>;>>>;>;>>;>>;>>;>>>>;>>>>;>;>>>>>>>>>>>;>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>,>>>,>>>>>>>>>,>,>,>,>,>,>>>,>>,>,>,>>,>,>>>,>>,>,>>,>>,>,>>,>,>>>,>,,>,>,>,>,>,>,>,>,,>,,>,>,,,>,,>,,>,>,,>,,,>,,>,,>,,>,,>,,>,>,,,,>,,>,,,,,,,,>,,>,>,,,>,,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,,,,',',,',,,,,,',,,,,,,,,,',,,',,',',,,',,,',,'',,,',,',',',',,',',,,',',',',',',',',',',',,',''',',',',',,'',''',''',',',',''',',',',',',''','''''''''','''''','',''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>>>;>;>>;;>>>;>>;>>;;>>>>>;>>>>>>>;>>>>>;>>>>>>;>>>>>>>>;>>>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>,>>>>>>>>>,>>,>,>>>>>>>>>>>>>>>>,>>>>,>>,>>>,>,>>,>>,>,>,>>,>,>,>>,,,>>>,>,>,>,>,>,>,>,>,>,>,,>,>>,>,>,>,,>,>,,>>,,>,,>,,>,,,,,>,,,,>,>,,,,,,,>,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,',,,,',,,,,,,',,,,',,,,,,',',',',,,',,,',,,',',,',,',,,',',',,',',,',',',',',',,',',',',',',',',''',',',','',''''','',',',',''''','','','''''''''','''',',',''''''','''''',','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>;>;>;>>>;>;>>;>>;>>>;>;;>>>;;>;>>>;>;>>>>;>;>>>>;>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>,>>,>>,>>>>>>>>,>,>,>,>,>,>,>>>,,>>>,>>,>,>>,>,>,>>>,>>,>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,>,>>,>,,>,,>,,>,>,,>,>,,>,,,>,,,>,>>,,>,>,,,,,>,>,>,,,,,,,>,,>,,,,,,,,>,,,>,,,>,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,',,,,,',,,,,,,',,,',,',,,,,,,,,',,,',,',,,,,',,',,'',',,,',,',,',',',,',',,'',',',',',',',',',',',',','',',',,',',',''','',',''','','',',',','''',','''''',','',''''',''''''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>;>>>;>;;>;>>;>>;>>;>;>>>>>;>>>;>>;>>>>>>;>>>>>;>>>;>>>>>>;>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>,>,>>,>>>>>>>>>>>>>,>,>>>,>,>>,>>>,>>,>>>,,>>,,>>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,,,>,,>,>,,>,>,,,>,,>,,>,>,,,>,,,,,>,,,,,>,>,,,,,,>,>,,>,,,,,,>,,>,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',',',',,,',,',,','',,',,',,,,,'',',',,',',,',',',',,,',',',',',',','',','',',',,'','','',''',','','',','','','''''''',','''''',''''''''''','''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>;;>>>>;>>;>>;>>;>>>>;>;>>>>>>>;>>>;>;>>>>>;>>>>;>>>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>,>,>,>,>,>,>>>>,>,>>>>,>>,>,>,>>,,>>>,>>>,,>,>>>,>,>,>>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>,,,>>,,>,,>,,,>,>,>,>,>,,>,>,,,,,>,>,>,,,,,,,,>,>,,,,,,,>,,,,,,,>,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',,,,,',,,,,,,,,,',,',',',,,,,,,,,,',,',,',,,,,',,',,','',,,,',,',',,',',',','',',',',',',',',',','',','','','','','',,','','',''','',''',',',','''',',''''','','',''''''''','','''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>>>;;;>>;>>;>>>;>>;>;>>>>;>;>;>>>;>>>>>>;>>>>;>>>>>;>>>>>;>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>,>>,>>>>>>>>>,>>,>>>>,>>>,>,>>>>>>>>>>>>>,>,>>>,>,>>>,>>>,>,>>>,,>>,>,>>,>,,>>,>,>,,>,>,>,>,>,>,>,>>,>,>,>,>,>>,,,>>,,,>,,>,>,>,,>,,,>,,,>,,,,,>,>,,,,,,,,>,,>,,,,,,>,,>,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',',,',',,,,,,,,,,',',',',',,,,,,',,',',,',,',',,,',',',',,,'',',',,,',,',',',',',',',',',',,',',',',',',',',''''','',''','',''',''''''''',''''','',''''''''','''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>;;>>>>>;>>;>>;;>>;>;>>;>;>>>>>>;>>>;>;>>>>;>>>>;>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>>>>,>,>,>,>,>,>>>>,>>,>>,>>>,,>>>,>,>>>,>,>,>,>>>,,>,>>,>>,>,>,>,>,>,>,,,>,,>,,>,>,,,>>,,,>>,>,>,,,>,,,,>,,,>,,,>,>,,,,,>,>,>,>,,,,,,>,,,,,>,,,,,,,,,,,,,>,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',',,',,,,,,,,,,,,',',',,',,,',,,',,',',,',',,,',',,',,,''',,',',',',',',',',','''','','',',''',''',',,,'','',',''',',',',',','''',','''''''','',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;;>>>;>;>;>;>>;>>>>;>>>;>>>>;>;>;>>>;>>>>>;>>>>;>>>>>>>>>;>>>>;>>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>,>>,>>>>>>,>,>>>>,>>>>,>,>>>>>>>>>>>>,>,>>,>>,>,>,>>,>,>,>>,>,>>>,>,>,>,>>>,>,>,,>,>,>,>,>,>,>>,>,>,>,>,,>>>,,,>,,,>,,,>>,,>>,>,,>,,>,>,,,,>,>,,,,,,,,,>,>,,,,>,,,,,>,,,>,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,,',,,,,,',,',,,,,,,,',',',',',',,,,,,',,',',,',,',,,',',,',',',',','',,,',',',',',',',',',',',,,',',','',',','',','''',''','',','',''''''''',',''''','',','''''',''''''''','''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;;>;>;>;>>;>>;>;>;>>;>>;>;>>>;>>;>>;>;>>>>>;>>>>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>,>>>>>,>>>>>>>>>>,>,>,>,>,>,>>>,>>>,>>>>>,>>>,>>>,>,>>,,>,>>,>,>,>,>>,>>,>,>,>,>,>,>,,>,,>,,>,,>,,,,>,>,>,,>,>,,,>,,,,,>,>,,>,,>,>,,,,,>,>,,>,,,,,,>,,,,>,,,,,>,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,',,,,',,,,,,,,',,',,,,,,,,,,,,,,,',',,,',,,,',,',,'',,',',,,',,,',',,',',',',,',',',',',','','''','',',,','',',','',','',,'',''',''',',',',''''',','''''''''',',''',''',''''','''''''''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>;>>>;>;>>;>>;>>>;>;>;>>>>;>>>>>;>>>>;>>;>>>>;>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>,>,>>>>>>>>>>>>,>>,>,>>>,>,>>,,>>,,>>>,>,>>>,>,>,>,>,>,,>>,>,>,>,>,>,>,>,>,>,>>,>,>,>>,>,,>,>,>,,>>,,,>,>,,,,>,,>,,,,,>,>,,,,>,,,,,>,,,,>,,,>,,,,,,>,,,,,,,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',',,',,,,,,',,',',',',',',,,',',,',',,',,',,,,',,,'',,',',,',',',',,',',',',',',',',,',,',','','',','''','',',',''',''','',','''''''',','''''','','',''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;;>;>;>;>;>>;>>;>;>>>>>;>;>>>;>;>>>;>;>>>>>>;>>>>>>>>>>>;>>>>;>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>>>,>>>>>,>>,>>>>>>>,>,>,>,>,>,>>,>>>,>,>>>,>>>>,>>>,,>>>,>,>,>,>>>,>>,>>,,>,>,>,>,>,>,>,>,,>,,>,>,>,,,,>,,>,,,,>,,,>,,>,,>,>,,>,,>,>,,,,,>,>,,,>,>,,,>,,,,,,,,>,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,,',,,,',,,',,'',',',',,',',',',,',',,',',',',',',',','','',',',,','','',,',',''','',''',''','''',',',','''',',','''''''''',''','',''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>;>;>>>;>>;>>;>>;>;>>>>>;>>>>>;>>>>>;>;>>>>;>>>;>>>>>>>;>>>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>,>>>,>>>>,>,>>>>>>>>>>>>>,>>>,>>,>>,>>>,,>>,,>>>,>,>,>>,>>,,,>,>,>,>>,>,>,>,>,>,>,>,>>,>,,>,>,>>>,,>,>,>>,,>,>,>,,,>,,,>,,,,,,,,>,>,,,,,>,,,,,,,,,,>,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,',,,,,,,,,',',,,,',,',',',',',',',,,',,',',,',',,',,,',,,',,',,,',','',,,'',,',',',',',',',',',','','',',,'',''''',','',''',',',''',',''''''''',''''''','','',''','''''''''','','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>>;>;>>;>>;>>;>;>>;>;>>>;>;>>>;>;>>>>>>;>>>>;>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>>,>>>,>>>>>>>,>>>>>,>,>,>,>,>,>>>,>,>>>>,>>,,>>>,>>>,>>,>>>,>,>,>>>,>,>>,>,>,>,>,>,>,>,>,,,,>,,>,>,,,,,,>,>,,,,>,,>,,,,>,,>,>,,>,>,>,>,,,,>,>,,,,>,,>,>,,,,,,,,,,,>,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,,,',,,',',,,,,',,,,,,,,,,,,,,,,,,',,',,,,',,,,',,',',,'',,',,'',',,',,'',,',',,',',',',',',',','',','',''',',',,','',',','',''',','''',',',',''',',''''''''''''''''''''',''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;;;>>;>;>>;>>;>>;>>;>>>;>>>;>>;>>>>>>>>;>>>>;>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>,>>>>>>,>>>>,>>,>>>>>,>>>>>>>>>>>>>>,>>>>,>,>>,>>>>,>>,,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>>,>,>>,>,>>>>,>,,>,>,>,>,,>,>,,>,,,,>,,>,,,,,,>,,,,,>,>,,,,,,,>,,>,,>,>,,,>,,>,,,>,,,,>,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,',,,,',',,',',',',',',,,',,'',,',',,',,',',,,',,',,,,',',',,',',','',',',',',',',',',,'',',',,'',''','',','',',''','''',',''''''''',''''','','',',','','',''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>;>>>;>>;>>>;>>;>;>;>>;>>>;>>>;>;>;>>>>;>>>>;>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>,>>>>>>>,>,>>,>,>,>,>,>,>,>>,>,>>>,>>>,>,>,>,>>>,>>>,>>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,>,,,,>,,,,,>,>,,,>,,,>,>,,>,,>,>,,,>,,>,>,,,,>,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,',,,,',,,',,,,',,,,,,,',,,,,,,,,,',,',,,,',,,',,,',,,',',',','',',',,'',,',,',,',',',',',',''',''',',','',',','','','','''','',','','',',',',''',',''','',''''''''''''',''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;;>;>;>>;>>;>>>;>>>>>>>>>;>>>;>>>>>>>;>>>>;>>>>>>>>>;>>>>>>;>>>>>>>;>>>;>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>,>>>,>>>,>,>,>,>>,>,>,>>,>,>,,>,>,>,>,>,>,>,>,>>,,>,>>,>,>>,>,,,>>,,>>,>,,>,,>,,>,,>,,>,,,,>,>,,,,,,>,>,,,,>,,>,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,',,',,,,',',',',,,',,',',,,',,,',,'',,',,',,,,',,',',,,',',','',',',',',',',,',',,','',',''',','','','',','','',','','''''','','''','''''''''','',''''''''''''''''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>;>>>;>>;>;>;>>;>;>;>;>>>;>>;>;>>;>>>;>>>>;>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>,>>,>>>,>,>>>>>>>>,>>>,>,>,>,>,>,>,>>>,>>,>>,>>>,>,>>,,>>>,>>,>,>,>,>>,>,>>,>>,>,>,>,>,>,>,>,,,>,>,,>,,>,,>,,>>,,,>,,,,>,,,>,,,,,>,,>,,>,>,,,,>,>,>,,,,,>,,,,,,,,,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,',,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,',,,',',',',,',,,',,',,'',,',',,''',',',',,',',',',',','','','',',',',',''',,',',',''',''','''','',','''',''','''','','',''''''',''''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;;>>;>;>>;>>>;>>;>>>>>;>>;>>;>>>>>>>>>>>>;>>>>>>;>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>>>,>>>>>>>>>>>>>>>,>>>,>>,>>,>>,>,>>>,,>>,>>,>>>,>,,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,,>,>,>,>,>,>,,>>,>,,>,,>,,,,,,>,,,,,,,,>,,,,>,,>,,>,,>,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,',,',',,',',,,,',',',',,,,',,',',,,',,,',,'',',',',,',',,',',,,',',,',',',',',',',',',',',',','',''',,''',''','',',',''','',''''',',''',''',''''''''''',',''''','''','',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>;>;>>;>>;>>>;>>;>;>>>;>>>>>;>;>;>>;>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>>>>>>>>>>>>,>>>>,>,>,>,>,>,>,>>,>>>,>>,>>,>>>,>,>>>,>>,>>,,>,>>>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,>,,,>,,,,,>,,,>,,>,>,>,,,>,>,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,',,,,,,',',,',,,,',,,',,',,,,',,',,',,,'',',',',',,',',',',',',',',',',',','',',',',''','',','',''''',','','',',''''',''','''',','','',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;;>>>>;>>;>;>;>>;>>>>;>>>;>;>>>>>>;>>>>>>;>>;>>>>>>;>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>,>>,>>>>>,>>>>>>>>>>>>>>,>,>,>>,>>,>>>,>,>>,>,>,>,>,>>>>,,>,>>,>,>,,>,>,>,>,>,>,>,>,>,,,>,,>,>,>,>,>,,>,,>,,>,,>,>,>,,>,,>,,,,,,,>,,,,,,,>,,,,,>,,>,,>,,,>,,,,,>,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,',,,,',',,',',,',,,,,,,',',,,,',,',',,,',',,','',,',,',,'',,,',',',,,'',',',',',',',',',',''',','',',',',','','',','',','''','',''''',',''',''','''''''''''''','''''''''',''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>;;>>;>>>>;>>;>>;>;>>>;>>>>;>;>>>>>>;>>>>>>>>;>>;>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>,>,>,>,>,>,>>>>>,>>>,>>,>,>>,>>,>>>,>>>,>,,>>,>,>,>,>>,>,>,>,>,>,>,>,,>,,>>,>,>,>,,>,,,>,,>,,>,>,,,>,,,,>,,>,,>,>,>,,,>,>,>,,,,>,,,,,,,>,,,>,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,',,,,,,,,,,',,,,,,,,,,,,,',',,',,,,',,,,',,,',',,,,',,,,,',,',',,,,'',',,','',,',',',',',',',',','',,',',','',''','',',','','','',','','',',''''',''',''','',',',','',''','''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;;>>>;>>;>;>>;>>;>>>>>;>>;>;>>>>>;>;>>>;>;>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>,>>>,>>>>,>>,>,>>,>>>>>>>>>>>>>>>>>>>>,>,>,>>,>>,>>>,>,>,>>,,>>,>,>,>>,,>>,>>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,>,,>,>,>,>,,,>,>,,>,>,,>,,,,,,,,,,>,,,,,,>,>,,,,>,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,',',,,,,',,,',,,',',,',',,,',',,'',',',',,,'',',,',',,',',',,',',',',',',',',','',','',',',',','',''','',''',''',''','''',',''',''',''''''''''''''''''''''',''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>;>>;>>;>;>>;>>;>;>>;>>>>>;>;>>>>>;>>>>>>>>>>>;>>>>;>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>,>,>,>,>,>,>,>,>>>,>>,>>,>>,>>,>>>,>,>>,>,>,>,>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>>>,>,>,>,,>,>,,>,,,>,>,,,>,,,,>,,>,>,>,>,>,,,>,>,,,,,,,,>,,,,,>,,>,,,,,,,,,>,,,>,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,,,',,',',,,,',,,,,',',,',,,',,,,,',,,,',,',,',,,',,',,'',,,',',,,'',',,,',',',',',',',','',','','',',','','','',','','',,'','',',''',''''',''','''','''','','','''''','''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>;>>;>>>>;>>;>>>>;>>>;>;>>>>>;>>>>;>>>;>;>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>,>>>,>,>>,>,>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>,>>,>,>>,>>,>>>,>>,>,>,>,>,>,,>,>,>,>,>,>,>,>,,,>,,,,,>,,>,>,,,>,,>,>,>,,>,,>,>,,>,,,>,,,,,,,>,,,,>,>,,>,,,,,>,,,,,,,>,,,,>,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,,,,,,,,,,,,',,,,,,',,,,,,,,',,,',',,',',,',,',,,',,',,',,,'',,',''',,,','',',',',',',',',',,'',',',','',',''',','',','','''',','''',,''',',''',''','''','''''''''''',''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>;>>;;>>>;>>;>>>>;>>>>>;>;>>>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>,>,>,>,>,>,>,>>>,>>,>,>>,>>,>>>,>,>,>>,>,>,>,>>,>>,>>>>,>,>,>,>,>,>,>,>,>,>,>>>,>,>,,>,>,>,>,,>,,>,,>,,,>,,,>,,,>,>,>,,,>,,,,,,,,,>,,>,,,>,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,',,',,,',',',,,',,,,,',,,',,',,,',',',',',',,,,',',,,,'',',,',',',',',',',','',',','',',','',',','',','','',','''',',''',''''',''','''','''',','',''','''''','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>>;>>;>>>;;>>;>>;>;>>>;>;>>>>>>;>>>;>>>>;>>>>;>>>>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>,>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>,>,>>>,>>>,>>,>>,>,>>>>,>,>>>,>,>,>,>,>,,,,>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,,>,>,,>,>,,>,>,,,>,,,>,>,>,,,,,,,>,,,>,>,>,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,',,',,,,,,,,,,,',',,,,,,,',,,,,,,',,,',',,,',,',,,',,,,',,,',,','',,',','',,,',',,',',',',',',',',',',',,','',',',''','','','','''',',''','''',',''',''','''','''''''','''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;>>;>;>>>;>>;>>>>;>>;>>>;>;>>>>>>>>;>>>>;>>>>;>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>,>>>,>,>>>>>>,>,>>,>,>,>,>,>,>>>>,>,>>,>>>,>>,>,>,>,,>>>,>,>,>>>,>,>,>>>>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,,,,>,,>,,>,,,,>>,,>>,,,,,>,>,>,>,,,>,,,,,,>,>,,>,,>,,,,>,,,,,,,>,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,',,',,,,',',',,',,,,',',,',,',',',',,'',,',,,,,',',',,,'',',',',',',',',',',','',','''',,',''',',',',',',''',',''',',''',''''',''',''',''''','','''''''''''''''''''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>>>;>>;>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>,>>>>>>>>,>>>>>,>>,>>>>>,>>>>>>>>>>>>,>,>>>>>,>>,>>,>>,>>,>>>,>,>,>>>,,,>,>>>,,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,,>,>>,>,>,,>,>,>,,,>,,,,>,>,,,,,,,,,>,,,>,>,,,,,,,,,,,>,,,,>,,,>,,,,,,>,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,',,',,,',,,',,,,,,,,',,,,,,',,,',,,,,',,,',,,',,,',,',',','',,',,','',,',',',',',',',',',',','',',,',''',','',','''','',','',','''',','',',''',''','''','''''''',''',''','','''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>;>>;>>>;>>;>>;>>>;>>>;>;>>>>;>>>;>>>>>>>>;>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>,>,>,>,>>>>>,>,>,>>,>>,>>,>>,>>,,>>,>>>,,>>>,>>,,>>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,>,>,,,,,>,,>,>,,,>,,,,>,>,,>,>,>,>,>,,,>,,,,,,>,,>,>,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,',',,',,',',,,,',,',',',,',',,',,'',,',,,',',,,',',',',,',',,,',',',',',',',',',',''',',',','','''',,'','','',''',','','','''',''','''','''','',''''','''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>>;>>>;>>;>>;>>;>>>;>>>;>>>>;>>>>>>>>>>;>>;>>>>>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>,>>>>>,>,>>,>,>>>,>>>>>>>>>>>>>,>,>>,>>>,>>,>>>,>,>>,>>>,>>,>,>>,>,>,,>>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>>,,>,,>,>,,>,>,>,,,>,,,,,,,,,,,>,,,>,>,,,,,,,,>,,>,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,',,,,',,',,,,,,,,,,,,,,',,,',,,,,',,,',,,,',,',,,',,',',,,',',,',,','',,','',',',',',',',','','',,,'',','',',',,''','','',''','''',''''''',''',''',''''','''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>>;;>>;>;>>>>>>;>>>;>>;>;>>>;>;>>;>;>>>>>>>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>,>>>>>>>>>>>>>>>,>,>,>,>,>,>>>>,>>,>>>,>>,>>,>>,>,>,>>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,>,>,>,,>,,>,,,>,,,,>,,>,,>,>,>,>,>,>,,,>,,,,>,,>,,,,,,,,,,,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,',,,,,,',',,,',',',,,,',,,',',,',,',',,',,,',,',',,',',',',',',',,,',',,',',',',',',',',',','''',',','','','',,'','','','',','',',',',''',''','','','''',''''',''''''','','''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";;>>;>>>>;>>>;>;>;>>;>>>;>>>>>>>>>>;>>>>>>;>>;>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>,>>>>>>>>>>>>,>>,>>>,>>,>>>>>>>>>>>>,>,>>>>,>,>>,>>,>>,>>,>>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>>,,,,>,,>,>,>,>,>,>,,>,,>,,,,,,,,,,,,,>,,,,>,,,,,>,,>,,>,,>,,>,,>,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,,,,',,,,,',,,,,,,',',,,',,,,,,,',,,,',,,',',',,',',,,',,,',',,','',,',',',',',',',',',',',',,,','',','','','',',','','',','',''''''''',''','''''''''','''','''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;>;>>;>>>>;>>;>>;>>>;>;>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>>>,>>>>>,>,>,>,>,>>>>>>,>,>>>>,>>,>>,>,>>,>,>>,>,>,>>>,>,>,>,>>,>>,>,>,>,>,>,>,>,,,>,,>>,>,,,>>>,,>,,>,,>,,,>,,>,,>,,>,>>,>,>,>,>,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,',,',,,,,',,,',','',,',',,',',,,,',,',,'',,'',',,',',,,',',',',',',',',','','',''',',','',',','',''',''''','''','',',',',''',''','',','','''',''''''''',''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>>>;>;;>>>>>>>;>>;>>>>;>>>;>>;>>>;>;>>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>,>>>>,>>>>>>>>>>>>,>,>,>>>,>,>>,>>>,>>,>,>>>,>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,,>>,>,>,,,,>>,,,,,>,>,,>,,>>,,>,,,>,,>,,,,,,,,,,,,,>,,,>,,,>,,>,,,,,>,,,>,,,,,,>,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,',,,,,',,,,',,,,,',,,,,,,',',,,',,,,,,,',,',,',,,,',',',,',,,',,,,,'',','',',,',',',',',',',',',',',',','',','','','',,'',',','',','',''''''',''',''',''''''''',''','''''''''','',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;;>>;>>>;>;>;>>>;>>>;>>>>;>>>>>;>>>>>>;>>>>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>,>>,>>>>>>>>>>>>,>>>>>>>,>>>,>,>,>,>,>>>>>>,>,>>>,>>>,>,>,>>>,>,>>>,>>,>,>,>>>,>,>>,>,>,>,>,>,>,>,>,>,,>,>,>>>,,>,>,>,>,,>,,>,,,>,,>,,,>,,>,>,>,>,>,>,,,>,,,,,,,,,,>,,,,,,>,,,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,',,,',,,,,',',,,,,,',,,',',',,,',,',,',',',,,',',',,',''',,',,,,',',',',',',',',',',','',',','',,'','',',',''','',''','''','',',',''',''',''''',','',''''''','',''','''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>>>;>>>>;>>>>>>;>>>;>>>;>>>>;>>>>>;>>>>>;>>>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>>>,>,>>>>,>>>>>>>>>>,>,>,>>,>>,>>,>,>>>>>,,>>,>,,>>,>>,>,>,>,>,>,,>,>,,>,>,>,>,>,>,>,>,,>,,,>,>,>,>,,,>,,>>,,>,,,,>,>,,,>,,,,,,,,,,,,>,,,>,>,,>,,,,>,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,',',,,,,,',',,,,',,,,',,',,',,',,',,,'',,',,',',',,,,','',',',',',',',',',',',',',,''',',,'','','',''',',',''','',','','''''',''',''',',''''''''''',''''''','''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>;>;;>>>;>;>>>;>>>;>>>>;>>>;>;>>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>,>>>,>>,>>>>>>>>>>,>,>,>,>>>>>>,>>>,>>,>>>,>,,>,>>,>>>>>,>,>,>>,>,>,>>,>>,>,>>,>,>,>,>,,>,>,>,>,>,>,,>,,,,>>,,>,,,>,,>,>,,,>,>,,>,>,>,>,>,>,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,',,,,',,,',,',,,,,,',,',,,,',',,',,,,',,',,',,',,',',,',,',,,',,''',',,',',',,',,',',',',',','','',,',''',',',','',,'',''',',',''',''',','''',''','''''','',','',''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>>;>>>>>;>>>>>;>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>,>,>>,>>>>>>>>>,>,>>>>,>>,>>>,>>>>,>>,>>,,>,>>,>>,>,>,>,>,>,>,>,>,,>,>,>,>,>>,,,>,>,>,>,>,>,>>,,>,>,>,>,>,>,,,>,,>,,>,,,,,,,,,,,,>,,,,>,>,,,,,>,>,,>,,>,,>,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,',,,,,,,,,,,,,,',,,,,,',',,,,,,,',',,',,',,,,,',,',,,',','',,',,,,,',',',,',','',',',',',',',',','',',,'','','',''','',','''''','',',''',',''',''',','''''''''''''''''''''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>;>;>>>;>;>>>;>>;>>>>;>>;>;>>>>>;>>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>,>>,>>>,>>,>>,>>>>>>>>,>,>,>,>>>>>,>,>,>>>,>,>,>,>>,>>,>>,>,>>,>,>>,>>>,>,>>>,>,>>,>,>,>,>,,>,>,>,,>,,>,>,,>,,>,,,>,,>,,>,,>,,>,,,>,,>,>,>,>,>,>,,>,,,,,,,>,>,,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,',,',,',,,,',,',,,,',',',,,,,',,',,',',,,',,'',,',,,,',',''',',',,',',',,',',',',',',','',','''',,'','','',,'',','',',','','''',''''',''','''''','',''','','''','','''''''''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>;>;>>;>>;>>;>>;>>>;>>>>>>>>>>;>>>;>>>;>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>,>>>>>>>>>,>,>>>>>>,>,>>>,>>>,>,>,>,>>,>,>,>,>,>,,>>,>,,,>,>,,>,>,>,>,>>,>,,>,>,>,,>,>,,>,,>>,,>,,>,,,,,>,,,>,,>,,,,,,,,,,,,,,,>,,,>,,,,,,,,>,,>,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,',,,',,,,',,,,,,,',',,',,,',,',',,',,,',,,'',,',',,,',,',',',','',',',',',',',','',',,,'',','',','',',''','',''','',',''',',''',''','','''''','''''',''''''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;;>>>>;>>>>>;>>;>>>;>>>;>;>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>,>>>>,>>>>>>,>>>>>>>>>>,>,>,>,>>>>,>,>,>>>,>>>>,>>,>>>,>>,>>>,>>,>,>>>,,>>,>>>,>,>,>,>,>,>,,>,>,>,,>,>>,>,,>,,>,,,>,>,,>,>,>,,>,>,,,,>,>,>,>,>,>,>,,,,>,,,,>,,>,,,,,,,>,,,,,>,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,',,,,,',,,,,,,,,',,,',',',,,,,',,',,,',,,,',',',,'',,',,',,'',',',',,',',,',',',',','','',,',''',','',','',''',','',''','','''','''''',''',''''''',','''',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>;>;>>;>;>>>;>>>;>>>;>>>>>>>;>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>,>>>>,>>>,>>>>,>,>>>,>>>>>>>>>,>,>>>,>>,>>,>,>>,>>,,>>,>>,,>>,>>,>,,>>,>,>>,,>,>,>,>,>,>,>,,>,>,>,,>,,>,>,,>,,>,>,,>,>,,,>,,>,,,>,>,,,,,,,,,,,,,,,>,,,,>,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,',,,,',',,',,',,,,,,,,',',,,,',',,',',,',,',',,,',',,',,,',',',',,','',',',',',',',','',',','',',''','',,'',',''','','',','',',',''',''','','''''',''',''',''''','''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>;>>>>>>;>>>;>>>;>>>>>;>;>>>;>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>,>>>>>,>>,>,>,>,>>>>>,>>>,>>,>>>,>>,>,>>,>>,>>>,>,,>>>>,>,>,>,>>,>,>,>,>,>,>,>>,>,>,>>,>,>,,>,>,>,>,>,,>,,>,>,>,,>,,>,,>,>,>,>,>,>,>,,,>,,,,,>,,>,,,,,>,,,>,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,',,,',,,,,',,,,,,,',,',',',',,,',',',,,',,,',,',',,',',,,',','',,',,','',',,',',',',',',',','',',',','',',',','',''',',',''',''',''''''',''',''',''','''''''''''''''''''',','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>>;>;>;>>>;>>>;>>>>;>>>>>>>>>>>;>>>>>>;>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>>>>>>,>>>,>>>>>,>>>>>,>>>>>>>>>>>,>,>>,>,>>,>>>,>>,>,>>>,>,>>,,>>,>>,,,,>,>>,>,>,>,>,>,>,>,>,>,,,>,,>,,,,>,>,>,,>,,,,>,>,,>,,,,,>,,>,,,>,,,,,,,,,,,,,>,,,,,>,,,,,,,>,,,,,,,,,>,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,',,,,,',,,,,',',,,,,,,,,,,,',,,',,,,',,',',,',,,',,',',',,',,',',',,',,,'',',',',',',','',','',',',','',',''','',,''''',',''','''',',''',''',''''''','',','','''''',''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>;>>;>>>;>;>>>;>>;>;>>;>>;>>;>>;>>>>;>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>,>>>>,>,>,>,>,>>>>,>>>,>>,>,>>,>>>>,,>>>,>,>>,>>,>>>>>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>>>,>,,,>,,>,>>,,,>,>,>,>,,,>,,>,>,,>,>,>,>,>,>,,,>,>,,,>,>,,,,,>,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,',,,,,',',,,',,,,,,,',',',',',,,',,,',',,',,,,',',',,',,,',',',',',',,',',',,',',',',',',',','',,',',''',',''',,'',''',','''',','',','''',''',''',',','''''''''''',',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>>>;>>>>>;>>;>>>>>>>>>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>,>>>>,>,>>>>>,>>>>>>>>>>>>,>>>,>>,>>,>>,>>,,>>>,>,>>>,>>,,>,>,,>,>,>,,>,>,>,>,>,>,>,>,>,>,,>,,,,>,>>,,>,>,,>,>,,>,,,,>,>,,,>,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,>,,>,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,',,,',',,,',,',',,',,',',',',,,',',,',,'',',','',',',',',',','',','''',',,','',,''',',','',',','','',''',',''',''',''''''','','',',''''''','''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>;>>>;>;>>;>>>;>>;>>;>>>>>;>>>>>>>>>;>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>,>>,>>>,>>>>>>,>,>>>,>,>,>,>,>>>,>,>>>>,>>,>>,>>>,,>>,>,,>>,>>,>,>>,>,>,>>>,>,>,>,>,>,>,>,>,,>,>,>>,,>,,,>,>,,,>,,>,,>,>,,,,>,>,,>,,,>,>,>,>,>,,,,,>,,,>,>,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,',,,',,',,',',,,,,,,',',',',,,,',,',,',,,',,,',,,',,,',',,'',',',',',,',',,',',',',',',','',',',',,','''','''',',''',',''','','','',''''',''',''','''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;;>>>;>>>>;>>>;>>>>>;>>>>;>>>>;>>>>;>>>>>>>>;>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>,>>>>,>,>>,>>,>>,,>>>>,>>>>,>>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,,>,>,,>,>,,,,>,>,,>,,>,,>,,,,,,,,,,>,>,,,>,,,,,,,,,,>,>,,,,>,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,,,',,',',,,,,,,,',',,',,',,',',,',,',',',',,,',,,,,',,',',',,',',',',',',',',',,',',','',',,',',',,''',,'','','','','','',',''',''','''',','','',''','''','''''''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>;>>>;>>>>;>>>;>;>>>>>;>>;>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>,>>,>>>,>>>>>,>,>,>,>,>>>,>,>>>,>>>,>>>>>,>,,>>,,>>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>>,,,>,>,,>,>>,,,>,,,>,,>,,,>,>,>,>,,,,,,,,,,>,,,>,,>,,,,,,,,,,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,',,,,,,,,,',',',,',,,,',,,,',',',,,,,,,,,',,',,,,',,',',',,','',',',','',,',,',',',,',',',',',','',''',','','',''',''',''',''','',''''',''''''',''',''',''''''''',''',''','''','',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>>;>>;>;>>>;>>>>;>>;>>>>>;>;>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>>>>,>>,>,>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>>>,>,>>,>>>,>,>,>>>,>>,>,>>>,>,>,>>,>>,,>,>,>,>,>,>,>,>,>,,,>,>>,>,>,>,>,,,>>,>,,>,>,,,,>,,,>,,>,,,>,,,,,,,,>,>,>,,>,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,,,,',,,,,',,,,,,,,',',',',,',,',',,',,,,,',',,,,,,',',',,',',',',',',',',',',',',',',','',',','',,'',,',','',,'',''',','',',',''',''',''','','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>;>>>;>>>>;>>>;>>>>>>>>>;>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>>,>>,>,>>,>>>>>>,>,>,>,>,>>>,>,>>>>,>>,>,>>,>>,>>,>>,>>,,>,>>>,,>,>,>>>,>,>,>,>,>,>,>,>,>,>,,,,>,,,>,,>>,,,,,>,>,,>,>,,>,>,,,,>,,>,>,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,',,,',,',,,,',,,,',',',',,,,,,,,',,',,,',,,','',,,','',',',,',',',',',,,',',',',',',',',',',',',','',,''','''',','''','','','',''','',''',''','''''''''','','''''',''''''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;>>>;>;>>>;>>>>;>;>;>>>>>;>>;>>>>>>;>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>,>,>>>>>>>>>>>>,>>>>,>,>>,>>>>,>>,>,>,>,>>,>>>,>,,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>>,,>,,,,>>,>,,,>,,>,,>,,,>,>,>,,,,,,,,,>,>,>,>,>,>,,>,>,,>,>,,,,,,>,,>,,,>,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,',,,,,,,,,,,,,,,,,,',,,,,,,,,',',',',,,,,',,',',,',,,',',,,',,',',,',,',',''',',',',',',',',',',',',',',''',','',,'',',',''',','',''',''''',''',''',','',',''','',','''','',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>>;>>>>>;>>>;>>>>>>>>;>>;>>>>>>>>;>>>>;>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>,>>,>>>>>>>>,>,>,>,>,>,>>,>,>>>,>>,>,>>,>>,>,>>>,>,>,>,>>>,,>,>>,>,>,>,>,>,>,>,>,>,,>,,>,,>,>,,>,>,>>,>,,>,>,>,,,,>,,>,,>,,,,>,>,>,>,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,',',,',,',',,,,',',',,,,,,,,,','',,,',,,,',,'',',,',,',,,',',',',,',,,,',',',',',',','',',','','',,'','',''',''',',','''','',','','''',''','''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>>;>;>>>;>>>;>>;>>>>>>>>;>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>>>,>>>>>,>,>>,>>>>>>>>>>>>>>>>,>>,>>,>>>>,>>,>>>>,>,>>>,>,>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,,>,,,>,,>,,>,,>,>,,>,,>,,>,>,,,,,,,,,>,>,>,,>,,,>,,>,,>,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,',,,,,,',',',',,,,,',',,',',,',,,,,',',',',',',',',',,'',',',',',',',',','',''',',','',',',',',',',''''',','','','''',',''',''',',','',',''','''',''''','',''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>;>>>>>;>;>>;>>>>>;>;>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>,>>>>>>,>>>,>>>>>>>>>,>,>,>,>,>,>,>,>>,>>,>>,>,>>,>,>,,>,>>,,>>>,>,>,>,>>,,>,>,>,>,>,>,>,>,>,>>,>,,>,>,>,>,,>,>,,>,,>,,>,,,>,,,>,,>,,,>,>,>,,>,,,,,,,,,,,>,,,,,,,,>,,,,,,,>,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,',,,',',,',,',,,,',',',,,,,,,,',',,,,',,',,',,'',',',,,',,,',',,,','',,',',',',',',',',',,'',,',',',','''','','','',','''',''','',','''',''',''''''''''''',''',''''','''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";;>>;>>;>;>>>>>>>>>;>>>>>>>>;>>>>>>>;>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>>>,>,>>>>>>>>>>>>>>>>>,>>,>>>,>>>,>>>,>>>>>,>>>,,>>,>,>,>,,>>>>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,>,,>,,>,,>,>,,>,,>,>,,>,,,>,,,,,,>,,>,>,>,>,>,,,>,,>,>,,,,,,,>,,,,,,>,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,,,,,',,,,,,,,',',',',,,',',,',,',,',,,',,,'',,'',,','',,',,,',',',',',',',',','',,'',',','',',,'','',',',','',,''','',''''',''',''','',''','','''''''''''''''''','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>>;>>;>;>;>;>>>>;>>>;>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>,>>>>>,>,>,>,>,>,>,>>>>,>>,>>,>,>>,>,>,>,,>>,>>>>,>,>>>,>>>,,,>,>,>,>,>,>,>,>,,>,>,>,>,,>,>,>,,>,>,>,,,>>,,>,,,>,,,>,>,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,',,,,,',,',',',,,,,',',',,,,,,,,,',,,',,,',,,',,'',,'',,,',,,',',,'',,'',',',',',',',',','','','',''',,'','',','','''''',''',','''',',''',''',''',''','''''','','''','''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>;>>>>;>>>>>>>>;>>>;>>>>;>>>>>;>>>;>>>>>;>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>,>>,>>>>>>>>>>,>>,>>>>>>,>>>>>>>>>>>>>>,>,>>>,>>,>>>,>>,>>,>>,>,>,,>,>,>,,>,>,,>>>,>,>,>,>,>,>,>,>>,,>,,>,>>,>,,>,>,,,>,>>,,,,>,,>,,>,>,,,>,,,,>,>,>,>,>,>,,>,,,>,>,,>,>,,,,,,,>,,,,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,',,,,,,,,,,,,,,,,,',,',,,,,,',',',',,',',,,',,,',,',,,',,,'',,',',',,',,'',,,,',',',',',',',',,',',',',','','','',',',',,','',','',',','''',''',''',''''''''',''''''','''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>;>>>>;>;>;>>>>;>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>,>,>>,>>>>>>>,>>,>>>,>,>,>,>,>,>>>>,>,>>,>>,>>>,>>,>>,>>>,>>>,>>,>>,>>,>>,,>,>,>,>,>,>,>,>,,>,>,>,>,,,,>,,>,,>,>,,,,>>,,>,,,>,,,>,>,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',',,',,,,,,,,,,',',,,,,,,,,,',,,',',',',,',',',,',,,',',,',',',',,','',',',',',',',',''',',','',',',','',''','''','''','',''','',',''',''',''','','',''','',''''''''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>>;>;>>>>>>>;>>>>>>;>>;>>;>>>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>>,>,>>>>,>>>,>,>,>,>,>>,,>>,>,>,>>,>,>,>,>>>>,>,>,>,>,>,>,>,>,>,>,,>,>>>,>,,>,>,,,>>,,,>,>,>,,,>,,>,,,,>,>,>,>,>,>,>,,>,,,,,>,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,',',,',',,,,,,',',',',,,',',,,',,,',,',,',',',',,',',,',',',',',,',',',',',',',',,','',',,',',''','',,',',,'',','','''',''''''',''','',''','''''','''''''',''',''''''''''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>;>>>>;>;>>;>>>;>>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>,>>>>>>>,>>,>>,>,>,>,>,>,>,>>>>,>,>>,>>>>,>>>,>>,>>>,>>,>>,,>,>,>,>,,>,,>,>,>,>,>,>,>,,>,,,>,>,>,,,,>,>,,,>>,,,>>,,,,,>,>,,>,,>,>,,,,,,,,,,,,,,,,,>,,,,,,,,,>,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,,',',',,,,,,,,',,,,,',,,',,',,,',,,',,,',,',',',,',,',,'',',',',',',',','','',','''','',,'','''',''',''',''',','',',',''','''''','''','',''','''''''''''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>>;>;>>>>>>>>>>>;>>;>>;>>>>>;>>;>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>,>>>>>>>>>,>>>>>>,>,>>>>>>,>>>>>>>>,>>>>>>,>,>>>,>>,>,>>>,>>,>>,>,>,>>,>>>,>>,>>,>>,>>,>,>,>,>,>,>,>>,>>>,,>,,>>,>,,,>>,,,>>,,,>,>,>,,,>,,,>,,,>,,>,>,>,>,>,>,,,,,>,,>,>,,,,,,,>,,,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,',,,,,,',,,,',,',,',',,,,,,,,',',',',,,',',,,',,',,',',',',',',',,',',',',',',,,',',',',',',',',',',',',,',','',',',','',','','',',''',','''',''',',',''''''''''''''','''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>>>>>;>;>;>>;>>>>>>>;>>>>;>>>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>,>,>>>>,>,>,>>>>,>,>>,>>,>>,>>,>>,>,>,>,>,>>,>>,>,,,>>,>,>,>,>,,>,>,>,>,>,>,>,,,>,,,>,>,>,,>,>>,,,>>,,,>,,,,>,,>,,>,>,,>,,,>,,,,,,,,,,,,>,>,,,,,,,,,,,>,,,,,,,,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,',,',,,',,,,,,,,,,,,',,',,,,,,,,,,',',,',',',,',,,',,',',,',,,',',',',',','',',',',',',',','','','','',',','',''',','','','','''',''''','''',''''''','',','','',''''','''',''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>>>;>;>>>>>>>>>;>;>;>>>>;>>>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>>>>,>>>,>>>>>>>,>>>>>>>>,>>,>>>>,>>,>>,>>,>>,>>>,>>,>,>>,>>>>>,,>,>,>,>,>>,>,>,>,>,>,>,>,>,,>>,>,,>,>,,,,>>,,,>,>,>,>,,>,,>,,,,>,,,,,,>,>,>,>,>,,,,,,,,>,,>,,>,,,>,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',',,',,,',,',',',',',,,,,',,,,,',,',',,',,,',,',',,,',,,',',,,',',',',',',',',,',',',',',',',','',,'',','','','',',',',','',',''',',','''''''''''''',''''''''''','''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>>>>;>;>>;>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>>,>,>,>>>>>>,>,>>,>>,>>,>>,>>,,>>,>>>,>,>,,,>,>>>,>>>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>>,,,,>,,>,>,,,>,,,>,,>,>,,>,>,,,,,,,,,,,,>,,>,,>,,,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,',,,,,,,,,,,',,',,,,,,,,,,','',,',',,',,,,',,',',,',',,'',',',',,'',',',',',',',','',',',','','',''',''','','','','''',''''',''''''',''''''',','',','',''''',''''''',''',''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>>;>;>>>>;>>>>;>>>;>>>>>>>>;>>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>>>,>>>>>>>>>>>,>>>>>>,>,>,>>>>,>>,>>,>>,>>,>>>>,>,>,>,>>>>>,>,>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,,>>,>,>,,>,,>,,>,>,,>,,,>,,,,>,>,>,>,>,>,,,,,,,,,>,,>,>,,,,>,,,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,',,',,,,',,,',,',,,,,,,',',',',,,,,,,',,,',,,',,',',,',',,',',,,',',,'',,,,',',',',',',',,',''',',',',',',',,'','','','',',''',',''',',','''',','''''''''''''','''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>>>;>>>>>;>>>;>>>>;>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>,>>,>>>>,>>>,>>>>,>,>>,>>>>,>,>,>>>>>>>,>>>,>>,>>>>>,>>,,>,>>,>>>,>,,>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,,>>,>,,>,>>,,,>,,>,,>,>,,,>,,>,,>,,,>,>,,,,,,,,,,,,,>,>,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',,,,,,,,,,,,,,,,,',,,,,,',,',,,,,,,,,',',',,',',,',',',,,',',,',',,',',',',',,''',',',',',',','','',,',',',','','''','',',',','',','','',',''''',','''','','',''',','''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>;>>>;>;>>>;>>>>;>>>>>>>>>>;>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>,>,>,>,>,>>,>>>,>,>>,>>,>>,>>,,>>,>>>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,,,>,,>,,>,,>,,>,,>,,,,>,>,,,,,,>,>,>,>,>,,,,,,,,,>,,>,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,',,,,',',,,',,',',',',,,',,,',,',,',,,,,',',,,',,',,',',',',,',',,,',',',',',',',',','',',''',',''',,',','','''','''',''','''',',''''','',''''''','''''',''''''','','''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>>;>>>>>>>>>>;>>>;>>;>>>>;>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>>>>,>>,>,>>>,>,>,>,>>>>>>>>>,>>>,>,>>,>>,>>>,>>,>>>,>,>,>,>,>>>,,,>>,>,>,>,>,>,>,>,,>,>,,>,>>,,>,,>,>,>,,>,>,>,,>,,,,>,>,,,>,>,>,,,,,,,,,,,,>,,>,,,,,,,,,>,,,,,>,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,',,',,',,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,',,','',',,'',,',,',,,',',,',',',',',',',',',',',',','','',,','',,'''',','',',''',','','',',''''',','''''','','''''','''''',',''''''',''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>>;>>;>>;>>;>>>>>>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>>>,>>>>>>,>>>>>>>>>,>>>>>>>>>,>,>,>,>>,>,>>>,>>,>>,,>,>,>,,>>,>,>,>,>,,>>>,>,>,>,>,>,>,>,>,>,,>,>>,>,,>>,>,>,,>,>,,>,,,>,,>,>,,>,,>,,,,,,,>,>,>,>,>,,,,,,,>,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,,,,,,,,',,',',,,,',',',',',',',,',,',',,',,,',,,,,,',,,',',',',',',',',,',',',',',',',',',','',',',''',','',',,'''','',',',''','',''''',','''',',',''''','',''','',''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>>>>;>>;>>;>>;>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>>>,>,>,>>>>>>>,>>,>>>,>,>>,>>,>>>>>,>>>>,>>>,>,>>>>,,>>,>,>,>,>,>,>,>,>,>,>,,,>,,>,,>,,,,>,>,,>,,>>,,>,,,>,,,>,,>,>,>,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,>,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,',,,,,',,,,,,,,,,,,,,,,,,',,,',,,',,',','',',',,',,',',',,',',',',',',',',',',',','',',',',,,',',''','',,,','','''','','',',',''''','''''''','''''''''''''''''''','','''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>;>;>>>>>>>>>;>>>>>;>>>;>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>,>,>>>>>>>,>>,>>>>>>,>,>,>>>,>>>,>>>>,>>>,>>,,>,>>,,>>,,,>>>,,,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>>,,>,,>,>,,,>,,,>,,>,>,,>,,,,,>,>,>,>,>,,,>,,,,>,,>,,>,>,,,>,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,',,,,,',,,,,,,',,,',,',',',',',',',,,',,,',,',,',,,,',',,',,',,,',',,',',',,,',',',',',',',',,',',',''''',',,'','''',','',','','','','''',',''',',',''''',',',''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>>>>;>>;>>>>>>>;>;>>>>>>>;>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>,>>>>,>>>>>>>>,>,>>>>>>>,>,>,>>>>>>,>>>,>>,>,>>>,>,>,>>>,>,>>>,>>>>,,>>>,>,>,>>,>,>,>,>,>,>,>,,>,,>,>,,,>,,>,,,>,,>,>,,>>,,>,>,>,,,,>,,>,>,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,,,,',,',,,,,,,,,,,,,,,,,,,,,,',',,',',,',,,'',,',,',',',,',','',',,,',',',',',',',',','',''','',,,,''''','',',''','''',''','','','''''',''''''','','''''','''','',''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>;>>;>>>;>>;>>>>>>>;>>>>>>>>>;>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>,>>>>>>>>>,>,>>>,>>,>>>>,>,>>>,>,>,>>>,>,>,>,,>,>,>,>>,>,,>,>,>,>,>,>,>,>,,>>,>,>>,>,>,,>,>,>,,,>,,,,>,,,,,>,>,,>,,,,,>,>,>,>,>,,>,,,,,>,,>,>,,,>,,,,>,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,,,',',,',',',',',',',',,,,',,,,',,,',,,',,',,',,',',',,,,',',',',',',',',',',','',',',',''''',',,',','',','',',',','',''''',',',''',',',''''''','''',''''''''',''''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>;>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>>,>>,>>>>>,>,>,>,>>>>>,>>,>>,>,,>>>>,>>,>>,>,,>>,>>,>>,>>,>,>,>,>>,>,>,>,>,>,>,>,>>,,,,>,,>,>,,>,>,,,>,>,>,>,,,>,>,,,,>,,>,>,>,,,,,,,,,,,,,,>,,,,,,,,,,>,,,>,,,,>,,,,,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,',',,,,,,,,,,,,,,,,,,,,,,,',',,',',,',',',,',',',,',,,',,''',,',',,',',',',',',',',,',',',',,',,','''','',''',,''',''',''',',''''''','''''''',',''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>;>>;>>>>>>>>>>>;>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>,>>>>>>>>>>,>>,>>>>>>>>,>,>>>,>>,>>>>>,>,>>,>>,>>>>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,,>>,>,>,,>,>>,,,>,>,>,,,>,>,>,,,>,>,,>,,,,,,>,>,>,>,>,,>,,,,>,>,,,>,,,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,',,,,,,,,',,,,,,,',,',,',',',',',',',',,,',,',,',,,,',',,,',',,'',,'',,,',',',',',',',',',',','','','','','','',,'','',,'',','''','','','',',',''',',',''''''','''',''',''',''''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;>>>;>>;>>;>>>>>;>>>>>>>>>>;>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>,>>>>,>>,>>,>>>>>>>,>,>,>>>>>,>>>,>>,>,>>>>,>>,>,>,>,,>>,>,>,>,>>,>>>,>,>>,>,>,>,>,>,>,>,,>,,>,>,,>,>,,,>>,>,,,>,>,>,,,,>,>,,>,,,>,>,,,,,,,,,,,,>,,,>,,,,,>,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,',,,,',,',,,,,,',,,,,,,,,,,,,,,,',,',,,',,',',,,',',,,',',,',,',',',',',',',',',',',',',',',',',',','',','',',''','''',',''','','','''''',''''''','',''''','''''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>>>;>>>>>>;>>;>;>>>>>>>>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>>,>>>,>>>>>>>,>>,>>>>>>>,>,>>>,>>,>>,>>,>,>>,>>>,>,>>>,>>>,>,>,>>,,,>,>,>,>,>,>,>,>,>,>,>,>>,,>,>,>,>>,,,,,>>,,>,>,,>,>,,,,>,,>,,,,>,>,>,>,>,>,,,,,,,>,,,,,,>,,,>,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,',,,,,,,,',,,,,',',',',',',',,',,',',,,',,,'',,',',',,,',',',',',,,',',,',',',',',',','',',',',',',,''','',',','',,''',','','','''',',''',',',''''''',''''',''''''''''''',''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>>>;>>>>>>>>>>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>,>,>>>>,>>,>,>,>>>>>,>>,>>>,>>,>>>,>>,>,>>>,>,>,>,>,>>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,,,,,>>,>,,,>,,,,>,>,,>,>,,>,,>,>,,,,,,,,,,,,,>,>,,,,,>,,>,,,>,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,',,',',,,',,,,,,,,,,,,,,,,',,',,,,',',,',,,',,,',',',,,',',,,',',',',',',',',',',',',',','','',''',,'',''','',''',''',','','',','''','''''''',',''''',''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>;>>;>>;>>;>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>,>>>>>>,>>>>>>>>>>>,>,>>>,>>,>>>,>>,>>,>,>>,,>>,>,>,>>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,,>,>>,>,>,>,>>,,>,,>>,>,>>,,,,,>,,,>,,,>,,,,,>,>,>,>,>,,,,,>,,>,,,,,,,,,,,,,,,,>,,,,,,>,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,',,,,,,,',,,',,,,,,,,,,,,,',',',',',',,',,',,,',',,,',,',',',',,,','',,',''',',',,',',',',',',',',','',',',',',,'',',',,',','',',','''','','''''',''',',',''''',','''',''''''''''','''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>>>>>;>>>>>;>>>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>,>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>,>,>,>,>>>>,>>>,>>,>>>,>>,>>,>,>>>,>>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>,>,,>,,>,,,,>,,,>>,>,,>,,,>,>,,>,>,,,,,,,,,,>,,,,,,,,,,>,,>,,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,',',,,,,,,,,,,,,',,',,',,',,',,,',,',,',,'',,,,,',',,,,',',',',',',',',',',',',','','',''','','''''','',''''',',''','',',',''',''''''',''''''','''',''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>;>;>>>>>;>>>>;>>>>>>;>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>>,>>>,>>,>>>>>>>>>>>>,>,>>,>>,>>,,>>,>>,>>,>>,>>,,>>,>>,>,>>>,>,>,>>,>,>,>,>,>,>,>,>,,>,>>,>,>,>,>,>,>,,>>,,>>,,,,,>,,>,>,,,>,,,,,>,>,>,>,,,>,,>,,>,>,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,',,,,,,',,,,,,,',',',',',,,',,,,,',,',,',',,',,',',,,'','',,','',',,',,',',',',',',','',',',',',',,'',',',',,'','',,',''',','''''''''','',',','''''','''',''''''''',''''''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>;>>>>>;>>>>;>>>>>;>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>>>>>,>>,>,>,>,>>>>>,>,>>,>>>,>>,>>,>>,>,>,>>,>>,>,>>,,>,>>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,,>,,,>,,>,,>,,,,>,>,,,>,,,>,>,,>,>,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,',',,,,',,',,,,,,,,,,,',,,','',,',,',,,,',',',,',',,,',,',',,',,',',',,',',',',',',,','',','','',','''',''',','''',','''',',,',',',''''''''','','''','''',''',''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>;>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>,>>,>,>>>,>>>>>>>>,>>,>>>>,>>>,>>,>>>,>>,>>>,>>>,>,>>>,,>>>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,,>,,>,,>>,>,,,>,>,,>,,>,,,,,,,>,>,>,>,,,>,,>,>,,>,,,>,>,,,,>,,>,,,,>,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,,,,,,',,,,,,',,,,,,,,,,,,,',',',',',,,,',,,,,',,',,',',,',,,',,',,',',',,',','',',','',',',',',','',','',',',','',',,'',,'',',','''',','''''''''''',',',','''''','''''''''''''''''',''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>>>>>>;>>>>;>>>>>>;>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>,>>,>>>>,>>,>>>,>>>>>>>>>>>>>,>>>,>,>,>>>,>>>,>>>,>>>,>>,>,>,>,>,>>,,>>>,,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,,,>,>,,>,,>,,,>,>,>,,>,,,>,,>,,,,>,,>,,>,>,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,',,',',',,,,,,,,,,,,,',',,,',',,',,',,,',,',',',',',',,,'',',',,,,',',,',',',',',','',',','',',',''','',''',''','',',''',',',',',','''''''''',','''','',','',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>>;>>;>>>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>,>,>>,>>>>,>>>>>>,>>>,>>,>,>,>,>>>,>>>,>>>,>,>>>,,>>>,>,>,>,>>>,>,>,>,>,>,>,>,>,>>,>,,>,>,>>,>>,,>,,>,>,>,>,>,,>,>,,>,,,>,,,,,,>,>,>,>,,,,>,,>,,>,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,',,',',',',,,,',',,,',,,',,',,',',,',,,',,,'',,,',,,'',',','',',',',',',','',',',','',',,'','',,'',,'','','',','','''''''',',',','''''',''''''''''''''''''','''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>;>>;>>>>;>>>>>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>,>>>>,>,>>>,>>>,>>>,>>>,>,>>,>>,>,>,>>,,>>>,,>>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,,,>,,>,,>,,,>,,>,,,>,,,>,,>,>,,,>,>,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,,,,',,',,,',',,,,,,,,,,,',,,,,',,,,',,,',,',',,',,',',',',,'',',',,',',,',',',',',',',',,',',','',',''','',''',''','','','''','',',',',''''''''','''''','','''''',''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>>>>>>;>>;>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>,>>>,>>,>>>>>,>>,>>>,>,>>>>,>>>>,>>>,>>,>,>>>>,>,>>,>>>,>>>>,>>,>,>,,>>,>,>>,>,>,>,>,>,>,>,,>,>,>,>,,>>,>,,>,>,>>,,>,,>,>,,>,,>,,,,,>,,,,>,>,>,>,,,>,,>,>,,>,,>,,>,,,,>,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,,,,,,,,',,,,,,',,,,,,,',',',',,,',',,,'',',,',,',,',,',,',,,',,',',,',','',,',',',',',',',',','',''',',,',',',','',',',','''','',','','''''''''',',','''','',''''',',''''''''''',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>;>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>,>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>,>>,>>,>>>>>,>,>>>>,>>,,>>,,>,>,>,>,>>>,>,>,>,>>,>,>,>,>,>,>>,>,,>,,>>,,>,,>,,,>,,,>,>,>,,,>,>,,,>,>>,,>,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,',,,,',',,,,',,,',,,,,,,,',,,,,',,,,,,',,',,,,',',',',',,',,',',',',,',',,',',',',',',','',',',','''',''','',',','','',''','''','',',',',',''''''',''''''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>>>>>>;>>>>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>,>>>>>>>>,>>>>>,>>,>,>,>,>>>,>>>>>>>>,>>>,>,>>,>>,>,>,>>,>,>>>>,>>,>>,,>,>>,>,>,,>,>,>,>,>,>,,>,>,,>>,,>,>,>,>,>,,>,,>,,>,>,,,,>,>,,,,>,,,,,,>,>,>,,,>,>,,>,,>,>,>,,,>,,,,,>,,>,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',,,,,,,,,,',,,,',',',,,,',',,',',',,',,',',,,',,',,',',,',',',,',',','',',',',',',',','',',',',,,',',',',''','','','','',',''''''''''''''',',''''',',''''',''','''''','''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>;>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>,>>>,>,>>>>>>>>>>>>,>>,>,>,>,>>,>,>>>,>>,>,>,>>,>>>,>,,>>,>,>,>>,>,>,>>,>,>,>,>,>,>,>,>,,>>,,,>,>,>,,,>,,>,>,,>,,,,>,>,,>,,>,>,,>,>,>,,,,,,>,,,,,,,,,,,,,,,,>,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,',',,,,',,,,,,,',',,,,',,,',,',,',,,',',,',,',,',',',,,',',,',',,',',',',',',',',,',',''''','',''',',',','','','',''',',,',',',',',''''','',''''',''''''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>>>>>;>>>>;>>>>>>>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>,>,>,>>,>>>>>>>>,>>>,>,>>,>>>>>>,>>,>,>>>,>,>,>,>,>,>>,>,,>>,>,>,>,>,>,>,>,>,,>>,,>,>,>>,,>,,>,>,,>>,>,,,>,,,>,,,,,,,,,,,>,>,,,>,,,>,,>,>,,,>,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,',,,,',',',,,,',',,,',,',,',,,',,',',',',',,,,',',',','',,',',',',',',',',''','',',,,',','',','',''',',','',''',''''''''''''''',','''''''',''''',','''''','',''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>;>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>>>>>,>>,>>,>>,>>>>>>>>>>>>,>,>,>,>>,>>>>,>>>,>,,,>>,>,>,>,>>,>>,>,>>,>,>,>>,,>,>,>,>,>,>,>,,>,>,,>>,,,>,,,>,>,>,,>,>,,,,>,,>,>,,>,>,>,>,>,,,,,>,,,,>,,,,,,,,>,,,,,,,,,>,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,',,',,',,',,,,,',,,,,,',,,,,,,,',,,,,',',,,',,,',',',,,',,,',,''',,',',,',,,',',',',',',',',',,',',',''',','',','','',,''''',''',,'',',',',',',',''''','','''''',','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>>>>>;>>>>>>>>>>;>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>,>>>>>>>>>>>,>,>,>,>>>>>>>>>>,>,>,>>,>,>>>>,>,>>>,>>>,>,>,>>,>,>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,>>,,>,>,,,>,,>,,,>,>,,>,,,,>,,>,,,,,,,,>,>,,,>,,,,,>,,>,,,,,>,,>,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,',,,',,',,,',',',',,,',',,,,,',,',',,,,,'',,'',,',,,,'',',',,'',',,',',',',',',',','',',',','',','',','',''',,','',''','','''''''''''',',''''','','''''''','''''''''',''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>,>>>>>>>>>,>>,>>,>>>>>>>>>,>,>,>,>,>>>>>,>>>>,>,>>>>,>,>>,,>>>,>,>,>>,>,>>,>,,>,>,>,>,>,>,>,>,>,,>,>,,>>,,>,>,>,>,>,>,,,>,,>,>,,,>,,>,>,>,>,,,,>,,,>,,>,,,,,,>,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,',,',,',',,,,,,,,,,',,,,,,,,',,,,,','',,',,,',',',,,',,,',',',',,',,'',,',',',',',',',','','',',''',',','','','',',',''''',',','','',',',',',',''''','''''''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>>;>>>>>;>>;>>;>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>,>>,>>>>>>,>>,>>>,>>>>>>,>,>,>,>>>>>>>>>>>,>,>>,>,>>>,>,,>>,>,>>>,>,>,>,>,>>,>,,>,>>,>,>,>,>,>,>,,,>,>,>,>,>,,,>,,>,,,,>,,>,>,,>,,>,,>,,>,,,,,,,,,,>,,,>,,,,,,,,>,,,,>,,,,,,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,,,,,,,,,,,',,',,',,,,,',',',,,',',,,,,',,,',,',,,'',,',',,,',,',',',,',',',',',',',',',',,',,',',,'',',',',','','','',,','''''',''','''''''''''',','','',',''',','''''',''','''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>>>>>>>,>,>,>,>,>,>>>,>>>,>,>>>>,>,>>,>,>,>,>>>,>,,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>>,,>,,>>,>,>,,,>,,,>,,>,>,,,>,>,>,>,>,,,>,,,>,>,,>,,,>,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',',,,,,,,',,,,',',,,',',,,,'',,,',',,'',,',,',,'',,',,',',',',',',','',''',''',,','','','',',''','''',',',''','',',',',',',''''''''''''''''''''',','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>,>>>>>,>>,>>,>,>,>>,>>>>>>,>,>,>,>>>>>>>>,>>>,>,>>,>>,>>,,>>,>>,>,>>>,>,,>,>>>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,,>,,>,,>,,,>,,,>>,,,>,,>,,,,,>,,,,,,,,,,,>,,>,,,,,,,,,,,,,>,,,,,>,,,,>,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,',,,,,',,,',',',,,,,,',',',,',,',,,',',,,',',,,,',,',',,,',',',',,,',',',,,',',',',',',,',',',',''',','','',''',,'',','',''',',',''''''''''''',','','','','','','''''''''',''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>;>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>,>,>,>>,>>,>>,>>,>>,>>>,>>,>>>,>,>,>>,>>,,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,,>>,>,>,,>>,,,>,>,,,,>,>,>,>,>,>,>,>,,,,,,,,>,,>,,>,,>,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,',,,,',,,,,,,',',,,,,,,,,,',,',,',,',,',,',',',',,',',,',,','',',',,''',',',',',','',',',',',',',',',',',',''',','','','','''',',',',',','''''''''''''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>;>>>;>>>>>>>>>>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>,>>,>>>,>,>,>,>,>>>>>>>>>,>>,>>,>>,>>>,>>,>,>,>,>,>>>,>>,>,,>>,,>,>,>,>,>,>,>,>,>,,>,>,>,,>,,,>,>,,,,,>,>,,,>,>,,,>,>,,>,,,,,,,,,,,,,,>,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,',,,,,,',',',',,,',,',,',,',,',,',',,,,',',,',',,',,',,',',,,',',',',',',,',',','',','',''',''',',',''','','','',','''''''''''',',',','',',''''','''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>,>>>,>>,>>>,>>>>>>>>>>>>>>>>>,>,>,>,>>>,>>>>>,>>,>>,>,>>>,>>,>,>,>,>,>>>,>,>,>>,>,>,>,>,>,>,>,>,>,,,>,>,>,>,,>,>,>,,,>,>,,,,>,,>,,>,,>,>,>,>,>,>,>,,,,,,>,,>,,>,>,,,,,,,>,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,',,,,,,,,,,',,,,',,',,,,',',,,,,,,,,',,,',,',,',,',,',,,','',,,',',,'',',',',',',',',',',',','',''','',',',',',',',','',',','','','''''',',',',',','''''''''''''''',''''','''''''''''''''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>;>>;>>>>>>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>>,>,>,>>>>>>>>>,>,>>,>,>>,>>,>>,>,>,>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>>,,>,>,>,,>,,>,,>,,>,,,,,,,,,,,,>,>,,,,,,,,,,,,>,>,,,,,>,,>,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,,,',,,,,,,',,,,,,',',',',,,',,',,,,,',,',,,',',,,',',,,',,,',',',',',',',',',',',',,',',',','',',',''',','','','',''''',,',','''''''''''',',','',','','''','''',''''','''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>;>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>,>>,>>>>>>,>>>>>>>,>,>,>,>>>>>,>>,>>>,>>>,>>>,>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>>,>,,,>,,,,,>,,,>,,>,,>,,>,,>,,>,>,>,>,>,,,,,,,>,>,,>,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',',,,,,',',,,,,,,,,,',,',,',',,',,,'',',,'',,','','',',,',',,,',',',',',',','',',',',',,',','','','','','','',',''''','',',',',',',''''''''''''''','''''''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>;>>>>;>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>,>>,>>>>>>>,>>,>>>,>,>,>>>>>>>>>,>,>>,>>,>>,>,>>,,>>,>,>,>,>>,>>,>>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,,>,>,,>,>>,,>>,,>,,>,,>,,,>,,,,,,,,,,,,>,>,>,,,,,>,,,,,,>,,,>,>,,,,,,,>,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,,,,',,,,,',',,,,,',',',',',,',,,',,,',,,',,,,,',,,',',,,,,',',',,,''',,',',',',',',',',',',','','',',','',',','','','',',',''',''''''''''''',','','',','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>>>>>>>>>>>>>,>,>,>,>>,>>,>>,>>,>>>,>,>>,>,>>>,>>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>,,>,,>,>>,>,>,,>,>,,>,,>,,,>,,>,,>,,>,,,>,>,>,>,>,,,,,,,,>,,,,,,,>,,,,,>,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,',,',,,,',,,,',,,,,,,',,,,,,,,,,,,,,,',,,',,,',',','',,',,',,','',,,',',',,,',',',',',',',','',''','',',','','',''','',',''','''',',''',',',',',','''''''''''''','','''','','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>>>>>>;>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>,>>>>>,>>,>>>>>>>>,>>,>>,>,>,>,>>>>>>>>>>>>,>>,>>,>>,>,>>>>,>>>,,>>,>>,>,>,>>,>,,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,>,>,,>,>,,>,,>>,,>,,>,,,>,,>,>,,,,,,,,,>,>,>,,,>,,>,>,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,',,,',',',',',',',,',',',',,,',,,',',',,',',,,',',',',',',',',',',',',',,',',,',',','',',',',',',','',','',','','',''''''''''''','','',''','''''''''''''''''',''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>>>>>;>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>,>,>>>>>>>>,>>>>>>>>,>,>,>,>,>,>>,>>,>>,>>>>,,,>>,,>>>,>,>>,>,>>,>,>>,>>,>,>,>,>,>,>,>,>,,,>>,>,,>,>,,>,,,>,,>,>,,>,,>,,>,,,>,,,,>,>,>,>,,,,,,,>,,,,,,,,,>,,,,,,,,,>,,,,,,,,>,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,',,',,,,,,,',,',,,,,',,,,',,,,,,,,,,,,,,',,,',,,',,,,',,',,,',,',,'',',',,',',',,',',',',',','',','',',',',','',''',',''','''','''',''',',',',',',',','''''''','''',''''',''''''''''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>;>>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>,>>,>,>>>>>>>,>,>>>>>>,>>>>>,>>>>>,>>,>,>>>>,>>>,>,>>,>,>>>,,>,>,>,>,>,>,>,>,>,>,>,>,>>,,,>,>,,>,>,>,>,>,>,,,>,,>,,,,>,>,,>,>,,,,,,>,,>,>,>,,,,,>,,>,,,,,>,,,>,,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,',,,,,,',,,,',,,,',,,,',',',',',',',,',,,',,',',,',,'',',',',,,',,',',',',',',',',',',',',',','','','',',',','''',',',','',',''',''''''''''''''''',',',''''',''','''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>>,>>,>>>>>,>,>>>>>,>,>>,>,>>>,>>>,>,>>,>,>>,>,>>,>,,>>,>>>,>>,>,>,>,>,>,>,>,>,,,>>,>,,>>,>,,,>,>,,,>,>,,>,,>,>,,,>,,>,,>,>,,,,>,,,,,,,>,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,,',,,',,,,',,,,,,,,,,,,,,',,',',,',,,',',',,,,',,,',','',,',,',,',',',',',',',','','',',',',','''',',,'',','',','',','',',',',',',',',',''''''',''''',''','''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>>>>>>>>;>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>,>>>>>>,>,>>>>>,>,>,>>>>,>>,>,>>>,>>,>,>,>>,>>,>,>>,>>>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,>>,,,,>>,,>,>,,>,>,,,>,,>,,>,,,,,>,,,>,>,>,,,>,,>,>,,,,>,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,',,',,,',,,,,',,',',',',',',',,,',,,',,',',,,',,'',,',',,',,',',',',',',',',',',',',,',',,'','',',',,',''',',''','''','''','',''''''''''''''''''',''',','''''''','''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>;>>;>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>,>>>,>>>,>>>,>>,>>>>>>>>>>>,>>>,>,>>>>>,>,>>>>>>>>,>>>,>>>>,>,>>,>>,>>,>>,>>>,,>,,,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,,>>,>,,>,>,,>,,,,>,>,,,>,,,>,>,,,>,,,,,,,>,,,,,,,,,>,,,,>,,,,,>,,,>,,>,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,',,',,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',',,',,',,,,'',,',,,',',',',',',',',',',',',',',',','',',''',,',','',''',',''',',',',''',','','',',',',',',',',','''''''''','''''''',''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>,>>>>>>,>,>,>,>,>,>>,>,>>>,>>>,>>,>,>>,,>>,>>>>,>>,>>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,,>,,>,,>,,>,>,,,,>,,,>,,,,,>,,,>,>,>,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,',,',,',,,',',',',',',',',',',,,',,',,',',,,',,'',,',,,',',,,',',,,',,',',',',',',',',',,,'','',','',','',,'',',''',',''','','''''''''''''''''','','','''',','''''''','','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>;>>>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>>>>>,>,>>>>,>>,>,>,>>>>>>>>>>>>,>>>,>,>>,,>>,>,>>,>>>>,>,,>,>,>,,,>,>,>,>,>,>,>,>,>,,,>,>>,,>,>,,>,,>>,>,>,,>,>,,>,,>,>,>,>,,>,>,,,>,,,,,,,,>,>,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',,,',,,',',,',,,',,'',,,''',,,''',',',',',',',',','','''',',','',',''',''',''',','''','',''',',',',',',',',''''''''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>,>>>>>>>>,>,>>>>>>,>>>,>>>>>>>>,>,>,>,,>,>>,>>>>,>>,>,>>,>,>>,,>>,>>>,>,>>>>>>,>,>,>,>,>,>,>,>>>,,,>,>,,>,>,>,,,,,>,,>,,,>,,>,,>,,,,,>,,,,,>,,,>,>,>,,,,,,,,>,,,,,,,>,,>,,>,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,',,,',,,,,',,,,,',,',,',,,',,',',',',',,,,,',,',,,',,,',,',',,',',',,,'',,,,'',,,,',',',',',',',',',',',,'',',',,''',,'',,'',',''',','','',','''''''''''''''''','',','''''''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>,>>>,>,>,>,>>>>>,>>>>>,>>,>,>>,>>>,>>>>,>,>>,>,>,>,>,>,,,,>,>,>,>,>,>,>,>,,,,>>,>,>,>,,>,,>>>,>,>,,>,>,,,,>,,>,>,,>,,>,,,>,,,,,,,>,,>,,>,,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',',,,,,',,,',,,,,,,,,,,,,',',,',,,',',',,',,',,',',,,',',,'',',,'',',',',',',',',',',',','',,','','',,''',''',','','''',''','''',',',',',',','',''''''''','',''''''''''','''''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>;>>>>;>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>>>>,>>>>,>>>>,>>>>>>>>>,>,>>>,>,>,>>,>>>,>>,>,>,,>,>,>>,>>,>,>>,>,>>>>>,>,>,>,>,>,>,>,>>,,,>,>,>,>,,>,,,,,,,>,>,,,>,>,,>,>,,>,,,>,,>,,,>,>,>,,,,,,,,>,,,,,>,,,>,,,,,,>,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,',,,,,,,,,,,',,,,,,,,',',',',',',,,,,',',',,,,,',,',',',,,'',',,',,',',',,',,,',',',',',',',',',',''',','',''',','',,''','',,'',','',','''''''''''''','',',''','''''',''''''','''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>,>>>>>,>>>>,>>>>,>,>,>>>>>>,>>>>,>>,>>,>>>,>,>>>>>,>>>,>,,>,>,,>,>,>,,,>,>,>,>,>,>,>,,>,,>>,>,>,>,>,>,>,>,>>,,>,>,,,>,,,,,,>,,>,,,>,,,>,,,,,,,>,>,,,,,,>,,,,,>,,,>,,>,,,,>,,,,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,',,,,',,',,,,,,,,,,,,,,',',,,,,,',',',,',,,,,',',,,,',,'',,',',',',',',',',',',',',''',',,,',',,',','',',''',,'',''',''','''',',',',',',','''''''','''','''''',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>,>>>>>>,>,>,>>,>,>>,>>,>>,>,>>,>,,>,>,>,>>>,>>,>>>>,>,>>,>,>,>,>,>,>,>,>,>>,,>,,,>,,>,,>,,>,,,>,,,>,>,,>,>,>,,>,,,>,,,>,,>,,>,>,,,,>,,>,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,',,,,,,,',,',',',',',,,,',',--*-->,,',,'',',,','',,',,',',',',',',',',',',',',',',',''''''',''','',','',,''','',','','',','''''''''''''','','''''',''',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>>>>,>>,>>,>>>,>>>>,>>>>,>,>>>>>>>>>>,>>,>>,>>,>>>,>>,>>>,>>,>>,>,>,>,>,,>,>>,>,>,>,>,>,>,>,>,>,,,>,>,>,>,>,>,,>,,>>,,>>,,,>,,,,>,,>,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;**-,,',,,,,,,,',,,,',',,,,,,,,,,,,,,,',',,,=*&&&&&&-,,',,>=*-,,,,',',',',',,,',',',',',',',',',',',',',,',,',',,','''',''',,'','''','',''',',',',',',',''',''',','''''''',''''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>>;>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>,>,>>>>,>,>,>,>,>>,>>>>>,>>,>,>,>>>,>>,>,>,>>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>>,,>,>,>,>,,>,>,>,,>,>,,,>,,>,>,,>,,,>,,>,,,>,>,,,>,>,>,,,>,,>,,>,,,,,>,,>,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,;&&&&;,,',,,,,,,,,',,,,,,,',',',',',',,,,,,>*%&&&%&&&>,',,,*&&&-',',,,',,,','',,',,,',',',',',',',',',','','',','''',,,'',,''','',',''','','''''''''''''',''''''''''','',''''',''''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>,>>,>>,>>>>>>>>>>>,>,>>>>>>>>>,>>>,>,>>>,>>>,>>,,>,>,>>,>>,,>,>>>,>,>,>,>,>,>,>,>,>,>,,,>,,>>,>,,>,,>,,>,>,,>,,,>,>,,>,,,>,,,>,,>,,,>,,,,,>,,,,,,,>,,,,,,,,,,,,>,,,,,,>,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,*&&&&*,,,,',,',,,,,,',,',,,,,,,,,,,,,',',',&&&&%*&*&*,,','-&&&&&',,'',,'',',,'',',',',',',',',',',',',',,','',',',,'''',''',,'',''',','','',',',',',','''','',',''','''''''''''',''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>,>>,>>>,>>>>>>,>>,>>>,>>>>>>,>,>,>,>>>,>>,>,>,>>,>>,>>>,>>>,>,>,>>,>,,,>,>,>,>>,>,>,>,>,>,>>,>,>,,,>,>,>,>,>,,,,>,>,>,,>,,>,,>,,>>,,>,,,>,,,>,>,,,>,>,,,,,,>,>,,>,>,,,,,,,,,,,,,,>,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*%&&&*,,,,,,,,',,',,,,,,',,',',',',',,,,,,=&&&&=,,,,,',,,,-&&&&*,',,',',,',,',,,',',',',',',',',','','''',','',',''',','',''','',','''','',''''''''''',',''''''','''','','',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>;>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>,>>>,>>,>,>,>>>>>>>>,>,>,>>>>>>,>>,>>,>>,>,>>>,>,>>,>>>>,>,>>,,>,>,>,>,>,>,,>,>,,>>,>,>,>,>,,>>,,>,,,>>,,>,,>,>,,,,>,,>,,,>,,,,,>,,,,,,>,,>,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',>&&&&;,,,,,,',,,,,,',,,,,,,,,,,,,,,,',','>*&&&=,,',,,,'',,,&&&&-,,',,',',',','',',',,',',',',',',',',',,',',,','',','',',',','''''',','','',',',',',''''',','''''',''','''''',''','''',''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>,>,>,>,>>>>>,>,>,>>,>,>,>,>,>>,,>>>,>,>,,>,>>,>,>>,>,>,>,>,>,>>,>,>>,,,,>,,,>,>,,,>,>,>,,,>,,>,,,,>,>,,>,,,>,,,>,>,,,,>,>,,,,,,,,>,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,>*=;,',,',,,,',',,,,',,',',',',',',,,,,,-&%&*,',,',',,,',',=*;,',,',',,',',,,',,','',',',',',',',',','''',''',','',',''',''',',',','',''',''''''''',',''''','',''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>,>,>>,>,>>>,>>>,>>,>>,>,>,>>>>>>>>>>,>,>>>>,>>,>>>,>>>,>>,>>>,,>>,>>>,>,,>,>,>,>,>,>,>,>,>,,,>,,,>>>,>,>,>,,>>,,,,>,>,>,>,,>,>,,,,>,,>,,,>,,,,,>,>,,,,,,>,,>,,,>,,,,>,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',',,,*&&&-,,',,,',',',',',,,',',,',',,'',',',',,',',',',',',',','',,,',',','','',',,'',,'',''''','','',',',','''''',''''''''','',''','',''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>,>,>,>,>,>>,>>,,>>>,>>,>>,,>>,>>,,>>>,,>,>,>>>,>>,>,>,>,>,>,>,>,>,>,>>>,,,>,>,>,>,,,>>,>,,>,,,,,>,,,>,>,,,>,,>,,,>,>,,,,,>,,>,,,,,>,,,,,,,,,,>,,,,,,,,>,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,',,,',,,,',',,,',',',',,,,,','&&&&>,',,',,,,',,',,',',,',',',',,,',',','',',',',',','','',,''',',','',',''''',''',''',',''',','''''''',',','',''','',''''','''''''''''''''''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>,>>,>>,>>>>,>,>>>>>>>>>>>,>>,>>>,>,>>,>,>>>,>,>>>>,,>>>,>,>,,>>,>,>,>,>,>,>,>,>,>,>,,,,>>,>,>,,,>,>,,,>,>,,>>,>,,>,,,>,>,,>,,,>,,,,,>,>,,,,,,,>,,,,,>,>,,,,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',,,,',,,,,',,,',,,,,,',,,,,,,,',',,,,'&&&&>,,',,',',,',,',',,',,,',','',',,',,',,',',',',',',',','',,',','',''',',,',',',',','',','''',',','''''''',''','''''','''''','''',''''',''','''''''''=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>,>>>>>>,>>>>,>>>>>,>,>,>,>,>>,>>,>,>>>>>,>>,>,>>,>,,>>,>,,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>==-=;>,>,>,,>,>,>->,>,,,,,>,,>;-==->-===>,>,>,,,,>,>;-,,,,,>,,,,,,-=-=;;===-,>,,,,,,,,,,->,,,,,,,,,,,,----,,,,,,,,,,,,',,,,,,,>>>>;>>>,,,,,',>>>>>,,>=****=>',',',,,,'>>>>&&&&->>>>,,','>>>>>>>>,,',',,,>>>>',',;=***=;,',',',',>-****=;,,'',',',,','','',''',''','''',','',-****=->','''''''','>>>>'','>=***=-'','''',;=***=->''*&*'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>,>>>,>>>>>>>,>>,>,>>>>>>>>>>>,>>>>>>>,>,>>,>>,>,>>,>>>,>>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,>,*&&%&,,>,,>,,,>,*&;,,>,>>,,>,,*%&&=,&&&&*,,,,>,,,,,,&&,>,,,,,>,,,>&&&&;;&&&&-,,,>,,,,,,>&*,,,,,,,,,,,-&%&&,,,,,,,,,',,,,,,,,,,&&&&&&&&',,,,,,*&&&*,*&&&&&&&&&-,,,,',,,*&&&&&&&&&&&&-,,,'*&&&&&&&>,',','-&&&&',;*&&&&&&>,',',',;*&&&&&&&&&*>,'','''','','',','',''',',''',>=&&&&&&&&&*>,'','',''>&&&&>'>=&&&&&&-''''''=*&&&&&&&&==&&&*,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>>>>>,>,>,>,>,>>>,,>,>,>>>,>,>,>>,>,>>,>,>,>,,>,>>,>,>,>>,>,>,>,>,>,>,>,>,,>,=%&&&>>,>,,>>,>>&&*,>,,,,>,,>;&&%&;,*&%&&,>,,,>,>,,-&&-,>,>,,,>,,-&%&&,,&&%&*,,,,,>,,,,*&&>,>,,,,,,,,*&&&*,,,,,',,,,,,,,,,,,,'&&&&%&&*,,,',,,*&&&&*&&&%&&&&&&&*>',,,',*&&&&%&&&&&&&-'',,*&&&&&&&>,,',',-&&&*,;&&&&&&&*'',',',=&&&&&&&&&&&&&=','',','',','',''',',',''','-&&&&&&&&&&&&&='''''''',&&&&>>*&&&&&&*,''''>*&&&&&&&&&&&&&&*;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>,>>>>,>>>,>,>,>,>>>>>>>>>>,>>>>>,>>,>>>>,>>,>>>,>,>>>,>>>,>>,>,>,>,>,,>,>,>,>,>,>,>,>,>,,>&&%%=,,>>,,,,>=&&&,>,>,,,>,,=%&&&,,-&&&&;,>,,,,,,,*%&*,,,,,,,,,,*&&&=,,=&&&&,,,,,,,,,,&&&=,,,,,,,,,,&&&&;,,,,,,,,,,,,,,,,',,,*&%&&&%*,,,,,,,*%&&&%&&*&&&&&&&&&&,,',,,*&&&&&&&%&&&&=,,',*&&&&&&&>',',',-&&&&;&&&&*&&&;,',','*&&&&&&*&*&&&&&&=',','',''',',','''','',','=&&&&&*****&&&&&=','',''>&&&&>*&&&***&-','',*&&&&&*=**&&&&&*,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,>>,>>>>>>>>,>>>,>>>>>>>>>>>>>,>,>,>,>,>,>,>,>>,>,>,,>>,>>,,>>,>,>,>,>,>,>,>>,>>,>>,>,>,>,>,>,>,,>,>,>>,&&&&&>,,,,>>,,&&%&=,,,,>,,,,&&%&=,>,&&%&*,,>,>,>,;&&%&;>,,>,,>,>&&%&;,,;&%&&->,,,,,,,-&&&&,,,,,,,,,;&%&&,,,,,,,,,,,,,,,,,,,,,=--*&&&&,,,,',,*&&&&&*;,',,-*&&&&&*,,',,--=-&&&&*-=-->',,'-=-=&&&&>,',',,-&&&*&&&=,,'>*,',','*&&&&*;,,',>=&&&&&='',',',,',''',',',''''''-&&&&*-,',',-*&&&&;'''',',&&&&*&&=,'',=>''''=&&&&=>''',-&&&&*,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>,>>>>,>>>,>>,>>,>,>>>>>>>>>>>>>>>,>>,>>>>>>>,>,>>>>,>>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,>,,>,,,>-%&%&>>>,>,,>-&%&&&,>>,,>,>>&&&&>,,,*&&&&,,,,,,,,=&&&&*,,,,,,,,-&&&&,,>,&&&&*,,,,,,,,*%&&&-,,,,,,,,*&&&=,,,,,,,,,,,',,,,,,,,,,,,-&&&*,,',,,,*&%&&;,,,,,',,-&&&&&;,,,,,,,'&&&&-,,,,,,',,',,>&&&&>,',,',-&&&&&&;,',',',',',=&&&&=,'',''''>*&&&*,','''''',',''','',',,',*&&&*>','''',>*&&&*,,''''>&&&&&&-'''''''''';&&&&*'''''''-&&&&-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>,>,>,>,>,,>,>>,>>,>,>,>,>>,>,,>>,,>>,>,>>>,>>,>>,>,>>,>,>,>,>,>,>,,>,>,>>,,>*%&&=,,>,,>,*&&&%&;,,,>,,,*&%&*,>,>;&%&&;>,>,>,,&%&%&&,,>,>,,,&&%&=,,,,=%&%*>,,,>,,;&&&%&*,,,,,,,>&&%&;,,,,,,,,,,,,',,,,,',,,,,=&&%*,,,',,,*&&&*',,',,,,,'-&&&&*,,'',','&&&&-',',',',',,';&&&&>,,'',,-&&&&&-,',',',',',,*&&&=',',',,',,>*&&&='',,',,'','',''','''',=&&&&-'''','''';&&&&-'','',&&&&&=','''''',''=&&&*,''''''''*&&&*'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>,>>,>,>>,>,>>,>>>>,>>>>>>>>>>>>>>>,>>>,>>>,>>,>,>>,>>,>>>,>>>,,,>>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,*&%&&,,>,>,>&%&%&&*>,,>,>,&&&%-,,,,>&&%&=,,,,,,-&&&&&&=,,,,,,>&&&&;,,,,>&&&&-,,,,,,*&%&&%&;,,,,,,-&&&&,,,,,',,,',,,,,,,',,,,',,-&&&&,,,,,,,*&&&*,,,,',',,',*&&&&>,,,,',,*&%&-,,,,',,,',',>&&&&>',,'',-&&&&*',',',',',',=&&&&','','','','=&&&*,''','','','',''',',''*&&&*',','','','*&&&*'''',,&&&&*,''','',''''*&&&='''''''''-&&&&,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>,>,>,>,>,>,>,>>,>,>>,>>,>>>>,>>,>>,,>>,>,>>>,>,>>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,>-&&%&;,>,,>=&&&&%&&>>,,>,;&%&&>,>,,,=&&&&>,>,>,*%&%&%&&,,,>,,=&%&&,,,,,,&&%&*,,,,,,&&&&&&&*,,,,,,*&&&=,,,,,,,,,,,,,,,,,,,,,,,,,-%&&*,,,',,,*&%&*,,',,,,',,,;&%&&-',',,',&&&&-',',,',',,,';&&&&>,',,',-&%&&;,',',',',','&&&&-,',,',',',',>&&&&,,','',','','',',''',;&&&&;''''''','',-&&&&,,'''>&&&&='''''''''','*&&&-'''''''''>*&&&,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>,>,>>,>,>>>>,>>>>>>>>>>>>>>,>>>>>,>>,>>,,,>>,>>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>&&&%=,,>,>&&%&*&&&=,,,,>*&&&*,,,>,>;%&%&;,,,,>&&&&*&&&;>,,,>&&&&=,,,,,,=&&&&,,,,,-&%&&&&&&,,,,,>&&%&;,,,,,,,,,,,,,,,,,,,',,,,,-&&&&',,,',,*&&&*,,,,',,,,',,*&&&*,,',,,'*&&&=,,'',',,'',,>&&&&>,',',,-&&&&,,',',',',',>&&&&>''','',',',',*&&&>',',''',''','''','''=&&&*,',',','''''>&&&&;'',',&&&&>''''''''''''*&&&;'''''''''>&&&*>''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>,>>>,>>>>,>>>>>>>>>>,>,>>,>,>,>,>,>,>,>>>,>,>>,>>,>>>>,>,>,>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,*%&&&,>,,-&%&*,&%&&>,>,,&%&%-,>,,,,,&&&&=>,>,*&%&--&%&*,,,,>&&&&>,>,,,,>&%&&-,,,,*&&&>=%&&-,,,,-&&&*,,',,,,,,,,,,,',,,,,,',,,,-%&&&,',,,,,*%&&*,,',,',',,,,*&&%*,,,',,,*%&&-',,,,,',,,',>%&&&>',,','-&&&*,',',',',','-&&&*--------------&&&&-''',','',','',','','*&&&*,''''''',',',*&&&-'''',&&&&>',','','''''*&&&-''''''''',&&&&,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>>>,>,>,>>,>>,>>,>,>>,>>,>>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,,>>,>,;&%&&>>,,*&&%-,=&&&-,,,-&&&&,,,>,,,,=&%&&,,,,&&%&>,*%&&>,,,*&%&*,,,,>,,>*&&%*,,,;%&%*,>*&%&,,,,*&%&=,,,,,',,,,,,,,,,,',,,,,,',-&&&*,,,,,,,*&&&*,,,,,,,,',,,*%&&*,',,',,*&&&-,','',,'',,'>&&&&>,',',,-&&&*,',',',',','=&&&&&&&&&&&&&&&&&&&&&&-',''','','',','','',*&&&*',',','''''''*&&&*',''>&&&&>'''''''','''*&&&*''','''''-&&&&,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>,>>>>,>>>,>>,>>>>>>>,>>,>>,>,>,>,>,>,>,>,>>>>>,>>,>>>,>,>>,>>,>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,&&%&=,>>&%&&,,;%&%*>>,*&%&*>,,,>,>,;&&&&;,,-&&&=,,-&&&=,,,&&&&-,,,,,,,,=&&&&,,,=&&&-,,*&&&;,,>&&&&>,,,,,,,,,,,,,,,,,,,,,,,,,,=&&&&,',',,,*&%&*',',',',,',,*&&%*,,',,,,&&&&-,',,,',,,',,>&&&&>',',',-&&&&',',',',',',*&&&&&&&&&&&&&&&&&&&&&&>,',',','','''','',''*&&&*''''''','',',*&&&*'',',&&&&>''''''''''''=&&&*,''''''''=&*&*'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>>>,>>>>>>>>>>,>>,>>>,>>>>,>>>>>>>>>>>>>>,>,>>,>>>,>>,>>,>,>,>,>>,>,,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,,>,>>,>,,>=&%&&,,*&&&=>,,*&&&;,>&&&&-,>,,,,,,>&&%&=,,&&%&;,>,&&%*>,;&&%&>,,,,,,,,>&&&&;,>&&%*,,,;&&&*,,=&%&*,,,,,,,,',,,,,,,,,,,',,',,,-&%&*,,,,',,*&&&*,,,,,,,,,,',*&&&*,,,',',*%&&-,,'',,'',,',>&&&&>,,',',-&&&*,',',',',','*&&&&******************,'','''','',','','',,*&&&*',','''',''''*&&&*''''>&&*&,''','''''',';&&&&=''''''';&&&&-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>>>,>,>,>,>,>,>,>>>,>>>,>>,>>,>>,>>>>,>,>>>>,>>,>>,>,>,>,,>,>,>,>,>,>,>,>,,>,>,>,,>,>,>;&&&&>,&%&&,,,>-&%&*,-&%&&,,,>,>,>,,=&&&&,;&&&*,,,,*&&&-,=%&&*,,>,>,,,,,*&%&*,=&&&=,,,,*%&*>,&&&&-,,,,,,,,,,,,',,,',,,,,,,,,,=&&&&,,,,,,,*&%&*,,',',',',,,*&&&&',',,,'&&&&-',,,',,',',,>%&&&>',,','=&&&*',',',',',',*&&&*,,',','',''''',''',',',',''','''','''''*&&&*''''','''',',*&&&*,''',&&&&>,''''',''''''=&&&&=''''';&&&&*,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>,>>>>>>>,>,>>,>>>>>,>,>>>>>>>>>>>,>>,>>>,>,>,>>,>>,>>,,>,>>,>,,>>,>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,,>,&%&&--&&&*,>,,>&&&&,*&%&*,,,,,,,,>,;&%&%>=%&%-,,>,>&&&*,&&&&-,,,,,,>,,,-&&&&,&&%*>,,,,-&&&=>&&%&>,,,,',,,,,,,,,,,,,,,,,,,,',-&&&*,,',,,,*&&&*,,,,,,,,,,',*&&&&',,',,'&&&&-,',,',,',,',>&&&&>,',','-&%&&',',',',',',=&&&&'',',',',',,'',',''',','',''',','',',',*&&&*',','',''''''&&&&-'','>&&&&,'''','''''''',*&&&&**--*&&&&&>''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>,>>>>>>>>,>,>>>>>>,>,>,>,>,>>>,>,>,>>>>>,>>,>,>,>>>>,>>,>>,,>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,>,>,>,>,>,=&%&&*&%&>,,>,,=&%&*&&&&;>,>,>,>,,,,&&&&=&&&&,,,,,,*&%&=&&&&,,,,,,,,,,,,&&&&=&&&*,,,,,,&&&&*&&&*,,,,,,,,,,,,,,,,',,',,',,,,,=&&%*,,,',,,*&%&*',',',',',,,&%&&*,',,','&&&&-,',',',,',,'>&&&&>,',,',-&&&*,',',',',','-&&&&>,',','','',',''',,'''','',',''','','''*&&&*''''''','',',&&&&-'''',&&&&>,'''''''''''''>*&&&&&&&&&&*&;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>,>>>,>>,>>>>>>>,>,>>>>>>>>>>>,>>>>>>,>,>,>>,>>,>>>,,>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,;&&&%&%&*,>,,>,,&&&&&%&&,,,,,,,,>,,,-&%&&&%&->,,,,>;&&&%&%&*,,>,,,,,>,,,*&%&&%&&;,,,,,,=&&&&%&&-,,,,,,,,',,,,,,,,,,,,,,,,,,,-&&&&',,,,,,*&&&*,,,,,,,,,,'>&&&&=,,',,,,*&%&-,,,',,',',',>&&%&>,',',,-&&&*,',',',',',,>&&&&-,''',,','','',,''',,'','','',''','',''-&&&&>',','''''''-&&&&>''''>&&&&,'','''',''''''''-&&&&&&&&&*,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>,>>>>>>>>>>>>>>>,>>,>>>>>>,>,>,>,>,>>,,>,>>,>>>>,>,>>,,>>,>>,>>,>>,,>>>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,,>,&%&&&&&;,,>,,,>=%&%&%&=>,>,>,>,,,>,>&&&%&&&,,,>,,,,*%&&&&&-,,,,>,,,,,,,-&&&&&%*,,,,,,,>&%&&&&&,,,,,,,,,,,',,,,,,,',,,,,',,,-%&&*,,,',,,*&%&*,',',',',,,=&&&&>,',,','&&&&-',',,',,',,,>&&&&>',',',-&&&&',',',',','''&&&&*',,'','','',''',','','',''','','','''',&&&&-''''','',',*&&&*'',''>*&&&>'''','''''''''';*&&&&**=->''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>,>>>>>,>,>,>>>>>>>>>>,>>>>,>>>,>,>>>,>,>>,>>,>>,>,>,>>,,>,>,>,>,>,>,>,>,>,>,>,,>,,>,,>>,>,,>,>,,>,=&%%&%*>,,,>,,>>&&%&&%>,,,,,,,>,,,,,*%&&%&*,,,,,>,,-&&%&%*>,,,,,,,,,,,,,&&%&&&-,,,,,,,,=&&%&&*,,,,,,,,,,,,,-**-,,,,',,,,,,,-&&%*,,,,',,*&&&*,,,,,,,,',;&&&&*,,,',,,,*&&&-,,',',',,','>&&&&>,,',',-&&&*,',',',',',,'-&&&&=',',',','',',','',','',';**=,','',',''*&&&*,',''''''';&&&&='''''>&&&&,''''''''''''',*&&=;,,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>;>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>,>>,>>>>>>>>>,>>>>,>>>>>>>,>,>,>,>,>>,>,>>,>,>>>,,>,>>>,>>,>,>>,>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,,>,,>,,;&&&&%-,,>,,>,,>*&&&&&,,,>,>,,,>,>,>-&%&&&>,,>,,,,,,&&&&&=,,,,,>,,>,,,,,*&&%&&,,,,,,,,,;&&&&&-,',,,',,,,,,=&&&&*,,,,',,',,,=&&&*,,,,,,,*%&&*,,',',',,>*&%&&;,',,',',&&&&-',,',,',',,,>&&&&>,',','-&&&&',',',',','','&&&&&;,'','',','>>',',''','';&&&&*,','''',';&&&&=''','','>*&&&*,',''',&&&&>'''''''''''''*&&;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>>,>>>>>>>>,>>>,>>>>>>,>>>,>,>>>>>>>>>>>,>>>>,>>>>,>,>>>>>,,>>,>,>>,>,>>>>,>>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,,>,>,>,,>,>*%&%*>,>,>,,>,,-%%&&=,>,,,,>,,,,,,,,&&&%*,>,,,>,,>,*&%&%;,,>,,,,,,,,,,,;&&&&=,,,,,,,,,,*%&%*,,,,,,,,,,,,;&&%&&&;,,,,,,,,,'-&%&&,',',,,*&&&&=,,,,,,'=*%&&&*,,',,',,'*&&&-,',,',,,',',>&&&&>,',',,-&&&*,',',',',',''';&&&&&=>'',''',=*&''',','','*&&&&&='',',''''*&&&&=,'''''>*&&&&-''''''>&&&&>'','''''','',&&&-,',,;-**=*-,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -";>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>,>>,>>>>,>>>>>,>,>,>,>,>>,>,>>,>,>>>>,>,,>>>,>>,>>,>,>,,>,>,>>,>>>,>,>,>,>,>,>,>,>,,,>,,>,>,>>,,,,>,>,,>-&%&*,,,,,>,,>,,&&%&;,,,>,,,>,>,>,,,*%&&-,,,,,,,,,,>&&&&,,,,,,,,,,>,,,,,&%&&>,,,,,,,,,,-&&&*,,,,,,,,,,,,=&&&&&&-,,,,,,,,,,-&&&*,,,,',,*&&&&&**--=*&&&&&&&>',,',,',,&&&&-',',,',',',,>&&&&>',,','-&&&&',',',',',',','=&&&&&**=--**&&&&=',''',''>&&&&&&*,'''''',',*&&&&*=---*&&&&&*','',''>*&&&>'''',''''''',*&&&&*&&&&&&&&&&=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,>>>>>>>>>>>>>,>>>>,>,>>>>>>>>>>,>>>,>>,>>,>,>>,>>,,>>,>>,>,>>>>,>,>,,>>,,>,>,>,>,>,>,>,>,,>>,>,>,,>,,,>>,>,,>,,>>&&&>>,>,,,>,,,,=&&*>,>,,>,,,,,,,,>,-&&&,,>,>,,,,,,,*&&=,,,,,>,,,,,,,,,,=&&=,,,,,,,,,,,,&&&;,,,,,,,,',,,;&%&&%&-,,',,',,,,=&&&&,,,,,,,*%&&&&&&&&&&&&&&&*>,,',,',,,'&&&&-,,',',,',,',>&&&&>,',,',-&&&*,',',',',',','',-&&&&&&&&&&&&&&&*,',''',',*&&&&&=',',','','>*&&&&&&&&&&&&&*''''''''>&&&&,'''''''''''''*&&&&&&&&&&&&&&&&*,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>,>,>>,>,>>>>>,>>>>>,>,>,>,>,>>,>>,>>>,>>>,>>,>>>,>,>,>>>,,>,>,>,>>,,>>,>,>,>,>,>,>,,>,>,,>,,>,>,>>,,>,,>,>,>,,*&*,,>,,>,,>,>,,&%-,,,,,,,>,>,>,,,,,&&=,,,,,>,,,,,,;%&>,,>,,,,,,,,,,,,,;%&;,,,,,,,,,,,,=&&,,,,',,,,,,,,,&&&&&&,,,,,,,,,',-%&&*,',,',,*&&&&&&&&&&&&&&&*>,',,,,,',',*%&&-,',,,',,'',,>&&&&>,',','-&&&&',',',',',',','',;*&&&&&&&&&&&*-,'',','',,=&&&&&;''''''''''',=&&&&&&&&&&*-''',''''',&&&&>,''''''''''''>=&&&&&&&****&&&&&=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>>>>,>>>>,>,>>>>>>>>>>>,>>,>>,>>,>,>>,>>,>>,>>>,>,>>,>,>>>,>,>>,>,>,>,>,>,>,>>,>,>,,>,>,,>,,,>,,>,,,>,,>>-&;>,,>,,>,,,>,,=&>,>,>,>,,,,,,,,,,,*&,,>,,,,,>,,,,,*&,,,,,,,,,,,,>,,,,,&*,,,,,,,,,,,,,>*=,,,,,,,,,,,,,,>*%&*>,,,,,',,,,,-****,,,,,,,*&&&*>-*&&&%&**>,',,',',,',,,=***-,',',',,,'',>****>',',,,-***=',',',',','',','','-***&&&***;,'',''','''',=*&*;',',',',',''''>=**&&&**-,'',''',''',*==*,'','''',''''''';-=*-;,,'''>=&&&&,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>,>>>>>>>>>>>,>,>>,>>>>,>>>>>>,>,>,>,>,>>,>>,>>,>>>>,>,>,>,>>,>,>,>,>,>>,,>,>>,,>,>,>,>,>,>,>,>,,>,>>,>,>>,>>,,>,,>,>,,>,,>;,,>,,>,,,>,,>,,;,,,,,,,>,,>,>,>,>,,>,,,,,,,,,,,,,,>>>,,,>,,>,,,,,,,,,,>>,,,,,,,,,,,,,,>,,,,,,',,,,,,,,,,>>,,,',,,,,,,',,,,,,,',,',,*%&&*,,,,>>>,,,,',,,',,',,,',,,,,',,',','',,,',,,,',,','','',',',',','',',',',',','',,>>>','',',',','',',',,>,',''''''''',','''''>,>,'',''''''',''''''''''''''''''''''''''''''''''''**&&;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>,>,>>>>>>>>,>>>,>,>,>>>>>>>>>>,>>,>>,>>,>,>>>,>>>,>,>>,>>,>,>,>>,>,>,>>,>,>,>,>,>,>,,>,>,,,>,,>,,,,>,>,>,>,,>,,>,,>,,,>,,>,>,,,,>,,>,>,>,,,>,,,,,,,,,>,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,',*&&&*,,',,,,',,,,',,,',,',','',',',',,,,,'',','',,',',,',',',',',',',,',',',',','',',''',',''','','',''''',''''',',',',''''','',''''''''',''''''','''''''''','''''''''''''''''''''''*&&&='''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>,>>,>>>,>>>>>>>,>,>,>,>,>>,>>,>>>,>>>,,>>,>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>>,>,>,,>>,>,,>,,>,,>,>,,>,>,>,,,>,,,>,>,,,,,,,,,>,,,,>,,,,>,,,,,,,,,>,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,,',,,,',,,,,,,,,',,,,*&&&*,,,,',',,'',,'',,,',,,,,',,',,,'',',,',',,',',','',',',',',',','''',',''',',','',',''',,'','','',,',''',','''''''',','',''''',''',''',''''''''','',''''''''''''''''''''''''''''**&&-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>>>,>>>>>>>>>,>,>,>>>>>>>>>>,>>>,>>,>,>>,>>>,>,>,>>,>>,>,,>,>,>,>>>,>,>,>,>,>,>,>,,>,>,,>,>,>>,,>,>,,>,>,>,>,,>,,,,,>,>,,>,,,>,,>,>,>,,,,>,>,,,>,,,,>,>,,>,,,,,,,,,>,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,',,',,',,,',,*%&&*,',,,,,',,,',,,',,','',,',,',',,',',',,',',',,',,',',',',',',',',,','',,',','',','',','',',''','''',',',''',',','''''''','',''',''''''','''''''''''''''''''''''''-;''''''''''',*&&&;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>>>>>>,>,>>>>>>>>>,>,>,>,>>>>,>>>,>>>,>>,,>>,>>>,>,>,>>>>,>>>,>,,>>,>,>,>,>,>,>,>,>,,>,>,,>,,>,,>,>,,>,,,>,,>,>,>,>,,,,>,,>,,>,,,,,,>,>,,,,,,,,,>,,,,,,,,,,,>,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,',,',,,',,,,,,,,,,,*&&&*,,,',',,,',,,',,',,,,',',',',,',,',,',',',,',',,',',',',',',',',''',','','',',''',,''','','','',','','''',''''''',',',''''''''''','',''','','',''',''''''',''''';&&*;'''''''';*&&&*''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>>,>>,>>>>>>,>,>,>>>>>>>>>>,,>>,>,>>,>>>,>>>,>>,,>>>>,>,,,>,>,>,>>,,>>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,,>,>,>,>,,,>,,>,>,,>,,>,,,>,>,,,,,>,>,,>,,,,,>,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',,',',',*&&&*,,,,,,',,',',,',,',',,,',,,',,',,',',',,',',',',',',',',',',',',',',','',,',',',''',,'','',',''''','',','',',',''''''','',''','''''''''''''''''',''''''','''''',*&&&&*--,>--*&&&&&-''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>>,>>>>>>,>,>,>,>,>>>>,>>>>,>>,>>,>,>,>>>,,>,>>>>>>,>,>>,>>>,,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,,>,>,,,,>,,>,,,>,,,>,,>,,,>,,,,,>,>,,,,>,,,,>,,,,,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',,,,',',,',,,,,,,,,,,*%&&*,',',',,',,,',,',,,',',',',',',',,',,',',',',',',',',',',',','',','',',''',''','',''',',','''',',''',''',''''''',',',''''',''''','',''''''''''''''','''''''''''-&&&&&&&&&&&&&&&&&='''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>,>>>>>>>>>,>,>>>>>>>>,>,>>>>>>>>>>>,>,>>,>,>>,>>,>>,>>,>,>>>,>,,>,,>,>,>,>,,>>,>,>,>,>,>,>,>,>>,>,>,,,>,>,,,>,>,,,>>,>,>,,>,,,>,,,>,,>,,,>,>,,,,,>,>,,,>,,,,>,,>,,,,,,,>,,,,>,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,,',,,,,,,,,',,,,',,,,,,,',,',,',',,*&&&*,,,,,',,,',,,',,',',,',,,',,,',,',',',',,',,,',',',',',',',',,',',',',',,',','',',',''','',','',',''',''',',',''''''',','''',','''''','','','''''''''''''''''''';*&&&&&&&&&&&&&*;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>,>>>>>,>>,>,>>>>>>,>,>,>,>,>>>>>,>>>,>>,>>,>>,>,>>,>,>>>>,>>,>>,>,>>,>,>,>,>,>,>,>,>,,,>,,>,>>,,>,>,>,,,>>,,,>,,,>,>,>,>,>,,,>,,>,,,,,>,>,,,,,,,,,,>,,,,,,>,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',',,,,,,',,,,,,*&&&*',',,',',',',,,',,,',,'',,',',,',',',,',',',',',',',',',',',''',','',',''',',','','',','',''','','',''','''''',',','''''','''''',','''''''''',''''''''''',''''''''>=*&*&&*&&&*-''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>,>,>>>>>>>>>>>,>,>,>>,>>,>>,>>,>>>,>>,>>,,>,>,>>,>,>,>,>>,>,>,>,>,>,>,>>,>,>,>,,>>,>,,>,>>,,,>,,>,>,,,,,>,,,>,>,,>,,,>,>,,,,>,>,,>,,>,,,>,,>,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',',,,,,,',,,,,,,',',,,,',',,-=-=-,,,',,,,,,,',',,',,',,,,',',',',,',',',',,',',',',',',',',',',','',',',',',''',',',','','','',''','',,'',',','''''',''','''','''''''''''',''''','''''''''''''''''''''>;;--;>,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>,>>>>,>>>>,>>,>>>>>,>>,>>,>>>>>,>,>,>,>,>>,>>>,>>,>>,>>,>>,,>,>,>,>>>,>,>,,>,>,>,>,,>,>,>,>,>,>,>,>,,>,>,>,,,>,>,,>,,,>,>,>,,>,>,>,,,,>,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,',,,,,,',,,',,,',,,,',,,',',',',,,',,',','',,',,,',',,',',',',',,',',',',',',',',',',,','',','',,'',''','','',',''','','''''''''''',','','''','''',''','','''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>>>,>,>>>>>>>>>>,>>,>>>,>>,>>,>,>,>>>,>>>,>,>>,>>>,>>>,>>>>,>,>,>,>,>,>,>,,>,>,,>,>>,>,,>,,>,>,>,,,>,,,>,,>,>,,>,,,>,,,>,>,>,,,>,,>,>,>,,>,>,,>,,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,',,,,,,,',,,,,,,,,,,,,,',,,',,,',,,,',,,,',,,',',,,,',,',',,,'',',',,',',',',',',',',',',','',''',,','',''','',',','','''','','',',',','',','''','''''''','''','''''',''',''''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>,>>,>>,>,>>>>>,>,>,>,>,>>>>,>,>>,>>>>>>,>>>,>>,>,>>,>,>,>,>,,>>,,,>,>,>,>,>,>,>,>,>,>,>,,>,,,>,>,,>,,>,,>,>,>>,,,>,,>,,>,>,,,>,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,,,,',,',,,,',',',,',',',,,',,',',,'',,',',',',,,,'',',',',,'',,,',,',',',',',',',',',',',',','',,''',','',,'',,''',','',','','','''''''','''''','''','',''','''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>>>>>>>,>>>>>>>>>>,>>>>>,>>>>>>>>>>>>,>,>>>,>>>,>,>,>>,,>>,>,>>,>>,>>,>,>>,,>>>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>,,>,,>,>,,,>,,>,,,>,,,>,>,,,>,>,,,,,,,,,>,,,>,,>,,>,,,,,,,>,,>,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,',,,',,,',,,','',,,',,',,',,,'',,',',',,,',',',',',',',','',','',,','',,''',''','','',''','',''',',',',''',',''','''''''''''','''','''','''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>,>>,>>>>>>>,>>,>,>,>,>,>,>>>>>,>>,>,>>>,>,>>>,>>,>>,>>,>,,>,>,>>>,,>,>,>,>,>,>,>,>,,>,>,,>,>,>,>,>,,>,>,,>,,>,,>,,>,,>,>,,>,,,,,>,,,,>,>,>,>,,,,>,,,,,,,,>,,>,,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,',,,,,',',',,',,',',',',,,',,,,',,,,',,',,,,',,,,,',,',,',,',',,'',,,',',',,',',',',',',',',',,','',',''',',',',',',','','',''','','''''','''',''','','','','''',''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>,>,>,>>>,>>,>>,>>,,>>,>>,>,>,>>>,>>>,,,>>>,>,>,>,>,>,>,>,>,>,>>,>,>,>,,,>,>,,>,>,>,,>,,>,,>,,,,>,,>,>,,,>,>,,,,,,,,>,,,,,>,>,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,',',,,,,,,,,,,,,,,,,,',,,,',,,',',,',,',',,'',',',,',',',,',',,''',,',',',',',',',',',',','','',',',,'',''',',''','',',''',',','',',',''',''','''''','''''',''''''''''''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>>>,>>>>,>,>>>>>>>,>,>,>,>,>,>,>,>>,>>>>,>>,>>,>>,>>,>,>,>>,>,>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,,>,,,>,,>,>>,>,,,>,,>,,>,,>,,>,,>,>,,,>,,,,>,,,,,>,>,>,,,>,>,,,,,,>,,>,,,,,,>,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,',',,',',,,',',,',,',,',,,',,,',,,',,',',,,',,',',',,,',',',',',',',',',',',','',',','','',',','','','','''',',''''',''''''',''',''',',''','',''',''''','',''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>,>>>>>>>>>>>>>>>>>>,>>,>,>,>>>,>>,>>,>>>,>>,>>>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,,,>,>,>,,,>,>,,>,,,>,,,>,>,,>,>,,,>,,,,,,,,,,,,,,,>,,>,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',',,,,,,,,,,,,',,,,,,,,,,,',,',',,',,',,',,',,'',,',',',,'',',',',,',',',',',','','',',','',',',''',','',','',','','',',''',',',''',''',''''''''''''''''',''''''''',''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>,>>>>>,>>,>,>,>,>,>,>,>>>,>>,>>>>,>>,>>,>>,,>>,>>,,>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>>,>,>,>,>,>>>>,,>,,,>>,,>,>,,,>,,>,>,,,>,,,,,>,,>,>,>,>,>,,,>,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,',,',,',,',,,,,,,,,,',,',',',,,',',',',',,,',,,,',,',,',',,',,,',,',,',',,,',,','',',',',',',',,',','',',,',','',','','',','''','','','',''''''',''',''','',''','',','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>,>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>,>>,>,>,>>>,>,>,>>,>,>,>>>,>,>>,>>,>>,,>,>,>,>,>,>,>,>,,,>,,>,,,>,,,,,>,,>>,,,>,,,>,>,,>,,,,>,,>,>,>,,,,,,,,,,,,,,>,,,>,,>,,,,>,,,,>,,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',,,,,,,,,,,,,,',,',',,,,,,,,,',,,,,,,,',,',,,',',,',,',',,',',',',,',',','',,',',,',',',',',','',',',',''','',',','','',''',',','''','',',',',',''',''','''''','''''''',''','',''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>,>>>>>>,>>,>>,>>>,>>,>,>,>,>,>,>,>,>>>,>>>>,>>>>>,>>,>>>,>>,>>>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,>>,>,>,>,>,,>>,>,>,,,>>,,>,>,,,>,,>,>,,>,,,,,,,,>,>,>,>,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,',,',',,,,',',',,,',,',',,,',,',,,',',,,',,',',',,,',,'',,',',',',',',',','',',',',',','',''',',',',',',''',','',''''''''''',''',''''',''''','',''''''''''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,,>>,>,,>>,>>,,>>,>>,,>>,>>,>,>,>,>,,>,>,>,>,>,>,>,>,,,>,>,>,>,>>,,>,,,>,>,,,>,>,,>,,>,,,,>,>,,>,>,>,,,,,,,,,>,,,>,,>,,>,,>,,,,,,,,,>,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,',',,,,,,,,,,,',',,,,,,',,,',,,',',,',,'',,,',',',,',,,''',',',,',',',',',',',',',,','','',',','',','','',','''',''','''',',',',',''',''','',''','''''''','','''''''',''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>,>>,>>,>>,>,>,>,>,>,>,>>>,>>>>>,>>>>,>>,>>>,>>,>>>>,>,>>,>,>>,>>,>,>,>,>,>,>,>,>>,>,,>,,>,>,,>,,>,>,>,,>>,,,>,,>,,>,>,,,,>,,,,,,,>,>,>,>,,,,,,,,,>,,,,,,>,,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,',,,,,,',,,',',',,,,',',',,',',,',,,,',,',,,'',,',,,',,'',,,,',',',',,',',',',',',','',',',',',',','',',''',''',,'',','',','','''''''',''',''''',''',','','''''',''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>,>>>>>,>>>,>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>>,>,>>,>,>,>,>,>,,>,>>,,>>>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>,>,,>,,>,,,>>,,>,,>,,,>,>,,,>,>,>,,>,,,,,,,>,>,,>,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,',,',,,,',,,,,,,,',,',,,,,,',,',,,',,,,,,,',,,,,,,,,,,',,',',,',,,',,,,',',',',',','',,,',',,',',',',',',',','',','','','',',''',',',',''',''','','','',',',',''',''',''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>,>>>,>,>,>>,>,>,>,>,>,>,>,>>,>>,>>,>>>>,>>>,>>,>>,>>>>,>,>>,,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,,>,,>>,,,>,,>,,,>,,,>,>,,,,,,>,,,,>,>,,,,,,,,,>,,,,>,,,,,,,,,>,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,,',',,,',',',',',,,',,,',,,',,'',',,',,',,,',',,'',,','',',',',',',',',','',',',',','',',,'','','',','','','','',''''''''',''','','','','','',','''''''',''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>,>>>>>>>>>>>,>>>>,>>>>,>>,>>>,>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>,>>,,>>,>>,>>,,>,>,>,>>,>,>,>>,>,>,>,>,>,>,>,>,,>,,,>,,>,,>,>,>,>,,>,,,>>,,>,,>,>,>,,,,>,>,>,,,>,>,,,,>,,>,>,,,,,>,,,,,>,,,,>,,,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,,',,,',,',,',,',,,,,',,,,,,,,,,',',,',,,',',',,,',',,',,',',,',',',',,,',',',',',',',',',,',',',',',','''',',''',','','','','''',',',',',''','''''''''''''''''''','''''''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''", -">>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>,>>>>>>,>>>>>>>,>,>>,>,>,>,>,>,>,>>,>>>,>>,>>>,>>>,>>,>>,>>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,>,,>,,,>,,,>,,,,,>,>,,,,,,,>,,,,,,>,,,,,,,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,',,,,,,,,,,,',,,,,',',,,',',',',',,,,',,',',,,',,',,',',,',,',',',,',','',,',',',',',',',','',''',','','',,',',',',''','','','',',''''''''''',''''','','','','',''''''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"}; diff --git a/config/grub2/default b/config/grub2/default new file mode 100644 index 000000000..603e78f2f --- /dev/null +++ b/config/grub2/default @@ -0,0 +1,7 @@ +GRUB_TIMEOUT=5 +GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" +GRUB_DEFAULT=saved +# GRUB_TERMINAL="serial console" +# GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200" +GRUB_CMDLINE_LINUX="quiet rhgb" +GRUB_DISABLE_RECOVERY="true" diff --git a/config/rootfiles/common/i586/grub b/config/rootfiles/common/i586/grub index de6a53b5c..0f730ddc1 100644 --- a/config/rootfiles/common/i586/grub +++ b/config/rootfiles/common/i586/grub @@ -1,34 +1,544 @@ #boot/grub -boot/grub/default -boot/grub/grub.conf -boot/grub/ipfire.xpm.gz -boot/grub/stage1 -boot/grub/stage2 -#usr/bin/mbchk +boot/grub/grub.cfg +#etc/bash_completion.d +#etc/bash_completion.d/grub +#etc/default +etc/default/grub +etc/grub2.cfg +etc/grub.d +etc/grub.d/00_header +etc/grub.d/10_linux +etc/grub.d/20_linux_xen +etc/grub.d/30_os-prober +etc/grub.d/40_custom +etc/grub.d/41_custom +etc/grub.d/README +usr/bin/grub-editenv +usr/bin/grub-fstest +usr/bin/grub-kbdcomp +usr/bin/grub-menulst2cfg +usr/bin/grub-mkimage +usr/bin/grub-mklayout +usr/bin/grub-mkpasswd-pbkdf2 +usr/bin/grub-mkrelpath +usr/bin/grub-mkrescue +usr/bin/grub-mkstandalone +usr/bin/grub-script-check usr/lib/grub -#usr/lib/grub/i386-pc -#usr/lib/grub/i386-pc/e2fs_stage1_5 -#usr/lib/grub/i386-pc/fat_stage1_5 -#usr/lib/grub/i386-pc/ffs_stage1_5 -#usr/lib/grub/i386-pc/iso9660_stage1_5 -#usr/lib/grub/i386-pc/jfs_stage1_5 -#usr/lib/grub/i386-pc/minix_stage1_5 -#usr/lib/grub/i386-pc/reiserfs_stage1_5 -#usr/lib/grub/i386-pc/stage1 -#usr/lib/grub/i386-pc/stage2 -#usr/lib/grub/i386-pc/stage2_eltorito -#usr/lib/grub/i386-pc/ufs2_stage1_5 -#usr/lib/grub/i386-pc/vstafs_stage1_5 -#usr/lib/grub/i386-pc/xfs_stage1_5 -usr/sbin/grub +usr/lib/grub/i386-pc +usr/lib/grub/i386-pc/acpi.mod +usr/lib/grub/i386-pc/acpi.module +usr/lib/grub/i386-pc/adler32.mod +usr/lib/grub/i386-pc/adler32.module +usr/lib/grub/i386-pc/affs.mod +usr/lib/grub/i386-pc/affs.module +usr/lib/grub/i386-pc/afs.mod +usr/lib/grub/i386-pc/afs.module +usr/lib/grub/i386-pc/ahci.mod +usr/lib/grub/i386-pc/ahci.module +usr/lib/grub/i386-pc/all_video.mod +usr/lib/grub/i386-pc/all_video.module +usr/lib/grub/i386-pc/aout.mod +usr/lib/grub/i386-pc/aout.module +usr/lib/grub/i386-pc/at_keyboard.mod +usr/lib/grub/i386-pc/at_keyboard.module +usr/lib/grub/i386-pc/ata.mod +usr/lib/grub/i386-pc/ata.module +usr/lib/grub/i386-pc/backtrace.mod +usr/lib/grub/i386-pc/backtrace.module +usr/lib/grub/i386-pc/bfs.mod +usr/lib/grub/i386-pc/bfs.module +usr/lib/grub/i386-pc/biosdisk.mod +usr/lib/grub/i386-pc/biosdisk.module +usr/lib/grub/i386-pc/bitmap.mod +usr/lib/grub/i386-pc/bitmap.module +usr/lib/grub/i386-pc/bitmap_scale.mod +usr/lib/grub/i386-pc/bitmap_scale.module +usr/lib/grub/i386-pc/blocklist.mod +usr/lib/grub/i386-pc/blocklist.module +usr/lib/grub/i386-pc/boot.image +usr/lib/grub/i386-pc/boot.img +usr/lib/grub/i386-pc/boot.mod +usr/lib/grub/i386-pc/boot.module +usr/lib/grub/i386-pc/bsd.mod +usr/lib/grub/i386-pc/bsd.module +usr/lib/grub/i386-pc/btrfs.mod +usr/lib/grub/i386-pc/btrfs.module +usr/lib/grub/i386-pc/bufio.mod +usr/lib/grub/i386-pc/bufio.module +usr/lib/grub/i386-pc/cat.mod +usr/lib/grub/i386-pc/cat.module +usr/lib/grub/i386-pc/cdboot.image +usr/lib/grub/i386-pc/cdboot.img +usr/lib/grub/i386-pc/chain.mod +usr/lib/grub/i386-pc/chain.module +usr/lib/grub/i386-pc/cmostest.mod +usr/lib/grub/i386-pc/cmostest.module +usr/lib/grub/i386-pc/cmp.mod +usr/lib/grub/i386-pc/cmp.module +usr/lib/grub/i386-pc/command.lst +usr/lib/grub/i386-pc/config.h +usr/lib/grub/i386-pc/configfile.mod +usr/lib/grub/i386-pc/configfile.module +usr/lib/grub/i386-pc/cpio.mod +usr/lib/grub/i386-pc/cpio.module +usr/lib/grub/i386-pc/cpio_be.mod +usr/lib/grub/i386-pc/cpio_be.module +usr/lib/grub/i386-pc/cpuid.mod +usr/lib/grub/i386-pc/cpuid.module +usr/lib/grub/i386-pc/crc64.mod +usr/lib/grub/i386-pc/crc64.module +usr/lib/grub/i386-pc/crypto.lst +usr/lib/grub/i386-pc/crypto.mod +usr/lib/grub/i386-pc/crypto.module +usr/lib/grub/i386-pc/cryptodisk.mod +usr/lib/grub/i386-pc/cryptodisk.module +usr/lib/grub/i386-pc/cs5536.mod +usr/lib/grub/i386-pc/cs5536.module +usr/lib/grub/i386-pc/date.mod +usr/lib/grub/i386-pc/date.module +usr/lib/grub/i386-pc/datehook.mod +usr/lib/grub/i386-pc/datehook.module +usr/lib/grub/i386-pc/datetime.mod +usr/lib/grub/i386-pc/datetime.module +usr/lib/grub/i386-pc/diskboot.image +usr/lib/grub/i386-pc/diskboot.img +usr/lib/grub/i386-pc/diskfilter.mod +usr/lib/grub/i386-pc/diskfilter.module +usr/lib/grub/i386-pc/dm_nv.mod +usr/lib/grub/i386-pc/dm_nv.module +usr/lib/grub/i386-pc/drivemap.mod +usr/lib/grub/i386-pc/drivemap.module +usr/lib/grub/i386-pc/echo.mod +usr/lib/grub/i386-pc/echo.module +usr/lib/grub/i386-pc/efiemu.mod +usr/lib/grub/i386-pc/efiemu.module +usr/lib/grub/i386-pc/ehci.mod +usr/lib/grub/i386-pc/ehci.module +usr/lib/grub/i386-pc/elf.mod +usr/lib/grub/i386-pc/elf.module +usr/lib/grub/i386-pc/exfat.mod +usr/lib/grub/i386-pc/exfat.module +usr/lib/grub/i386-pc/exfctest.mod +usr/lib/grub/i386-pc/exfctest.module +usr/lib/grub/i386-pc/ext2.mod +usr/lib/grub/i386-pc/ext2.module +usr/lib/grub/i386-pc/extcmd.mod +usr/lib/grub/i386-pc/extcmd.module +usr/lib/grub/i386-pc/fat.mod +usr/lib/grub/i386-pc/fat.module +usr/lib/grub/i386-pc/font.mod +usr/lib/grub/i386-pc/font.module +usr/lib/grub/i386-pc/freedos.mod +usr/lib/grub/i386-pc/freedos.module +usr/lib/grub/i386-pc/fs.lst +usr/lib/grub/i386-pc/fshelp.mod +usr/lib/grub/i386-pc/fshelp.module +usr/lib/grub/i386-pc/functional_test.mod +usr/lib/grub/i386-pc/functional_test.module +usr/lib/grub/i386-pc/gcry_arcfour.mod +usr/lib/grub/i386-pc/gcry_arcfour.module +usr/lib/grub/i386-pc/gcry_blowfish.mod +usr/lib/grub/i386-pc/gcry_blowfish.module +usr/lib/grub/i386-pc/gcry_camellia.mod +usr/lib/grub/i386-pc/gcry_camellia.module +usr/lib/grub/i386-pc/gcry_cast5.mod +usr/lib/grub/i386-pc/gcry_cast5.module +usr/lib/grub/i386-pc/gcry_crc.mod +usr/lib/grub/i386-pc/gcry_crc.module +usr/lib/grub/i386-pc/gcry_des.mod +usr/lib/grub/i386-pc/gcry_des.module +usr/lib/grub/i386-pc/gcry_md4.mod +usr/lib/grub/i386-pc/gcry_md4.module +usr/lib/grub/i386-pc/gcry_md5.mod +usr/lib/grub/i386-pc/gcry_md5.module +usr/lib/grub/i386-pc/gcry_rfc2268.mod +usr/lib/grub/i386-pc/gcry_rfc2268.module +usr/lib/grub/i386-pc/gcry_rijndael.mod +usr/lib/grub/i386-pc/gcry_rijndael.module +usr/lib/grub/i386-pc/gcry_rmd160.mod +usr/lib/grub/i386-pc/gcry_rmd160.module +usr/lib/grub/i386-pc/gcry_seed.mod +usr/lib/grub/i386-pc/gcry_seed.module +usr/lib/grub/i386-pc/gcry_serpent.mod +usr/lib/grub/i386-pc/gcry_serpent.module +usr/lib/grub/i386-pc/gcry_sha1.mod +usr/lib/grub/i386-pc/gcry_sha1.module +usr/lib/grub/i386-pc/gcry_sha256.mod +usr/lib/grub/i386-pc/gcry_sha256.module +usr/lib/grub/i386-pc/gcry_sha512.mod +usr/lib/grub/i386-pc/gcry_sha512.module +usr/lib/grub/i386-pc/gcry_tiger.mod +usr/lib/grub/i386-pc/gcry_tiger.module +usr/lib/grub/i386-pc/gcry_twofish.mod +usr/lib/grub/i386-pc/gcry_twofish.module +usr/lib/grub/i386-pc/gcry_whirlpool.mod +usr/lib/grub/i386-pc/gcry_whirlpool.module +usr/lib/grub/i386-pc/gdb.mod +usr/lib/grub/i386-pc/gdb.module +usr/lib/grub/i386-pc/gdb_grub2 +usr/lib/grub/i386-pc/geli.mod +usr/lib/grub/i386-pc/geli.module +usr/lib/grub/i386-pc/gettext.mod +usr/lib/grub/i386-pc/gettext.module +usr/lib/grub/i386-pc/gfxmenu.mod +usr/lib/grub/i386-pc/gfxmenu.module +usr/lib/grub/i386-pc/gfxterm.mod +usr/lib/grub/i386-pc/gfxterm.module +usr/lib/grub/i386-pc/gmodule.pl +usr/lib/grub/i386-pc/gptsync.mod +usr/lib/grub/i386-pc/gptsync.module +usr/lib/grub/i386-pc/gzio.mod +usr/lib/grub/i386-pc/gzio.module +usr/lib/grub/i386-pc/halt.mod +usr/lib/grub/i386-pc/halt.module +usr/lib/grub/i386-pc/hashsum.mod +usr/lib/grub/i386-pc/hashsum.module +usr/lib/grub/i386-pc/hdparm.mod +usr/lib/grub/i386-pc/hdparm.module +usr/lib/grub/i386-pc/hello.mod +usr/lib/grub/i386-pc/hello.module +usr/lib/grub/i386-pc/help.mod +usr/lib/grub/i386-pc/help.module +usr/lib/grub/i386-pc/hexdump.mod +usr/lib/grub/i386-pc/hexdump.module +usr/lib/grub/i386-pc/hfs.mod +usr/lib/grub/i386-pc/hfs.module +usr/lib/grub/i386-pc/hfsplus.mod +usr/lib/grub/i386-pc/hfsplus.module +usr/lib/grub/i386-pc/http.mod +usr/lib/grub/i386-pc/http.module +usr/lib/grub/i386-pc/iorw.mod +usr/lib/grub/i386-pc/iorw.module +usr/lib/grub/i386-pc/iso9660.mod +usr/lib/grub/i386-pc/iso9660.module +usr/lib/grub/i386-pc/jfs.mod +usr/lib/grub/i386-pc/jfs.module +usr/lib/grub/i386-pc/jpeg.mod +usr/lib/grub/i386-pc/jpeg.module +usr/lib/grub/i386-pc/kernel.exec +usr/lib/grub/i386-pc/kernel.img +usr/lib/grub/i386-pc/keylayouts.mod +usr/lib/grub/i386-pc/keylayouts.module +usr/lib/grub/i386-pc/keystatus.mod +usr/lib/grub/i386-pc/keystatus.module +usr/lib/grub/i386-pc/ldm.mod +usr/lib/grub/i386-pc/ldm.module +usr/lib/grub/i386-pc/legacycfg.mod +usr/lib/grub/i386-pc/legacycfg.module +usr/lib/grub/i386-pc/linux.mod +usr/lib/grub/i386-pc/linux.module +usr/lib/grub/i386-pc/linux16.mod +usr/lib/grub/i386-pc/linux16.module +usr/lib/grub/i386-pc/lnxboot.image +usr/lib/grub/i386-pc/lnxboot.img +usr/lib/grub/i386-pc/loadenv.mod +usr/lib/grub/i386-pc/loadenv.module +usr/lib/grub/i386-pc/loopback.mod +usr/lib/grub/i386-pc/loopback.module +usr/lib/grub/i386-pc/ls.mod +usr/lib/grub/i386-pc/ls.module +usr/lib/grub/i386-pc/lsacpi.mod +usr/lib/grub/i386-pc/lsacpi.module +usr/lib/grub/i386-pc/lsapm.mod +usr/lib/grub/i386-pc/lsapm.module +usr/lib/grub/i386-pc/lsmmap.mod +usr/lib/grub/i386-pc/lsmmap.module +usr/lib/grub/i386-pc/lspci.mod +usr/lib/grub/i386-pc/lspci.module +usr/lib/grub/i386-pc/luks.mod +usr/lib/grub/i386-pc/luks.module +usr/lib/grub/i386-pc/lvm.mod +usr/lib/grub/i386-pc/lvm.module +usr/lib/grub/i386-pc/lzma_decompress.image +usr/lib/grub/i386-pc/lzma_decompress.img +usr/lib/grub/i386-pc/lzopio.mod +usr/lib/grub/i386-pc/lzopio.module +usr/lib/grub/i386-pc/mdraid09.mod +usr/lib/grub/i386-pc/mdraid09.module +usr/lib/grub/i386-pc/mdraid09_be.mod +usr/lib/grub/i386-pc/mdraid09_be.module +usr/lib/grub/i386-pc/mdraid1x.mod +usr/lib/grub/i386-pc/mdraid1x.module +usr/lib/grub/i386-pc/memdisk.mod +usr/lib/grub/i386-pc/memdisk.module +usr/lib/grub/i386-pc/memrw.mod +usr/lib/grub/i386-pc/memrw.module +usr/lib/grub/i386-pc/minicmd.mod +usr/lib/grub/i386-pc/minicmd.module +usr/lib/grub/i386-pc/minix.mod +usr/lib/grub/i386-pc/minix.module +usr/lib/grub/i386-pc/minix2.mod +usr/lib/grub/i386-pc/minix2.module +usr/lib/grub/i386-pc/minix2_be.mod +usr/lib/grub/i386-pc/minix2_be.module +usr/lib/grub/i386-pc/minix3.mod +usr/lib/grub/i386-pc/minix3.module +usr/lib/grub/i386-pc/minix3_be.mod +usr/lib/grub/i386-pc/minix3_be.module +usr/lib/grub/i386-pc/minix_be.mod +usr/lib/grub/i386-pc/minix_be.module +usr/lib/grub/i386-pc/mmap.mod +usr/lib/grub/i386-pc/mmap.module +usr/lib/grub/i386-pc/moddep.lst +usr/lib/grub/i386-pc/modinfo.sh +usr/lib/grub/i386-pc/msdospart.mod +usr/lib/grub/i386-pc/msdospart.module +usr/lib/grub/i386-pc/multiboot.mod +usr/lib/grub/i386-pc/multiboot.module +usr/lib/grub/i386-pc/multiboot2.mod +usr/lib/grub/i386-pc/multiboot2.module +usr/lib/grub/i386-pc/net.mod +usr/lib/grub/i386-pc/net.module +usr/lib/grub/i386-pc/newc.mod +usr/lib/grub/i386-pc/newc.module +usr/lib/grub/i386-pc/nilfs2.mod +usr/lib/grub/i386-pc/nilfs2.module +usr/lib/grub/i386-pc/normal.mod +usr/lib/grub/i386-pc/normal.module +usr/lib/grub/i386-pc/ntfs.mod +usr/lib/grub/i386-pc/ntfs.module +usr/lib/grub/i386-pc/ntfscomp.mod +usr/lib/grub/i386-pc/ntfscomp.module +usr/lib/grub/i386-pc/ntldr.mod +usr/lib/grub/i386-pc/ntldr.module +usr/lib/grub/i386-pc/odc.mod +usr/lib/grub/i386-pc/odc.module +usr/lib/grub/i386-pc/ohci.mod +usr/lib/grub/i386-pc/ohci.module +usr/lib/grub/i386-pc/part_acorn.mod +usr/lib/grub/i386-pc/part_acorn.module +usr/lib/grub/i386-pc/part_amiga.mod +usr/lib/grub/i386-pc/part_amiga.module +usr/lib/grub/i386-pc/part_apple.mod +usr/lib/grub/i386-pc/part_apple.module +usr/lib/grub/i386-pc/part_bsd.mod +usr/lib/grub/i386-pc/part_bsd.module +usr/lib/grub/i386-pc/part_dvh.mod +usr/lib/grub/i386-pc/part_dvh.module +usr/lib/grub/i386-pc/part_gpt.mod +usr/lib/grub/i386-pc/part_gpt.module +usr/lib/grub/i386-pc/part_msdos.mod +usr/lib/grub/i386-pc/part_msdos.module +usr/lib/grub/i386-pc/part_plan.mod +usr/lib/grub/i386-pc/part_plan.module +usr/lib/grub/i386-pc/part_sun.mod +usr/lib/grub/i386-pc/part_sun.module +usr/lib/grub/i386-pc/part_sunpc.mod +usr/lib/grub/i386-pc/part_sunpc.module +usr/lib/grub/i386-pc/partmap.lst +usr/lib/grub/i386-pc/parttool.lst +usr/lib/grub/i386-pc/parttool.mod +usr/lib/grub/i386-pc/parttool.module +usr/lib/grub/i386-pc/password.mod +usr/lib/grub/i386-pc/password.module +usr/lib/grub/i386-pc/password_pbkdf2.mod +usr/lib/grub/i386-pc/password_pbkdf2.module +usr/lib/grub/i386-pc/pata.mod +usr/lib/grub/i386-pc/pata.module +usr/lib/grub/i386-pc/pbkdf2.mod +usr/lib/grub/i386-pc/pbkdf2.module +usr/lib/grub/i386-pc/pci.mod +usr/lib/grub/i386-pc/pci.module +usr/lib/grub/i386-pc/plan9.mod +usr/lib/grub/i386-pc/plan9.module +usr/lib/grub/i386-pc/play.mod +usr/lib/grub/i386-pc/play.module +usr/lib/grub/i386-pc/png.mod +usr/lib/grub/i386-pc/png.module +usr/lib/grub/i386-pc/priority_queue.mod +usr/lib/grub/i386-pc/priority_queue.module +usr/lib/grub/i386-pc/probe.mod +usr/lib/grub/i386-pc/probe.module +usr/lib/grub/i386-pc/pxe.mod +usr/lib/grub/i386-pc/pxe.module +usr/lib/grub/i386-pc/pxeboot.image +usr/lib/grub/i386-pc/pxeboot.img +usr/lib/grub/i386-pc/pxechain.mod +usr/lib/grub/i386-pc/pxechain.module +usr/lib/grub/i386-pc/raid5rec.mod +usr/lib/grub/i386-pc/raid5rec.module +usr/lib/grub/i386-pc/raid6rec.mod +usr/lib/grub/i386-pc/raid6rec.module +usr/lib/grub/i386-pc/read.mod +usr/lib/grub/i386-pc/read.module +usr/lib/grub/i386-pc/reboot.mod +usr/lib/grub/i386-pc/reboot.module +usr/lib/grub/i386-pc/regexp.mod +usr/lib/grub/i386-pc/regexp.module +usr/lib/grub/i386-pc/reiserfs.mod +usr/lib/grub/i386-pc/reiserfs.module +usr/lib/grub/i386-pc/relocator.mod +usr/lib/grub/i386-pc/relocator.module +usr/lib/grub/i386-pc/romfs.mod +usr/lib/grub/i386-pc/romfs.module +usr/lib/grub/i386-pc/scsi.mod +usr/lib/grub/i386-pc/scsi.module +usr/lib/grub/i386-pc/search.mod +usr/lib/grub/i386-pc/search.module +usr/lib/grub/i386-pc/search_fs_file.mod +usr/lib/grub/i386-pc/search_fs_file.module +usr/lib/grub/i386-pc/search_fs_uuid.mod +usr/lib/grub/i386-pc/search_fs_uuid.module +usr/lib/grub/i386-pc/search_label.mod +usr/lib/grub/i386-pc/search_label.module +usr/lib/grub/i386-pc/sendkey.mod +usr/lib/grub/i386-pc/sendkey.module +usr/lib/grub/i386-pc/serial.mod +usr/lib/grub/i386-pc/serial.module +usr/lib/grub/i386-pc/setjmp.mod +usr/lib/grub/i386-pc/setjmp.module +usr/lib/grub/i386-pc/setpci.mod +usr/lib/grub/i386-pc/setpci.module +usr/lib/grub/i386-pc/sfs.mod +usr/lib/grub/i386-pc/sfs.module +usr/lib/grub/i386-pc/sleep.mod +usr/lib/grub/i386-pc/sleep.module +usr/lib/grub/i386-pc/squash4.mod +usr/lib/grub/i386-pc/squash4.module +usr/lib/grub/i386-pc/tar.mod +usr/lib/grub/i386-pc/tar.module +usr/lib/grub/i386-pc/terminal.lst +usr/lib/grub/i386-pc/terminal.mod +usr/lib/grub/i386-pc/terminal.module +usr/lib/grub/i386-pc/terminfo.mod +usr/lib/grub/i386-pc/terminfo.module +usr/lib/grub/i386-pc/test.mod +usr/lib/grub/i386-pc/test.module +usr/lib/grub/i386-pc/test_blockarg.mod +usr/lib/grub/i386-pc/test_blockarg.module +usr/lib/grub/i386-pc/testload.mod +usr/lib/grub/i386-pc/testload.module +usr/lib/grub/i386-pc/tftp.mod +usr/lib/grub/i386-pc/tftp.module +usr/lib/grub/i386-pc/tga.mod +usr/lib/grub/i386-pc/tga.module +usr/lib/grub/i386-pc/time.mod +usr/lib/grub/i386-pc/time.module +usr/lib/grub/i386-pc/trig.mod +usr/lib/grub/i386-pc/trig.module +usr/lib/grub/i386-pc/true.mod +usr/lib/grub/i386-pc/true.module +usr/lib/grub/i386-pc/udf.mod +usr/lib/grub/i386-pc/udf.module +usr/lib/grub/i386-pc/ufs1.mod +usr/lib/grub/i386-pc/ufs1.module +usr/lib/grub/i386-pc/ufs2.mod +usr/lib/grub/i386-pc/ufs2.module +usr/lib/grub/i386-pc/uhci.mod +usr/lib/grub/i386-pc/uhci.module +usr/lib/grub/i386-pc/usb.mod +usr/lib/grub/i386-pc/usb.module +usr/lib/grub/i386-pc/usb_keyboard.mod +usr/lib/grub/i386-pc/usb_keyboard.module +usr/lib/grub/i386-pc/usbms.mod +usr/lib/grub/i386-pc/usbms.module +usr/lib/grub/i386-pc/usbserial_common.mod +usr/lib/grub/i386-pc/usbserial_common.module +usr/lib/grub/i386-pc/usbserial_ftdi.mod +usr/lib/grub/i386-pc/usbserial_ftdi.module +usr/lib/grub/i386-pc/usbserial_pl2303.mod +usr/lib/grub/i386-pc/usbserial_pl2303.module +usr/lib/grub/i386-pc/usbtest.mod +usr/lib/grub/i386-pc/usbtest.module +usr/lib/grub/i386-pc/vbe.mod +usr/lib/grub/i386-pc/vbe.module +usr/lib/grub/i386-pc/vga.mod +usr/lib/grub/i386-pc/vga.module +usr/lib/grub/i386-pc/vga_text.mod +usr/lib/grub/i386-pc/vga_text.module +usr/lib/grub/i386-pc/video.lst +usr/lib/grub/i386-pc/video.mod +usr/lib/grub/i386-pc/video.module +usr/lib/grub/i386-pc/video_bochs.mod +usr/lib/grub/i386-pc/video_bochs.module +usr/lib/grub/i386-pc/video_cirrus.mod +usr/lib/grub/i386-pc/video_cirrus.module +usr/lib/grub/i386-pc/video_fb.mod +usr/lib/grub/i386-pc/video_fb.module +usr/lib/grub/i386-pc/videoinfo.mod +usr/lib/grub/i386-pc/videoinfo.module +usr/lib/grub/i386-pc/videotest.mod +usr/lib/grub/i386-pc/videotest.module +usr/lib/grub/i386-pc/xfs.mod +usr/lib/grub/i386-pc/xfs.module +usr/lib/grub/i386-pc/xnu.mod +usr/lib/grub/i386-pc/xnu.module +usr/lib/grub/i386-pc/xnu_uuid.mod +usr/lib/grub/i386-pc/xnu_uuid.module +usr/lib/grub/i386-pc/xzio.mod +usr/lib/grub/i386-pc/xzio.module +usr/lib/grub/i386-pc/zfs.mod +usr/lib/grub/i386-pc/zfs.module +usr/lib/grub/i386-pc/zfscrypt.mod +usr/lib/grub/i386-pc/zfscrypt.module +usr/lib/grub/i386-pc/zfsinfo.mod +usr/lib/grub/i386-pc/zfsinfo.module +usr/sbin/grub-bios-setup usr/sbin/grub-install -usr/sbin/grub-md5-crypt +usr/sbin/grub-mkconfig +usr/sbin/grub-ofpathname +usr/sbin/grub-probe +usr/sbin/grub-reboot usr/sbin/grub-set-default -usr/sbin/grub-terminfo +usr/sbin/grub-sparc64-setup +usr/share/grub +usr/share/grub/grub-mkconfig_lib +#usr/share/info/grub-dev.info #usr/share/info/grub.info -#usr/share/info/multiboot.info -#usr/share/man/man1/mbchk.1 -#usr/share/man/man8/grub-install.8 -#usr/share/man/man8/grub-md5-crypt.8 -#usr/share/man/man8/grub-terminfo.8 -#usr/share/man/man8/grub.8 +#usr/share/locale/ast +#usr/share/locale/ast/LC_MESSAGES +#usr/share/locale/ast/LC_MESSAGES/grub.mo +#usr/share/locale/ca/LC_MESSAGES/grub.mo +#usr/share/locale/da/LC_MESSAGES/grub.mo +#usr/share/locale/de/LC_MESSAGES/grub.mo +#usr/share/locale/de@hebrew +#usr/share/locale/de@hebrew/LC_MESSAGES +#usr/share/locale/de@hebrew/LC_MESSAGES/grub.mo +#usr/share/locale/de_CH +#usr/share/locale/de_CH/LC_MESSAGES +#usr/share/locale/de_CH/LC_MESSAGES/grub.mo +#usr/share/locale/en@arabic +#usr/share/locale/en@arabic/LC_MESSAGES +#usr/share/locale/en@arabic/LC_MESSAGES/grub.mo +#usr/share/locale/en@cyrillic +#usr/share/locale/en@cyrillic/LC_MESSAGES +#usr/share/locale/en@cyrillic/LC_MESSAGES/grub.mo +#usr/share/locale/en@greek +#usr/share/locale/en@greek/LC_MESSAGES +#usr/share/locale/en@greek/LC_MESSAGES/grub.mo +#usr/share/locale/en@hebrew +#usr/share/locale/en@hebrew/LC_MESSAGES +#usr/share/locale/en@hebrew/LC_MESSAGES/grub.mo +#usr/share/locale/en@piglatin +#usr/share/locale/en@piglatin/LC_MESSAGES +#usr/share/locale/en@piglatin/LC_MESSAGES/grub.mo +#usr/share/locale/en@quot +#usr/share/locale/en@quot/LC_MESSAGES +#usr/share/locale/en@quot/LC_MESSAGES/grub.mo +#usr/share/locale/eo +#usr/share/locale/eo/LC_MESSAGES +#usr/share/locale/eo/LC_MESSAGES/grub.mo +#usr/share/locale/es/LC_MESSAGES/grub.mo +#usr/share/locale/fi/LC_MESSAGES/grub.mo +#usr/share/locale/fr/LC_MESSAGES/grub.mo +#usr/share/locale/gl/LC_MESSAGES/grub.mo +#usr/share/locale/hu/LC_MESSAGES/grub.mo +#usr/share/locale/id/LC_MESSAGES/grub.mo +#usr/share/locale/it/LC_MESSAGES/grub.mo +#usr/share/locale/ja/LC_MESSAGES/grub.mo +#usr/share/locale/lt/LC_MESSAGES/grub.mo +#usr/share/locale/nl/LC_MESSAGES/grub.mo +#usr/share/locale/pa +#usr/share/locale/pa/LC_MESSAGES +#usr/share/locale/pa/LC_MESSAGES/grub.mo +#usr/share/locale/pl/LC_MESSAGES/grub.mo +#usr/share/locale/pt_BR/LC_MESSAGES/grub.mo +#usr/share/locale/ru/LC_MESSAGES/grub.mo +#usr/share/locale/sl/LC_MESSAGES/grub.mo +#usr/share/locale/sv/LC_MESSAGES/grub.mo +#usr/share/locale/tr/LC_MESSAGES/grub.mo +#usr/share/locale/uk/LC_MESSAGES/grub.mo +#usr/share/locale/vi/LC_MESSAGES/grub.mo +#usr/share/locale/zh_CN/LC_MESSAGES/grub.mo +#usr/share/locale/zh_TW/LC_MESSAGES/grub.mo diff --git a/lfs/grub b/lfs/grub index 2b0544bd7..2c5920f70 100644 --- a/lfs/grub +++ b/lfs/grub @@ -1,7 +1,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007-2012 IPFire Team # +# Copyright (C) 2007-2014 IPFire Team # # # # 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 # @@ -24,14 +24,15 @@ include Config -VER = 0.97 +VER = 2.00 THISAPP = grub-$(VER) -DL_FILE = $(THISAPP).tar.gz +DL_FILE = $(THISAPP).tar.xz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) SUP_ARCH = i586 + CFLAGS = CXXFLAGS = @@ -43,7 +44,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = cd3f3eb54446be6003156158d51f4884 +$(DL_FILE)_MD5 = a1043102fbc7bcedbf53e7ee3d17ab91 install : $(TARGET) @@ -72,31 +73,28 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - - # Applying patches. - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-gentoo-14.patch - cd $(DIR_APP) && autoreconf - cd $(DIR_APP) && autoconf - - # Build. - cd $(DIR_APP) && CFLAGS="$(CFLAGS)" ./configure --prefix=/usr \ - --disable-auto-linux-mem-opt + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && \ + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-platform=pc \ + --with-grubdir=grub2 \ + --program-transform-name=s,grub,grub, \ + --disable-grub-mount \ + --disable-werror cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install - # grub files - mkdir -vp /boot/grub - cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub - for i in $(DIR_SRC)/config/grub/*; do \ - [ -f $$i ] && cp -f $$i /boot/grub; \ - done + -mkdir -pv /boot/grub + touch /boot/grub/grub.cfg + ln -svf ../boot/grub/grub.cfg /etc/grub2.cfg - # generate default file - grub-set-default 0 + -mkdir -pv /etc/default + install -m 644 $(DIR_SRC)/config/grub2/default /etc/default/grub - # Disable PaX mprotect for grub - paxctl -m /usr/sbin/grub + # Disable hardening. + paxctl -mpes /usr/sbin/grub-bios-setup /usr/sbin/grub-probe @rm -rf $(DIR_APP) @$(POSTBUILD) From 45928fd218fb001bd5e48a8c4f4c7b880fcf7c5a Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 24 Jul 2014 14:15:30 +0200 Subject: [PATCH 019/297] Rename ipfirerd to initramfs so that it will be found by grub. --- config/rootfiles/common/i586/dracut | 2 +- config/rootfiles/common/i586/linux | 2 +- lfs/dracut | 2 +- lfs/initrd | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/rootfiles/common/i586/dracut b/config/rootfiles/common/i586/dracut index 24516f090..53818d26b 100644 --- a/config/rootfiles/common/i586/dracut +++ b/config/rootfiles/common/i586/dracut @@ -1,4 +1,4 @@ -#boot/ipfirerd-KVER.img +#boot/initramfs-KVER-ipfire.img etc/dracut.conf etc/dracut.conf.d #etc/dracut.conf.d/dracut.conf diff --git a/config/rootfiles/common/i586/linux b/config/rootfiles/common/i586/linux index 3f364aed5..99dd4202d 100644 --- a/config/rootfiles/common/i586/linux +++ b/config/rootfiles/common/i586/linux @@ -2954,4 +2954,4 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/modules.symbols.bin #lib/modules/KVER-ipfire/source sbin/gen_init_cpio -boot/ipfirerd-KVER.img +boot/initramfs-KVER-ipfire.img diff --git a/lfs/dracut b/lfs/dracut index 22da76dbc..73b67bb74 100644 --- a/lfs/dracut +++ b/lfs/dracut @@ -102,7 +102,7 @@ ifeq "$(MACHINE_TYPE)" "arm" cd /boot && mkimage -A arm -T ramdisk -C lzma -d ipfirerd-$(KVER)-multi.img uInit-ipfire-multi # cd /boot && cp -f ipfirerd-$(KVER)-multi.img zInit-ipfire-multi else - /sbin/dracut --force --verbose --strip /boot/ipfirerd-$(KVER).img $(KVER)-ipfire + /sbin/dracut --force --verbose --strip /boot/initramfs-$(KVER)-ipfire.img $(KVER)-ipfire endif @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/lfs/initrd b/lfs/initrd index 42da9bc7b..ce7f7943a 100644 --- a/lfs/initrd +++ b/lfs/initrd @@ -54,7 +54,7 @@ $(TARGET) : # Finish up initrd directory -mkdir -p /install/initrd/{dev,etc,mnt,root,lib/modules/$(KVER)-ipfire/kernel/drivers,cdrom,dev,harddisk,proc,tmp,usr/share/terminfo/l,var/run,sys} - cd /install/initrd && lzma -d -c /boot/ipfirerd-$(KVER).img | cpio -i + cd /install/initrd && lzma -d -c /boot/initramfs-$(KVER)-ipfire.img | cpio -i # Copy Files packages for installer find $(DIR_SRC)/config/rootfiles/installer/* -maxdepth 1 | xargs cat | grep -v "^#" > /tmp/ROOTFILES From e079d9fbd58b3d829ad6af57b9d489677308fabe Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 24 Jul 2014 14:18:51 +0200 Subject: [PATCH 020/297] kernel: Remove unnecessary symlinks. --- config/rootfiles/common/armv5tel/linux-kirkwood | 1 - config/rootfiles/common/armv5tel/linux-multi | 1 - config/rootfiles/common/armv5tel/linux-rpi | 1 - config/rootfiles/common/i586/linux | 2 -- config/rootfiles/packages/linux-pae | 2 -- lfs/linux | 2 -- 6 files changed, 9 deletions(-) diff --git a/config/rootfiles/common/armv5tel/linux-kirkwood b/config/rootfiles/common/armv5tel/linux-kirkwood index 4880b60ff..bccf0fa77 100644 --- a/config/rootfiles/common/armv5tel/linux-kirkwood +++ b/config/rootfiles/common/armv5tel/linux-kirkwood @@ -1,5 +1,4 @@ boot/System.map-KVER-ipfire-kirkwood -#boot/System.map-ipfire-kirkwood boot/config-KVER-ipfire-kirkwood boot/dtb-KVER-ipfire-kirkwood #boot/dtb-KVER-ipfire-kirkwood/kirkwood-cloudbox.dtb diff --git a/config/rootfiles/common/armv5tel/linux-multi b/config/rootfiles/common/armv5tel/linux-multi index 3c20c5236..abc9e2454 100644 --- a/config/rootfiles/common/armv5tel/linux-multi +++ b/config/rootfiles/common/armv5tel/linux-multi @@ -1,5 +1,4 @@ boot/System.map-KVER-ipfire-multi -#boot/System.map-ipfire-multi boot/config-KVER-ipfire-multi boot/dtb-KVER-ipfire-multi #boot/dtb-KVER-ipfire-multi/am335x-bone.dtb diff --git a/config/rootfiles/common/armv5tel/linux-rpi b/config/rootfiles/common/armv5tel/linux-rpi index 01f9312ee..c10b51cf6 100644 --- a/config/rootfiles/common/armv5tel/linux-rpi +++ b/config/rootfiles/common/armv5tel/linux-rpi @@ -1,5 +1,4 @@ boot/System.map-KVER-ipfire-rpi -#boot/System.map-ipfire-rpi boot/config-KVER-ipfire-rpi boot/kernel.img boot/vmlinuz-KVER-ipfire-rpi diff --git a/config/rootfiles/common/i586/linux b/config/rootfiles/common/i586/linux index 99dd4202d..f005024e2 100644 --- a/config/rootfiles/common/i586/linux +++ b/config/rootfiles/common/i586/linux @@ -1,8 +1,6 @@ boot/System.map-KVER-ipfire -boot/System.map-ipfire boot/config-KVER-ipfire boot/vmlinuz-KVER-ipfire -boot/vmlinuz-ipfire etc/modprobe.d/framebuffer.conf etc/modprobe.d/ipv6.conf etc/modprobe.d/isdn.conf diff --git a/config/rootfiles/packages/linux-pae b/config/rootfiles/packages/linux-pae index 9b198c2bd..8227faaf7 100644 --- a/config/rootfiles/packages/linux-pae +++ b/config/rootfiles/packages/linux-pae @@ -1,8 +1,6 @@ boot/System.map-KVER-ipfire-pae -boot/System.map-ipfire-pae boot/config-KVER-ipfire-pae boot/vmlinuz-KVER-ipfire-pae -boot/vmlinuz-ipfire-pae #lib/modules lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/build diff --git a/lfs/linux b/lfs/linux index 6beb75c57..e62cecd75 100644 --- a/lfs/linux +++ b/lfs/linux @@ -277,13 +277,11 @@ ifeq "$(KCFG)" "-rpi" else cd $(DIR_APP) && make $(MAKETUNING) bzImage modules cd $(DIR_APP) && cp -v arch/i386/boot/bzImage /boot/vmlinuz-$(VER)-$(VERSUFIX) - ln -sf vmlinuz-$(VER)-$(VERSUFIX) /boot/vmlinuz-$(VERSUFIX) endif endif endif cd $(DIR_APP) && cp -v System.map /boot/System.map-$(VER)-$(VERSUFIX) cd $(DIR_APP) && cp -v .config /boot/config-$(VER)-$(VERSUFIX) - ln -sf System.map-$(VER)-$(VERSUFIX) /boot/System.map-$(VERSUFIX) cd $(DIR_APP) && make $(MAKETUNING) modules_install cd $(DIR_APP) && make $(MAKETUNING) firmware_install From fde373873bec1bea5cb5ac1c54d47cf75802dbf0 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 24 Jul 2014 14:21:01 +0200 Subject: [PATCH 021/297] installer: Wait until RAID device is usable. --- src/install+setup/install/hw.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index e7d60acd3..c86e006fb 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -711,8 +711,14 @@ int hw_setup_raid(struct hw_destination* dest) { while (counter-- > 0) { sleep(1); - if (access(dest->path, R_OK) == 0) + // If the raid device has not yet been properly brought up, + // opening it will fail with the message: Device or resource busy + // Hence we will wait a bit until it becomes usable. + FILE* f = fopen(dest->path, "r"); + if (f) { + fclose(f); break; + } } } From 268090a8914aea182dcd3b435d88598813947950 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 24 Jul 2014 14:21:38 +0200 Subject: [PATCH 022/297] installer: Wait until the kernel re-read the partition table. --- src/install+setup/install/hw.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index c86e006fb..1863dfc90 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -503,6 +503,30 @@ int hw_create_partitions(struct hw_destination* dest) { int r = mysystem(cmd); + // Wait until the system re-read the partition table + if (r == 0) { + unsigned int counter = 10; + + while (counter-- > 0) { + sleep(1); + + if (*dest->part_boot && (access(dest->part_boot, R_OK) != 0)) + continue; + + if (*dest->part_swap && (access(dest->part_swap, R_OK) != 0)) + continue; + + if (*dest->part_root && (access(dest->part_root, R_OK) != 0)) + continue; + + if (*dest->part_data && (access(dest->part_data, R_OK) != 0)) + continue; + + // All partitions do exist, exiting the loop. + break; + } + } + if (cmd) free(cmd); From f5007e9c998a0b74a8358221691524c3461dde20 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 24 Jul 2014 14:22:22 +0200 Subject: [PATCH 023/297] installer: Install GRUB2 instead of GRUB legacy. --- lfs/grub | 2 +- src/install+setup/install/hw.c | 41 ++++++++++++++++++++++++++++++-- src/install+setup/install/hw.h | 2 ++ src/install+setup/install/main.c | 24 +++++-------------- 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/lfs/grub b/lfs/grub index 2c5920f70..23f6dd3fd 100644 --- a/lfs/grub +++ b/lfs/grub @@ -79,7 +79,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) --prefix=/usr \ --sysconfdir=/etc \ --with-platform=pc \ - --with-grubdir=grub2 \ + --with-grubdir=grub \ --program-transform-name=s,grub,grub, \ --disable-grub-mount \ --disable-werror diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index 1863dfc90..77d024535 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -47,6 +47,14 @@ const char* other_filesystems[] = { NULL }; +static int system_chroot(const char* path, const char* cmd) { + char chroot_cmd[STRING_SIZE]; + + snprintf(chroot_cmd, sizeof(chroot_cmd), "/usr/sbin/chroot %s %s", path, cmd); + + return mysystem(chroot_cmd); +} + struct hw* hw_init() { struct hw* hw = malloc(sizeof(*hw)); assert(hw); @@ -460,7 +468,7 @@ int hw_create_partitions(struct hw_destination* dest) { else if (dest->part_table == HW_PART_TABLE_GPT) asprintf(&cmd, "%s mklabel gpt", cmd); - unsigned long long part_start = 0 * 1024 * 1024; // 1MB + unsigned long long part_start = 1 * 1024 * 1024; // 1MB if (*dest->part_boot) { asprintf(&cmd, "%s mkpart %s ext2 %lluMB %lluMB", cmd, @@ -707,7 +715,7 @@ int hw_setup_raid(struct hw_destination* dest) { assert(dest->is_raid); - asprintf(&cmd, "echo \"y\" | /sbin/mdadm --create --verbose --metadata=0.9 %s", dest->path); + asprintf(&cmd, "echo \"y\" | /sbin/mdadm --create --verbose --metadata=1.2 %s", dest->path); switch (dest->raid_level) { case 1: @@ -752,3 +760,32 @@ int hw_setup_raid(struct hw_destination* dest) { int hw_stop_all_raid_arrays() { return mysystem("/sbin/mdadm --stop --scan"); } + +int hw_install_bootloader(struct hw_destination* dest) { + char cmd[STRING_SIZE]; + int r; + + // Generate configuration file + snprintf(cmd, sizeof(cmd), "/usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg"); + r = system_chroot(DESTINATION_MOUNT_PATH, cmd); + if (r) + return r; + + char cmd_grub[STRING_SIZE]; + snprintf(cmd_grub, sizeof(cmd_grub), "/usr/sbin/grub-install --no-floppy --recheck"); + + if (dest->is_raid) { + snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->disk1->path); + r = system_chroot(DESTINATION_MOUNT_PATH, cmd); + if (r) + return r; + + snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->disk2->path); + r = system_chroot(DESTINATION_MOUNT_PATH, cmd); + } else { + snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->path); + r = system_chroot(DESTINATION_MOUNT_PATH, cmd); + } + + return r; +} diff --git a/src/install+setup/install/hw.h b/src/install+setup/install/hw.h index eb2908cb6..5cd4fe026 100644 --- a/src/install+setup/install/hw.h +++ b/src/install+setup/install/hw.h @@ -116,4 +116,6 @@ int hw_umount_filesystems(struct hw_destination* dest, const char* prefix); int hw_setup_raid(struct hw_destination* dest); int hw_stop_all_raid_arrays(); +int hw_install_bootloader(struct hw_destination* dest); + #endif /* HEADER_HW_H */ diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index d5fe422df..cc886bf2d 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -528,31 +528,19 @@ int main(int argc, char *argv[]) { snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE4#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_data); system(commandstring); - replace("/harddisk/boot/grub/grub.conf", "KVER", KERNEL_VERSION); - - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#root=ROOT#root=UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/boot/grub/grub.conf", destination->part_root); - system(commandstring); - - mysystem("ln -s grub.conf /harddisk/boot/grub/menu.lst"); - system("/bin/sed -e 's#/harddisk#/#g' -e 's#//#/#g' < /proc/mounts > /harddisk/etc/mtab"); - /* - * Generate device.map to help grub finding the device to install itself on. - */ - FILE *f = NULL; - if (f = fopen("/harddisk/boot/grub/device.map", "w")) { - fprintf(f, "(hd0) %s\n", destination->path); - fclose(f); - } + // Installing bootloader... + statuswindow(60, 4, title, ctr[TR_INSTALLING_GRUB]); - snprintf(commandstring, STRING_SIZE, - "/usr/sbin/chroot /harddisk /usr/sbin/grub-install --no-floppy %s", destination->path); - if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_GRUB])) { + rc = hw_install_bootloader(destination); + if (rc) { errorbox(ctr[TR_UNABLE_TO_INSTALL_GRUB]); goto EXIT; } + newtPopWindow(); + /* Serial console ? */ if (serialconsole) { /* grub */ From 22581f516301d61d778b8b76a3e0b233e91832a5 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 24 Jul 2014 15:28:12 +0200 Subject: [PATCH 024/297] installer: Reserve some space for RAID metadata. --- src/install+setup/install/hw.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index 77d024535..a88e5567d 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -341,6 +341,10 @@ static int hw_calculate_partition_table(struct hw_destination* dest) { if (dest->is_raid) { dest->size = (dest->disk1->size >= dest->disk2->size) ? dest->disk1->size : dest->disk2->size; + + // The RAID will install some metadata at the end of the disk + // and we will save up some space for that. + dest->size -= MB2BYTES(2); } else { dest->size = dest->disk1->size; } From b24eeabbe2b2165a06e59ae88c4b332be8ce3126 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 19:56:54 +0200 Subject: [PATCH 025/297] readline: Update to 6.3. --- config/rootfiles/common/readline | 8 +- lfs/readline | 8 +- src/patches/readline/readline52-001 | 30 --- src/patches/readline/readline52-002 | 49 ----- src/patches/readline/readline52-003 | 37 ---- src/patches/readline/readline52-004 | 70 ------ src/patches/readline/readline52-005 | 328 ---------------------------- src/patches/readline/readline52-006 | 62 ------ src/patches/readline/readline52-007 | 65 ------ src/patches/readline/readline52-008 | 70 ------ src/patches/readline/readline52-009 | 45 ---- src/patches/readline/readline52-010 | 47 ---- src/patches/readline/readline52-011 | 32 --- src/patches/readline/readline52-012 | 150 ------------- src/patches/readline/readline52-013 | 135 ------------ src/patches/readline/readline52-014 | 49 ----- src/patches/readline/readline62-001 | 46 ---- src/patches/readline/readline62-002 | 57 ----- src/patches/readline/readline62-003 | 76 ------- src/patches/readline/readline62-004 | 108 --------- src/patches/readline/readline63-001 | 43 ++++ src/patches/readline/readline63-002 | 44 ++++ src/patches/readline/readline63-003 | 47 ++++ src/patches/readline/readline63-004 | 45 ++++ src/patches/readline/readline63-005 | 58 +++++ src/patches/readline/readline63-006 | 63 ++++++ 26 files changed, 310 insertions(+), 1462 deletions(-) delete mode 100644 src/patches/readline/readline52-001 delete mode 100644 src/patches/readline/readline52-002 delete mode 100644 src/patches/readline/readline52-003 delete mode 100644 src/patches/readline/readline52-004 delete mode 100644 src/patches/readline/readline52-005 delete mode 100644 src/patches/readline/readline52-006 delete mode 100644 src/patches/readline/readline52-007 delete mode 100644 src/patches/readline/readline52-008 delete mode 100644 src/patches/readline/readline52-009 delete mode 100644 src/patches/readline/readline52-010 delete mode 100644 src/patches/readline/readline52-011 delete mode 100644 src/patches/readline/readline52-012 delete mode 100644 src/patches/readline/readline52-013 delete mode 100644 src/patches/readline/readline52-014 delete mode 100644 src/patches/readline/readline62-001 delete mode 100644 src/patches/readline/readline62-002 delete mode 100644 src/patches/readline/readline62-003 delete mode 100644 src/patches/readline/readline62-004 create mode 100644 src/patches/readline/readline63-001 create mode 100644 src/patches/readline/readline63-002 create mode 100644 src/patches/readline/readline63-003 create mode 100644 src/patches/readline/readline63-004 create mode 100644 src/patches/readline/readline63-005 create mode 100644 src/patches/readline/readline63-006 diff --git a/config/rootfiles/common/readline b/config/rootfiles/common/readline index 7bef2c18f..b2ac26dd4 100644 --- a/config/rootfiles/common/readline +++ b/config/rootfiles/common/readline @@ -9,10 +9,14 @@ #usr/include/readline/tilde.h #usr/lib/libhistory.so usr/lib/libhistory.so.6 -usr/lib/libhistory.so.6.2 +usr/lib/libhistory.so.6.3 #usr/lib/libreadline.so usr/lib/libreadline.so.6 -usr/lib/libreadline.so.6.2 +usr/lib/libreadline.so.6.3 +#usr/share/doc/readline +#usr/share/doc/readline/CHANGES +#usr/share/doc/readline/INSTALL +#usr/share/doc/readline/README #usr/share/info/history.info #usr/share/info/readline.info #usr/share/info/rluserman.info diff --git a/lfs/readline b/lfs/readline index 7b88adff2..eb488e336 100644 --- a/lfs/readline +++ b/lfs/readline @@ -24,7 +24,7 @@ include Config -VER = 6.2 +VER = 6.3 THISAPP = readline-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 67948acb2ca081f23359d0256e9a271c +$(DL_FILE)_MD5 = 33c8fb279e981274f485fd91da77e94a install : $(TARGET) @@ -71,8 +71,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - for i in $$(seq 1 4); do \ - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/readline/readline62-$$(printf "%03d" "$${i}") || exit 1; \ + for i in $$(seq 1 6); do \ + cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/readline/readline63-$$(printf "%03d" "$${i}") || exit 1; \ done cd $(DIR_APP) && ./configure --prefix=/usr --disable-static diff --git a/src/patches/readline/readline52-001 b/src/patches/readline/readline52-001 deleted file mode 100644 index 0bec9a278..000000000 --- a/src/patches/readline/readline52-001 +++ /dev/null @@ -1,30 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-001 - -Bug-Reported-by: ebb9@byu.net -Bug-Reference-ID: <45540862.9030900@byu.net> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00017.html - http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00016.html - -Bug-Description: - -In some cases, code that is intended to be used in the presence of multibyte -characters is called when no such characters are present, leading to incorrect -display position calculations and incorrect redisplay. - -Patch: - -*** ../readline-5.2/display.c Thu Sep 14 14:20:12 2006 ---- display.c Mon Nov 13 17:55:57 2006 -*************** -*** 2381,2384 **** ---- 2409,2414 ---- - if (end <= start) - return 0; -+ if (MB_CUR_MAX == 1 || rl_byte_oriented) -+ return (end - start); - - memset (&ps, 0, sizeof (mbstate_t)); diff --git a/src/patches/readline/readline52-002 b/src/patches/readline/readline52-002 deleted file mode 100644 index b0d8c9223..000000000 --- a/src/patches/readline/readline52-002 +++ /dev/null @@ -1,49 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-002 - -Bug-Reported-by: Magnus Svensson -Bug-Reference-ID: <45BDC44D.80609@mysql.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html - -Bug-Description: - -Readline neglects to reallocate the array it uses to keep track of wrapped -screen lines when increasing its size. This will eventually result in -segmentation faults when given sufficiently long input. - -Patch: - -*** ../readline-5.2-patched/display.c Thu Sep 14 14:20:12 2006 ---- display.c Fri Feb 2 20:23:17 2007 -*************** -*** 561,574 **** ---- 561,586 ---- - wrap_offset = prompt_invis_chars_first_line = 0; - } - -+ #if defined (HANDLE_MULTIBYTE) - #define CHECK_INV_LBREAKS() \ - do { \ - if (newlines >= (inv_lbsize - 2)) \ - { \ - inv_lbsize *= 2; \ - inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ -+ _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ - } \ - } while (0) -+ #else -+ #define CHECK_INV_LBREAKS() \ -+ do { \ -+ if (newlines >= (inv_lbsize - 2)) \ -+ { \ -+ inv_lbsize *= 2; \ -+ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ -+ } \ -+ } while (0) -+ #endif /* HANDLE_MULTIBYTE */ - - #if defined (HANDLE_MULTIBYTE) - #define CHECK_LPOS() \ diff --git a/src/patches/readline/readline52-003 b/src/patches/readline/readline52-003 deleted file mode 100644 index 06916b3b2..000000000 --- a/src/patches/readline/readline52-003 +++ /dev/null @@ -1,37 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-003 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1171795523.8021.18.camel@localhost> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html - -Bug-Description: - -When moving the cursor, bash sometimes misplaces the cursor when the prompt -contains two or more multibyte characters. The particular circumstance that -uncovered the problem was having the (multibyte) current directory name in -the prompt string. - -Patch: - -*** ../readline-5.2.2/display.c Fri Jan 19 13:34:50 2007 ---- display.c Sat Mar 10 17:25:44 2007 -*************** -*** 1745,1749 **** - { - dpos = _rl_col_width (data, 0, new); -! if (dpos > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; ---- 1745,1752 ---- - { - dpos = _rl_col_width (data, 0, new); -! /* Use NEW when comparing against the last invisible character in the -! prompt string, since they're both buffer indices and DPOS is a -! desired display position. */ -! if (new > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; diff --git a/src/patches/readline/readline52-004 b/src/patches/readline/readline52-004 deleted file mode 100644 index b165ad9f4..000000000 --- a/src/patches/readline/readline52-004 +++ /dev/null @@ -1,70 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-004 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1173636022.7039.36.camel@localhost> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html - -Bug-Description: - -When restoring the original prompt after finishing an incremental search, -bash sometimes places the cursor incorrectly if the primary prompt contains -invisible characters. - -Patch: - -*** ../readline-5.2.3/display.c Fri Apr 20 13:30:16 2007 ---- display.c Fri Apr 20 15:17:01 2007 -*************** -*** 1599,1604 **** - if (temp > 0) - { - _rl_output_some_chars (nfd, temp); -! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; - } - } ---- 1599,1618 ---- - if (temp > 0) - { -+ /* If nfd begins at the prompt, or before the invisible -+ characters in the prompt, we need to adjust _rl_last_c_pos -+ in a multibyte locale to account for the wrap offset and -+ set cpos_adjusted accordingly. */ - _rl_output_some_chars (nfd, temp); -! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -! { -! _rl_last_c_pos += _rl_col_width (nfd, 0, temp); -! if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -! { -! _rl_last_c_pos -= wrap_offset; -! cpos_adjusted = 1; -! } -! } -! else -! _rl_last_c_pos += temp; - } - } -*************** -*** 1608,1613 **** ---- 1622,1639 ---- - if (temp > 0) - { -+ /* If nfd begins at the prompt, or before the invisible -+ characters in the prompt, we need to adjust _rl_last_c_pos -+ in a multibyte locale to account for the wrap offset and -+ set cpos_adjusted accordingly. */ - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; /* XXX */ -+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -+ { -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ } - } - lendiff = (oe - old) - (ne - new); diff --git a/src/patches/readline/readline52-005 b/src/patches/readline/readline52-005 deleted file mode 100644 index d192ac152..000000000 --- a/src/patches/readline/readline52-005 +++ /dev/null @@ -1,328 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-005 - -Bug-Reported-by: Thomas Loeber -Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html - -Bug-Description: - -When rl_read_key returns -1, indicating that readline's controlling terminal -has been invalidated for some reason (e.g., receiving a SIGHUP), the error -status was not reported correctly to the caller. This could cause input -loops. - -Patch: - -*** ../readline-5.2/complete.c Fri Jul 28 11:35:49 2006 ---- complete.c Tue Mar 13 08:50:16 2007 -*************** -*** 429,433 **** - if (c == 'n' || c == 'N' || c == RUBOUT) - return (0); -! if (c == ABORT_CHAR) - _rl_abort_internal (); - if (for_pager && (c == NEWLINE || c == RETURN)) ---- 440,444 ---- - if (c == 'n' || c == 'N' || c == RUBOUT) - return (0); -! if (c == ABORT_CHAR || c < 0) - _rl_abort_internal (); - if (for_pager && (c == NEWLINE || c == RETURN)) -*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 ---- input.c Wed May 2 16:07:59 2007 -*************** -*** 514,518 **** - int size; - { -! int mb_len = 0; - size_t mbchar_bytes_length; - wchar_t wc; ---- 522,526 ---- - int size; - { -! int mb_len, c; - size_t mbchar_bytes_length; - wchar_t wc; -*************** -*** 521,531 **** - memset(&ps, 0, sizeof (mbstate_t)); - memset(&ps_back, 0, sizeof (mbstate_t)); -! - while (mb_len < size) - { - RL_SETSTATE(RL_STATE_MOREINPUT); -! mbchar[mb_len++] = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - - mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); - if (mbchar_bytes_length == (size_t)(-1)) ---- 529,545 ---- - memset(&ps, 0, sizeof (mbstate_t)); - memset(&ps_back, 0, sizeof (mbstate_t)); -! -! mb_len = 0; - while (mb_len < size) - { - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ break; -+ -+ mbchar[mb_len++] = c; -+ - mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); - if (mbchar_bytes_length == (size_t)(-1)) -*************** -*** 565,569 **** - c = first; - memset (mb, 0, mlen); -! for (i = 0; i < mlen; i++) - { - mb[i] = (char)c; ---- 579,583 ---- - c = first; - memset (mb, 0, mlen); -! for (i = 0; c >= 0 && i < mlen; i++) - { - mb[i] = (char)c; -*** ../readline-5.2/isearch.c Mon Dec 26 17:18:53 2005 ---- isearch.c Fri Mar 9 14:30:59 2007 -*************** -*** 328,333 **** - - f = (rl_command_func_t *)NULL; -! -! /* Translate the keys we do something with to opcodes. */ - if (c >= 0 && _rl_keymap[c].type == ISFUNC) - { ---- 328,340 ---- - - f = (rl_command_func_t *)NULL; -! -! if (c < 0) -! { -! cxt->sflags |= SF_FAILED; -! cxt->history_pos = cxt->last_found_line; -! return -1; -! } -! -! /* Translate the keys we do something with to opcodes. */ - if (c >= 0 && _rl_keymap[c].type == ISFUNC) - { -*** ../readline-5.2/misc.c Mon Dec 26 17:20:46 2005 ---- misc.c Fri Mar 9 14:44:11 2007 -*************** -*** 147,150 **** ---- 147,152 ---- - rl_clear_message (); - RL_UNSETSTATE(RL_STATE_NUMERICARG); -+ if (key < 0) -+ return -1; - return (_rl_dispatch (key, _rl_keymap)); - } -*** ../readline-5.2/readline.c Wed Aug 16 15:00:36 2006 ---- readline.c Fri Mar 9 14:47:24 2007 -*************** -*** 646,649 **** ---- 669,677 ---- - { - nkey = _rl_subseq_getchar (cxt->okey); -+ if (nkey < 0) -+ { -+ _rl_abort_internal (); -+ return -1; -+ } - r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); - cxt->flags |= KSEQ_DISPATCHED; -*** ../readline-5.2/text.c Fri Jul 28 11:55:27 2006 ---- text.c Sun Mar 25 13:41:38 2007 -*************** -*** 858,861 **** ---- 864,870 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - #if defined (HANDLE_SIGNALS) - if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) -*************** -*** 1521,1524 **** ---- 1530,1536 ---- - mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); - -+ if (mb_len <= 0) -+ return -1; -+ - if (count < 0) - return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); -*************** -*** 1537,1540 **** ---- 1549,1555 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - if (count < 0) - return (_rl_char_search_internal (-count, bdir, c)); -*** ../readline-5.2/vi_mode.c Sat Jul 29 16:42:28 2006 ---- vi_mode.c Fri Mar 9 15:02:11 2007 -*************** -*** 887,890 **** ---- 887,897 ---- - c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ -+ if (c < 0) -+ { -+ *nextkey = 0; -+ return -1; -+ } -+ - *nextkey = c; - -*************** -*** 903,906 **** ---- 910,918 ---- - c = rl_read_key (); /* real command */ - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ if (c < 0) -+ { -+ *nextkey = 0; -+ return -1; -+ } - *nextkey = c; - } -*************** -*** 1225,1236 **** - _rl_callback_generic_arg *data; - { - #if defined (HANDLE_MULTIBYTE) -! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! _rl_vi_last_search_char = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - - _rl_callback_func = 0; - _rl_want_redisplay = 1; ---- 1243,1262 ---- - _rl_callback_generic_arg *data; - { -+ int c; - #if defined (HANDLE_MULTIBYTE) -! c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - -+ if (c <= 0) -+ return -1; -+ -+ #if !defined (HANDLE_MULTIBYTE) -+ _rl_vi_last_search_char = c; -+ #endif -+ - _rl_callback_func = 0; - _rl_want_redisplay = 1; -*************** -*** 1248,1251 **** ---- 1274,1278 ---- - int count, key; - { -+ int c; - #if defined (HANDLE_MULTIBYTE) - static char *target; -*************** -*** 1294,1302 **** - { - #if defined (HANDLE_MULTIBYTE) -! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! _rl_vi_last_search_char = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - } ---- 1321,1335 ---- - { - #if defined (HANDLE_MULTIBYTE) -! c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); -! if (c <= 0) -! return -1; -! _rl_vi_last_search_mblen = c; - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ if (c < 0) -+ return -1; -+ _rl_vi_last_search_char = c; - #endif - } -*************** -*** 1468,1471 **** ---- 1501,1507 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - #if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -*************** -*** 1486,1489 **** ---- 1522,1528 ---- - _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); - -+ if (c < 0) -+ return -1; -+ - _rl_callback_func = 0; - _rl_want_redisplay = 1; -*************** -*** 1517,1520 **** ---- 1556,1562 ---- - _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); - -+ if (c < 0) -+ return -1; -+ - return (_rl_vi_change_char (count, c, mb)); - } -*************** -*** 1651,1655 **** - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -! if (ch < 'a' || ch > 'z') - { - rl_ding (); ---- 1693,1697 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -! if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ - { - rl_ding (); -*************** -*** 1703,1707 **** - return 0; - } -! else if (ch < 'a' || ch > 'z') - { - rl_ding (); ---- 1745,1749 ---- - return 0; - } -! else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ - { - rl_ding (); diff --git a/src/patches/readline/readline52-006 b/src/patches/readline/readline52-006 deleted file mode 100644 index d7391438d..000000000 --- a/src/patches/readline/readline52-006 +++ /dev/null @@ -1,62 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-006 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1178376645.9063.25.camel@localhost> -Bug-Reference-URL: http://bugs.gentoo.org/177095 - -Bug-Description: - -The readline display code miscalculated the screen position when performing -a redisplay in which the new text occupies more screen space that the old, -but takes fewer bytes to do so (e.g., when replacing a shorter string -containing multibyte characters with a longer one containing only ASCII). - -Patch: - -*** ../readline-5.2/display.c Thu Apr 26 11:38:22 2007 ---- display.c Thu Jul 12 23:10:10 2007 -*************** -*** 1519,1527 **** - /* Non-zero if we're increasing the number of lines. */ - int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; - /* Sometimes it is cheaper to print the characters rather than - use the terminal's capabilities. If we're growing the number - of lines, make sure we actually cause the new line to wrap - around on auto-wrapping terminals. */ -! if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) - { - /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and ---- 1568,1596 ---- - /* Non-zero if we're increasing the number of lines. */ - int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; -+ /* If col_lendiff is > 0, implying that the new string takes up more -+ screen real estate than the old, but lendiff is < 0, meaning that it -+ takes fewer bytes, we need to just output the characters starting -+ from the first difference. These will overwrite what is on the -+ display, so there's no reason to do a smart update. This can really -+ only happen in a multibyte environment. */ -+ if (lendiff < 0) -+ { -+ _rl_output_some_chars (nfd, temp); -+ _rl_last_c_pos += _rl_col_width (nfd, 0, temp); -+ /* If nfd begins before any invisible characters in the prompt, -+ adjust _rl_last_c_pos to account for wrap_offset and set -+ cpos_adjusted to let the caller know. */ -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ return; -+ } - /* Sometimes it is cheaper to print the characters rather than - use the terminal's capabilities. If we're growing the number - of lines, make sure we actually cause the new line to wrap - around on auto-wrapping terminals. */ -! else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) - { - /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and diff --git a/src/patches/readline/readline52-007 b/src/patches/readline/readline52-007 deleted file mode 100644 index f75f53fc6..000000000 --- a/src/patches/readline/readline52-007 +++ /dev/null @@ -1,65 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-007 - -Bug-Reported-by: Tom Bjorkholm -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html - - -Bug-Description: - -An off-by-one error in readline's input buffering caused readline to drop -each 511th character of buffered input (e.g., when pasting a large amount -of data into a terminal window). - -Patch: - -*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 ---- input.c Tue Jul 17 09:24:21 2007 -*************** -*** 134,139 **** - - *key = ibuffer[pop_index++]; -! - if (pop_index >= ibuffer_len) - pop_index = 0; - ---- 134,142 ---- - - *key = ibuffer[pop_index++]; -! #if 0 - if (pop_index >= ibuffer_len) -+ #else -+ if (pop_index > ibuffer_len) -+ #endif - pop_index = 0; - -*************** -*** 251,255 **** - { - k = (*rl_getc_function) (rl_instream); -! rl_stuff_char (k); - if (k == NEWLINE || k == RETURN) - break; ---- 254,259 ---- - { - k = (*rl_getc_function) (rl_instream); -! if (rl_stuff_char (k) == 0) -! break; /* some problem; no more room */ - if (k == NEWLINE || k == RETURN) - break; -*************** -*** 374,378 **** ---- 378,386 ---- - } - ibuffer[push_index++] = key; -+ #if 0 - if (push_index >= ibuffer_len) -+ #else -+ if (push_index > ibuffer_len) -+ #endif - push_index = 0; - diff --git a/src/patches/readline/readline52-008 b/src/patches/readline/readline52-008 deleted file mode 100644 index 1d7f3277f..000000000 --- a/src/patches/readline/readline52-008 +++ /dev/null @@ -1,70 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-008 - -Bug-Reported-by: dAniel hAhler -Bug-Reference-ID: <4702ED8A.5000503@thequod.de> -Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938 - -Bug-Description: - -When updating the display after displaying, for instance, a list of possible -completions, readline will place the cursor at the wrong position if the -prompt contains invisible characters and a newline. - -Patch: - -*** ../readline-5.2-patched/display.c Mon Aug 6 14:26:29 2007 ---- display.c Wed Oct 10 22:43:58 2007 -*************** -*** 1049,1053 **** - else - tx = nleft; -! if (_rl_last_c_pos > tx) - { - _rl_backspace (_rl_last_c_pos - tx); /* XXX */ ---- 1049,1053 ---- - else - tx = nleft; -! if (tx >= 0 && _rl_last_c_pos > tx) - { - _rl_backspace (_rl_last_c_pos - tx); /* XXX */ -*************** -*** 1205,1209 **** - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd; - int current_invis_chars; - int col_lendiff, col_temp; ---- 1205,1209 ---- - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; -*************** -*** 1466,1469 **** ---- 1466,1471 ---- - } - -+ o_cpos = _rl_last_c_pos; -+ - /* When this function returns, _rl_last_c_pos is correct, and an absolute - cursor postion in multibyte mode, but a buffer index when not in a -*************** -*** 1475,1479 **** - invisible characters in the prompt string. Let's see if setting this when - we make sure we're at the end of the drawn prompt string works. */ -! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars) - cpos_adjusted = 1; - #endif ---- 1477,1483 ---- - invisible characters in the prompt string. Let's see if setting this when - we make sure we're at the end of the drawn prompt string works. */ -! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && -! (_rl_last_c_pos > 0 || o_cpos > 0) && -! _rl_last_c_pos == prompt_physical_chars) - cpos_adjusted = 1; - #endif diff --git a/src/patches/readline/readline52-009 b/src/patches/readline/readline52-009 deleted file mode 100644 index af9e38174..000000000 --- a/src/patches/readline/readline52-009 +++ /dev/null @@ -1,45 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-009 - -Bug-Reported-by: dAniel hAhler -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under some circumstances, readline will incorrectly display a prompt string -containing invisible characters after the final newline. - -Patch: - -*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 ---- display.c 2007-11-10 17:51:29.000000000 -0500 -*************** -*** 392,396 **** - local_prompt = expand_prompt (p, &prompt_visible_length, - &prompt_last_invisible, -! (int *)NULL, - &prompt_physical_chars); - c = *t; *t = '\0'; ---- 420,424 ---- - local_prompt = expand_prompt (p, &prompt_visible_length, - &prompt_last_invisible, -! &prompt_invis_chars_first_line, - &prompt_physical_chars); - c = *t; *t = '\0'; -*************** -*** 399,403 **** - local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, - (int *)NULL, -! &prompt_invis_chars_first_line, - (int *)NULL); - *t = c; ---- 427,431 ---- - local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, - (int *)NULL, -! (int *)NULL, - (int *)NULL); - *t = c; diff --git a/src/patches/readline/readline52-010 b/src/patches/readline/readline52-010 deleted file mode 100644 index ee5c026f8..000000000 --- a/src/patches/readline/readline52-010 +++ /dev/null @@ -1,47 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-010 - -Bug-Reported-by: Miroslav Lichvar -Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100 -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html - -Bug-Description: - -In certain cases when outputting characters at the end of the line, -e.g., when displaying the prompt string, readline positions the cursor -incorrectly if the prompt string contains invisible characters and the -text being drawn begins before the last invisible character in the line. - -Patch: - -*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 ---- display.c 2007-11-10 17:51:29.000000000 -0500 -*************** -*** 1566,1574 **** - else - { -- /* We have horizontal scrolling and we are not inserting at -- the end. We have invisible characters in this line. This -- is a dumb update. */ - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; - return; - } ---- 1619,1632 ---- - else - { - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; -+ /* If nfd begins before any invisible characters in the prompt, -+ adjust _rl_last_c_pos to account for wrap_offset and set -+ cpos_adjusted to let the caller know. */ -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } - return; - } diff --git a/src/patches/readline/readline52-011 b/src/patches/readline/readline52-011 deleted file mode 100644 index a1197ede6..000000000 --- a/src/patches/readline/readline52-011 +++ /dev/null @@ -1,32 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-011 - -Bug-Reported-by: Uwe Doering -Bug-Reference-ID: <46F3DD72.2090801@geminix.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html - -Bug-Description: - -There is an off-by-one error in the code that buffers characters received -very quickly in succession, causing characters to be dropped. - -Patch: - -*** ../readline-5.2-patched/input.c 2007-08-25 13:47:10.000000000 -0400 ---- input.c 2007-10-12 22:55:25.000000000 -0400 -*************** -*** 155,159 **** - pop_index--; - if (pop_index < 0) -! pop_index = ibuffer_len - 1; - ibuffer[pop_index] = key; - return (1); ---- 155,159 ---- - pop_index--; - if (pop_index < 0) -! pop_index = ibuffer_len; - ibuffer[pop_index] = key; - return (1); diff --git a/src/patches/readline/readline52-012 b/src/patches/readline/readline52-012 deleted file mode 100644 index 7b370240c..000000000 --- a/src/patches/readline/readline52-012 +++ /dev/null @@ -1,150 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-012 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -This updates the options required to create shared libraries on several -systems, including Mac OS X 10.5 (darwin9.x), FreeBSD, NetBSD, OpenBSD, -AIX, and HP/UX. - -Patch: - -*** ../readline-5.2-patched/support/shobj-conf 2006-04-11 09:15:43.000000000 -0400 ---- support/shobj-conf 2007-12-06 23:46:41.000000000 -0500 -*************** -*** 11,15 **** - # chet@po.cwru.edu - -! # Copyright (C) 1996-2002 Free Software Foundation, Inc. - # - # This program is free software; you can redistribute it and/or modify ---- 11,15 ---- - # chet@po.cwru.edu - -! # Copyright (C) 1996-2007 Free Software Foundation, Inc. - # - # This program is free software; you can redistribute it and/or modify -*************** -*** 115,119 **** - ;; - -! freebsd2* | netbsd*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD=ld ---- 115,119 ---- - ;; - -! freebsd2*) - SHOBJ_CFLAGS=-fpic - SHOBJ_LD=ld -*************** -*** 126,130 **** - # FreeBSD-3.x ELF - freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) -! SHOBJ_CFLAGS=-fpic - SHOBJ_LD='${CC}' - ---- 126,130 ---- - # FreeBSD-3.x ELF - freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) -! SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' - -*************** -*** 143,147 **** - - # Darwin/MacOS X -! darwin8*) - SHOBJ_STATUS=supported - SHLIB_STATUS=supported ---- 143,147 ---- - - # Darwin/MacOS X -! darwin[89]*) - SHOBJ_STATUS=supported - SHLIB_STATUS=supported -*************** -*** 154,158 **** - SHLIB_LIBSUFF='dylib' - -! SHOBJ_LDFLAGS='-undefined dynamic_lookup' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ---- 154,158 ---- - SHLIB_LIBSUFF='dylib' - -! SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - -*************** -*** 172,176 **** - - case "${host_os}" in -! darwin[78]*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; ---- 172,176 ---- - - case "${host_os}" in -! darwin[789]*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; -*************** -*** 183,187 **** - ;; - -! openbsd*) - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' ---- 183,187 ---- - ;; - -! openbsd*|netbsd*) - SHOBJ_CFLAGS=-fPIC - SHOBJ_LD='${CC}' -*************** -*** 248,252 **** - ;; - -! aix4.[2-9]*-*gcc*) # lightly tested by jik@cisco.com - SHOBJ_CFLAGS=-fpic - SHOBJ_LD='ld' ---- 248,252 ---- - ;; - -! aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com - SHOBJ_CFLAGS=-fpic - SHOBJ_LD='ld' -*************** -*** 259,263 **** - ;; - -! aix4.[2-9]*) - SHOBJ_CFLAGS=-K - SHOBJ_LD='ld' ---- 259,263 ---- - ;; - -! aix4.[2-9]*|aix[5-9].*) - SHOBJ_CFLAGS=-K - SHOBJ_LD='ld' -*************** -*** 330,334 **** - # if you have problems linking here, moving the `-Wl,+h,$@' from - # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work -! SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' - - SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' ---- 330,334 ---- - # if you have problems linking here, moving the `-Wl,+h,$@' from - # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work -! SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' - - SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' diff --git a/src/patches/readline/readline52-013 b/src/patches/readline/readline52-013 deleted file mode 100644 index 82a18972a..000000000 --- a/src/patches/readline/readline52-013 +++ /dev/null @@ -1,135 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-013 - -Bug-Reported-by: slinkp -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html - -Bug-Description: - -The presence of invisible characters in a prompt longer than the screenwidth -with invisible characters on the first and last prompt lines caused readline -to place the cursor in the wrong physical location. - -Patch: - -*** ../readline-5.2-patched/display.c 2007-12-14 21:12:40.000000000 -0500 ---- display.c 2008-10-23 09:39:46.000000000 -0400 -*************** -*** 911,914 **** ---- 944,951 ---- - OFFSET (which has already been calculated above). */ - -+ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) -+ #define WRAP_OFFSET(line, offset) ((line == 0) \ -+ ? (offset ? INVIS_FIRST() : 0) \ -+ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) - #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) - #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) -*************** -*** 945,949 **** - _rl_last_c_pos > wrap_offset && - o_cpos < prompt_last_invisible) -! _rl_last_c_pos -= wrap_offset; - - /* If this is the line with the prompt, we might need to ---- 982,992 ---- - _rl_last_c_pos > wrap_offset && - o_cpos < prompt_last_invisible) -! _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ -! else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && -! (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && -! cpos_adjusted == 0 && -! _rl_last_c_pos != o_cpos && -! _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) -! _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); - - /* If this is the line with the prompt, we might need to -*************** -*** 1205,1209 **** - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; ---- 1264,1268 ---- - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, twidth, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; -*************** -*** 1221,1225 **** - temp = _rl_last_c_pos; - else -! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); - if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode - && _rl_last_v_pos == current_line - 1) ---- 1280,1284 ---- - temp = _rl_last_c_pos; - else -! temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); - if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode - && _rl_last_v_pos == current_line - 1) -*************** -*** 1587,1599 **** - { - _rl_output_some_chars (nfd + lendiff, temp - lendiff); -- #if 1 - /* XXX -- this bears closer inspection. Fixes a redisplay bug - reported against bash-3.0-alpha by Andreas Schwab involving - multibyte characters and prompt strings with invisible - characters, but was previously disabled. */ -! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); -! #else -! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); -! #endif - } - } ---- 1648,1660 ---- - { - _rl_output_some_chars (nfd + lendiff, temp - lendiff); - /* XXX -- this bears closer inspection. Fixes a redisplay bug - reported against bash-3.0-alpha by Andreas Schwab involving - multibyte characters and prompt strings with invisible - characters, but was previously disabled. */ -! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -! twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); -! else -! twidth = temp - lendiff; -! _rl_last_c_pos += twidth; - } - } -*************** -*** 1789,1793 **** - int cpos, dpos; /* current and desired cursor positions */ - -! woff = W_OFFSET (_rl_last_v_pos, wrap_offset); - cpos = _rl_last_c_pos; - #if defined (HANDLE_MULTIBYTE) ---- 1850,1854 ---- - int cpos, dpos; /* current and desired cursor positions */ - -! woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); - cpos = _rl_last_c_pos; - #if defined (HANDLE_MULTIBYTE) -*************** -*** 1803,1807 **** - prompt string, since they're both buffer indices and DPOS is a - desired display position. */ -! if (new > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; ---- 1864,1872 ---- - prompt string, since they're both buffer indices and DPOS is a - desired display position. */ -! if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ -! (prompt_physical_chars > _rl_screenwidth && -! _rl_last_v_pos == prompt_last_screen_line && -! wrap_offset != woff && -! new > (prompt_last_invisible-_rl_screenwidth-wrap_offset))) - { - dpos -= woff; diff --git a/src/patches/readline/readline52-014 b/src/patches/readline/readline52-014 deleted file mode 100644 index 8dfaae45d..000000000 --- a/src/patches/readline/readline52-014 +++ /dev/null @@ -1,49 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 5.2 -Patch-ID: readline52-014 - -Bug-Reported-by: Len Lattanzi -Bug-Reference-ID: <52B1297F-6675-45CC-B63E-24745337D006@apple.com> -Bug-Reference-URL: - -Bug-Description: - -On systems where mbrtowc() returns -2 when passed a length argument with -value 0, when using a multibyte locale, Readline's emacs-mode forward-char -at the end of a line will leave the point beyond the end of the line. - -Patch: - -*** ../readline-5.2-patched/mbutil.c 2009-05-29 23:09:26.000000000 -0400 ---- mbutil.c 2009-05-29 23:10:12.000000000 -0400 -*************** -*** 78,82 **** - int seed, count, find_non_zero; - { -! size_t tmp; - mbstate_t ps; - int point; ---- 78,82 ---- - int seed, count, find_non_zero; - { -! size_t tmp, len; - mbstate_t ps; - int point; -*************** -*** 99,103 **** - while (count > 0) - { -! tmp = mbrtowc (&wc, string+point, strlen(string + point), &ps); - if (MB_INVALIDCH ((size_t)tmp)) - { ---- 99,106 ---- - while (count > 0) - { -! len = strlen (string + point); -! if (len == 0) -! break; -! tmp = mbrtowc (&wc, string+point, len, &ps); - if (MB_INVALIDCH ((size_t)tmp)) - { diff --git a/src/patches/readline/readline62-001 b/src/patches/readline/readline62-001 deleted file mode 100644 index d4563c3b1..000000000 --- a/src/patches/readline/readline62-001 +++ /dev/null @@ -1,46 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-001 - -Bug-Reported-by: Clark J. Wang -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00157.html - -Bug-Description: - -The readline vi-mode `cc', `dd', and `yy' commands failed to modify the -entire line. - -[This patch intentionally does not modify patchlevel] - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/vi_mode.c 2010-11-20 19:51:39.000000000 -0500 ---- vi_mode.c 2011-02-17 20:24:25.000000000 -0500 -*************** -*** 1115,1119 **** - _rl_vi_last_motion = c; - RL_UNSETSTATE (RL_STATE_VIMOTION); -! return (0); - } - #if defined (READLINE_CALLBACKS) ---- 1115,1119 ---- - _rl_vi_last_motion = c; - RL_UNSETSTATE (RL_STATE_VIMOTION); -! return (vidomove_dispatch (m)); - } - #if defined (READLINE_CALLBACKS) -*** ../readline-6.2-patched/callback.c 2010-06-06 12:18:58.000000000 -0400 ---- callback.c 2011-02-17 20:43:28.000000000 -0500 -*************** -*** 149,152 **** ---- 149,155 ---- - /* Should handle everything, including cleanup, numeric arguments, - and turning off RL_STATE_VIMOTION */ -+ if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) -+ _rl_internal_char_cleanup (); -+ - return; - } diff --git a/src/patches/readline/readline62-002 b/src/patches/readline/readline62-002 deleted file mode 100644 index 3dc260400..000000000 --- a/src/patches/readline/readline62-002 +++ /dev/null @@ -1,57 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-002 - -Bug-Reported-by: Vincent Sheffer -Bug-Reference-ID: -Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-readline/2011-08/msg00000.html - -Bug-Description: - -The readline shared library helper script needs to be updated for Mac OS X -10.7 (Lion, darwin11). - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/support/shobj-conf 2009-10-28 09:20:21.000000000 -0400 ---- support/shobj-conf 2011-08-27 13:25:23.000000000 -0400 -*************** -*** 158,162 **** - - # Darwin/MacOS X -! darwin[89]*|darwin10*) - SHOBJ_STATUS=supported - SHLIB_STATUS=supported ---- 172,176 ---- - - # Darwin/MacOS X -! darwin[89]*|darwin1[012]*) - SHOBJ_STATUS=supported - SHLIB_STATUS=supported -*************** -*** 187,191 **** - - case "${host_os}" in -! darwin[789]*|darwin10*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; ---- 201,205 ---- - - case "${host_os}" in -! darwin[789]*|darwin1[012]*) SHOBJ_LDFLAGS='' - SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' - ;; - -*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500 ---- patchlevel 2011-11-17 11:09:35.000000000 -0500 -*************** -*** 1,3 **** - # Do not edit -- exists only for use by patch - -! 1 ---- 1,3 ---- - # Do not edit -- exists only for use by patch - -! 2 diff --git a/src/patches/readline/readline62-003 b/src/patches/readline/readline62-003 deleted file mode 100644 index 0462242e0..000000000 --- a/src/patches/readline/readline62-003 +++ /dev/null @@ -1,76 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-003 - -Bug-Reported-by: Max Horn -Bug-Reference-ID: <20CC5C60-07C3-4E41-9817-741E48D407C5@quendi.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2012-06/msg00005.html - -Bug-Description: - -A change between readline-6.1 and readline-6.2 to prevent the readline input -hook from being called too frequently had the side effect of causing delays -when reading pasted input on systems such as Mac OS X. This patch fixes -those delays while retaining the readline-6.2 behavior. - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/input.c 2010-05-30 18:33:01.000000000 -0400 ---- input.c 2012-06-25 21:08:42.000000000 -0400 -*************** -*** 410,414 **** - rl_read_key () - { -! int c; - - rl_key_sequence_length++; ---- 412,416 ---- - rl_read_key () - { -! int c, r; - - rl_key_sequence_length++; -*************** -*** 430,441 **** - while (rl_event_hook) - { -! if (rl_gather_tyi () < 0) /* XXX - EIO */ - { - rl_done = 1; - return ('\n'); - } - RL_CHECK_SIGNALS (); -- if (rl_get_char (&c) != 0) -- break; - if (rl_done) /* XXX - experimental */ - return ('\n'); ---- 432,447 ---- - while (rl_event_hook) - { -! if (rl_get_char (&c) != 0) -! break; -! -! if ((r = rl_gather_tyi ()) < 0) /* XXX - EIO */ - { - rl_done = 1; - return ('\n'); - } -+ else if (r == 1) /* read something */ -+ continue; -+ - RL_CHECK_SIGNALS (); - if (rl_done) /* XXX - experimental */ - return ('\n'); -*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500 ---- patchlevel 2011-11-17 11:09:35.000000000 -0500 -*************** -*** 1,3 **** - # Do not edit -- exists only for use by patch - -! 2 ---- 1,3 ---- - # Do not edit -- exists only for use by patch - -! 3 diff --git a/src/patches/readline/readline62-004 b/src/patches/readline/readline62-004 deleted file mode 100644 index 5f3ba9bb3..000000000 --- a/src/patches/readline/readline62-004 +++ /dev/null @@ -1,108 +0,0 @@ - READLINE PATCH REPORT - ===================== - -Readline-Release: 6.2 -Patch-ID: readline62-004 - -Bug-Reported-by: Jakub Filak -Bug-Reference-ID: -Bug-Reference-URL: https://bugzilla.redhat.com/show_bug.cgi?id=813289 - -Bug-Description: - -Attempting to redo (using `.') the vi editing mode `cc', `dd', or `yy' -commands leads to an infinite loop. - -Patch (apply with `patch -p0'): - -*** ../readline-6.2-patched/vi_mode.c 2011-02-25 11:17:02.000000000 -0500 ---- vi_mode.c 2012-06-02 12:24:47.000000000 -0400 -*************** -*** 1235,1243 **** - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing) - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) ---- 1297,1313 ---- - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing && _rl_vi_last_motion != 'd') /* `dd' is special */ - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } -+ else if (vi_redoing) /* handle redoing `dd' here */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ rl_mark = rl_end; -+ rl_beg_of_line (1, key); -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ r = vidomove_dispatch (_rl_vimvcxt); -+ } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) -*************** -*** 1317,1325 **** - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing) - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) ---- 1387,1403 ---- - r = rl_domove_motion_callback (_rl_vimvcxt); - } -! else if (vi_redoing && _rl_vi_last_motion != 'c') /* `cc' is special */ - { - _rl_vimvcxt->motion = _rl_vi_last_motion; - r = rl_domove_motion_callback (_rl_vimvcxt); - } -+ else if (vi_redoing) /* handle redoing `cc' here */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ rl_mark = rl_end; -+ rl_beg_of_line (1, key); -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ r = vidomove_dispatch (_rl_vimvcxt); -+ } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) -*************** -*** 1378,1381 **** ---- 1456,1472 ---- - r = rl_domove_motion_callback (_rl_vimvcxt); - } -+ else if (vi_redoing && _rl_vi_last_motion != 'y') /* `yy' is special */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ r = rl_domove_motion_callback (_rl_vimvcxt); -+ } -+ else if (vi_redoing) /* handle redoing `yy' here */ -+ { -+ _rl_vimvcxt->motion = _rl_vi_last_motion; -+ rl_mark = rl_end; -+ rl_beg_of_line (1, key); -+ RL_UNSETSTATE (RL_STATE_VIMOTION); -+ r = vidomove_dispatch (_rl_vimvcxt); -+ } - #if defined (READLINE_CALLBACKS) - else if (RL_ISSTATE (RL_STATE_CALLBACK)) -*** ../readline-6.2-patched/patchlevel 2010-01-14 10:15:52.000000000 -0500 ---- patchlevel 2011-11-17 11:09:35.000000000 -0500 -*************** -*** 1,3 **** - # Do not edit -- exists only for use by patch - -! 3 ---- 1,3 ---- - # Do not edit -- exists only for use by patch - -! 4 diff --git a/src/patches/readline/readline63-001 b/src/patches/readline/readline63-001 new file mode 100644 index 000000000..bae6a2f52 --- /dev/null +++ b/src/patches/readline/readline63-001 @@ -0,0 +1,43 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-001 + +Bug-Reported-by: Daan van Rossum +Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu> +Bug-Reference-URL: + +Bug-Description: + +The `.' command in vi mode cannot undo multi-key commands beginning with +`c', `d', and `y' (command plus motion specifier). + +Patch (apply with `patch -p0'): + +*** ../readline-6.3/readline.c 2013-10-28 14:58:06.000000000 -0400 +--- readline.c 2014-03-07 15:20:33.000000000 -0500 +*************** +*** 965,969 **** + if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && + key != ANYOTHERKEY && +! rl_key_sequence_length == 1 && /* XXX */ + _rl_vi_textmod_command (key)) + _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); +--- 965,969 ---- + if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && + key != ANYOTHERKEY && +! _rl_dispatching_keymap == vi_movement_keymap && + _rl_vi_textmod_command (key)) + _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 5 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 1 diff --git a/src/patches/readline/readline63-002 b/src/patches/readline/readline63-002 new file mode 100644 index 000000000..0e79f13f6 --- /dev/null +++ b/src/patches/readline/readline63-002 @@ -0,0 +1,44 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-002 + +Bug-Reported-by: Anatol Pomozov +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html + +Bug-Description: + +When in callback mode, some readline commands can cause readline to seg +fault by passing invalid contexts to callback functions. + +Patch (apply with `patch -p0'): + +*** ../readline-6.3/readline.c 2013-10-28 14:58:06.000000000 -0400 +--- readline.c 2014-03-10 14:15:02.000000000 -0400 +*************** +*** 745,749 **** + + RL_CHECK_SIGNALS (); +! if (r == 0) /* success! */ + { + _rl_keyseq_chain_dispose (); +--- 745,750 ---- + + RL_CHECK_SIGNALS (); +! /* We only treat values < 0 specially to simulate recursion. */ +! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */ + { + _rl_keyseq_chain_dispose (); +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 1 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 2 diff --git a/src/patches/readline/readline63-003 b/src/patches/readline/readline63-003 new file mode 100644 index 000000000..d2cad94f9 --- /dev/null +++ b/src/patches/readline/readline63-003 @@ -0,0 +1,47 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-003 + +Bug-Reported-by: +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +There are debugging functions in the readline release that are theoretically +exploitable as security problems. They are not public functions, but have +global linkage. + +Patch (apply with `patch -p0'): + +*** ../readline-6.3/util.c 2013-09-02 13:36:12.000000000 -0400 +--- util.c 2014-03-20 10:25:53.000000000 -0400 +*************** +*** 477,480 **** +--- 479,483 ---- + } + ++ #if defined (DEBUG) + #if defined (USE_VARARGS) + static FILE *_rl_tracefp; +*************** +*** 539,542 **** +--- 542,546 ---- + } + #endif ++ #endif /* DEBUG */ + + +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 2 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 3 diff --git a/src/patches/readline/readline63-004 b/src/patches/readline/readline63-004 new file mode 100644 index 000000000..3cd89e3a0 --- /dev/null +++ b/src/patches/readline/readline63-004 @@ -0,0 +1,45 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-004 + +Bug-Reported-by: Egmont Koblinger +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html + +Bug-Description: + +The signal handling changes to bash and readline (to avoid running any code +in a signal handler context) cause the cursor to be placed on the wrong +line of a multi-line command after a ^C interrupts editing. + +Patch (apply with `patch -p0'): + +*** ../readline-6.3-patched/display.c 2013-12-27 13:10:56.000000000 -0500 +--- display.c 2014-03-27 11:52:45.000000000 -0400 +*************** +*** 2678,2682 **** + if (_rl_echoing_p) + { +! _rl_move_vert (_rl_vis_botlin); + _rl_vis_botlin = 0; + fflush (rl_outstream); +--- 2678,2683 ---- + if (_rl_echoing_p) + { +! if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */ +! _rl_move_vert (_rl_vis_botlin); + _rl_vis_botlin = 0; + fflush (rl_outstream); +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 3 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 4 diff --git a/src/patches/readline/readline63-005 b/src/patches/readline/readline63-005 new file mode 100644 index 000000000..8a6373849 --- /dev/null +++ b/src/patches/readline/readline63-005 @@ -0,0 +1,58 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-005 + +Bug-Reported-by: Juergen Daubert +Bug-Reference-ID: <20140303180430.GA7346@jue.netz> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00002.html + +Bug-Description: + +There are still applications using the deprecated Function/VFunction/etc. +typedefs in rltypedefs.h. This patch restores the typedefs, but attempts +to mark them as deprecated using gcc/clang attributes. Thanks to Max Horn +for the suggestion. + +Patch (apply with `patch -p0'): + +*** ../readline-6.3-patched/rltypedefs.h 2011-03-26 14:53:31.000000000 -0400 +--- rltypedefs.h 2014-04-10 11:30:45.000000000 -0400 +*************** +*** 27,30 **** +--- 27,49 ---- + #endif + ++ /* Old-style, attempt to mark as deprecated in some way people will notice. */ ++ ++ #if !defined (_FUNCTION_DEF) ++ # define _FUNCTION_DEF ++ ++ #if defined(__GNUC__) || defined(__clang__) ++ typedef int Function () __attribute__ ((deprecated)); ++ typedef void VFunction () __attribute__ ((deprecated)); ++ typedef char *CPFunction () __attribute__ ((deprecated)); ++ typedef char **CPPFunction () __attribute__ ((deprecated)); ++ #else ++ typedef int Function (); ++ typedef void VFunction (); ++ typedef char *CPFunction (); ++ typedef char **CPPFunction (); ++ #endif ++ ++ #endif /* _FUNCTION_DEF */ ++ + /* New style. */ + +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 4 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 5 diff --git a/src/patches/readline/readline63-006 b/src/patches/readline/readline63-006 new file mode 100644 index 000000000..a3f09304a --- /dev/null +++ b/src/patches/readline/readline63-006 @@ -0,0 +1,63 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 6.3 +Patch-ID: readline63-006 + +Bug-Reported-by: +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html + +Bug-Description: + +Using reverse-i-search when horizontal scrolling is enabled does not redisplay +the entire line containing the successful search results. + +Patch (apply with `patch -p0'): + +*** ../readline-6.3-patched/display.c 2014-04-08 18:19:36.000000000 -0400 +--- display.c 2014-04-20 18:32:52.000000000 -0400 +*************** +*** 1638,1642 **** + the spot of first difference is before the end of the invisible chars, + lendiff needs to be adjusted. */ +! if (current_line == 0 && !_rl_horizontal_scroll_mode && + current_invis_chars != visible_wrap_offset) + { +--- 1638,1642 ---- + the spot of first difference is before the end of the invisible chars, + lendiff needs to be adjusted. */ +! if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */ + current_invis_chars != visible_wrap_offset) + { +*************** +*** 1826,1831 **** + _rl_last_c_pos += bytes_to_insert; + + if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) +! goto clear_rest_of_line; + } + } +--- 1826,1836 ---- + _rl_last_c_pos += bytes_to_insert; + ++ /* XXX - we only want to do this if we are at the end of the line ++ so we move there with _rl_move_cursor_relative */ + if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) +! { +! _rl_move_cursor_relative (ne-new, new); +! goto clear_rest_of_line; +! } + } + } +*** ../readline-6.3/patchlevel 2013-11-15 08:11:11.000000000 -0500 +--- patchlevel 2014-03-21 08:28:40.000000000 -0400 +*************** +*** 1,3 **** + # Do not edit -- exists only for use by patch + +! 5 +--- 1,3 ---- + # Do not edit -- exists only for use by patch + +! 6 From 512be07029180147b8d17c4d7e2ee9c95a4cedf1 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 20:00:17 +0200 Subject: [PATCH 026/297] bash: Update to 4.3. --- config/rootfiles/common/bash | 50 +++ lfs/bash | 38 +-- src/patches/bash-3.2-ssh_source_bash.patch | 17 +- src/patches/bash-4.0-paths-1.patch | 21 +- src/patches/bash/bash32-001 | 47 --- src/patches/bash/bash32-002 | 48 --- src/patches/bash/bash32-003 | 147 --------- src/patches/bash/bash32-004 | 96 ------ src/patches/bash/bash32-005 | 223 -------------- src/patches/bash/bash32-006 | 45 --- src/patches/bash/bash32-007 | 55 ---- src/patches/bash/bash32-008 | 48 --- src/patches/bash/bash32-009 | 61 ---- src/patches/bash/bash32-010 | 207 ------------- src/patches/bash/bash32-011 | 138 --------- src/patches/bash/bash32-012 | 96 ------ src/patches/bash/bash32-013 | 65 ---- src/patches/bash/bash32-014 | 307 ------------------ src/patches/bash/bash32-015 | 95 ------ src/patches/bash/bash32-016 | 52 ---- src/patches/bash/bash32-017 | 85 ----- src/patches/bash/bash32-018 | 98 ------ src/patches/bash/bash32-019 | 343 --------------------- src/patches/bash/bash32-020 | 183 ----------- src/patches/bash/bash32-021 | 72 ----- src/patches/bash/bash32-022 | 126 -------- src/patches/bash/bash32-023 | 51 --- src/patches/bash/bash32-024 | 77 ----- src/patches/bash/bash32-025 | 79 ----- src/patches/bash/bash32-026 | 82 ----- src/patches/bash/bash32-027 | 85 ----- src/patches/bash/bash32-028 | 60 ---- src/patches/bash/bash32-029 | 52 ---- src/patches/bash/bash32-030 | 50 --- src/patches/bash/bash32-031 | 62 ---- src/patches/bash/bash32-032 | 47 --- src/patches/bash/bash32-033 | 88 ------ src/patches/bash/bash32-034 | 74 ----- src/patches/bash/bash32-035 | 159 ---------- src/patches/bash/bash32-036 | 44 --- src/patches/bash/bash32-037 | 110 ------- src/patches/bash/bash32-038 | 80 ----- src/patches/bash/bash32-039 | 175 ----------- src/patches/bash/bash32-040 | 47 --- src/patches/bash/bash32-041 | 154 --------- src/patches/bash/bash32-042 | 48 --- src/patches/bash/bash32-043 | 62 ---- src/patches/bash/bash32-044 | 150 --------- src/patches/bash/bash32-045 | 50 --- src/patches/bash/bash32-046 | 47 --- src/patches/bash/bash32-047 | 65 ---- src/patches/bash/bash32-048 | 56 ---- src/patches/bash/bash32-049 | 64 ---- src/patches/bash/bash32-050 | 56 ---- src/patches/bash/bash32-051 | 46 --- src/patches/bash/bash43-001 | 58 ++++ src/patches/bash/bash43-002 | 62 ++++ src/patches/bash/bash43-003 | 48 +++ src/patches/bash/bash43-004 | 47 +++ src/patches/bash/bash43-005 | 63 ++++ src/patches/bash/bash43-006 | 48 +++ src/patches/bash/bash43-007 | 50 +++ src/patches/bash/bash43-008 | 188 +++++++++++ src/patches/bash/bash43-009 | 64 ++++ src/patches/bash/bash43-010 | 157 ++++++++++ src/patches/bash/bash43-011 | 49 +++ src/patches/bash/bash43-012 | 43 +++ src/patches/bash/bash43-013 | 66 ++++ src/patches/bash/bash43-014 | 102 ++++++ src/patches/bash/bash43-015 | 58 ++++ src/patches/bash/bash43-016 | 132 ++++++++ src/patches/bash/bash43-017 | 51 +++ src/patches/bash/bash43-018 | 44 +++ 73 files changed, 1411 insertions(+), 4902 deletions(-) delete mode 100644 src/patches/bash/bash32-001 delete mode 100644 src/patches/bash/bash32-002 delete mode 100644 src/patches/bash/bash32-003 delete mode 100644 src/patches/bash/bash32-004 delete mode 100644 src/patches/bash/bash32-005 delete mode 100644 src/patches/bash/bash32-006 delete mode 100644 src/patches/bash/bash32-007 delete mode 100644 src/patches/bash/bash32-008 delete mode 100644 src/patches/bash/bash32-009 delete mode 100644 src/patches/bash/bash32-010 delete mode 100644 src/patches/bash/bash32-011 delete mode 100644 src/patches/bash/bash32-012 delete mode 100644 src/patches/bash/bash32-013 delete mode 100644 src/patches/bash/bash32-014 delete mode 100644 src/patches/bash/bash32-015 delete mode 100644 src/patches/bash/bash32-016 delete mode 100644 src/patches/bash/bash32-017 delete mode 100644 src/patches/bash/bash32-018 delete mode 100644 src/patches/bash/bash32-019 delete mode 100644 src/patches/bash/bash32-020 delete mode 100644 src/patches/bash/bash32-021 delete mode 100644 src/patches/bash/bash32-022 delete mode 100644 src/patches/bash/bash32-023 delete mode 100644 src/patches/bash/bash32-024 delete mode 100644 src/patches/bash/bash32-025 delete mode 100644 src/patches/bash/bash32-026 delete mode 100644 src/patches/bash/bash32-027 delete mode 100644 src/patches/bash/bash32-028 delete mode 100644 src/patches/bash/bash32-029 delete mode 100644 src/patches/bash/bash32-030 delete mode 100644 src/patches/bash/bash32-031 delete mode 100644 src/patches/bash/bash32-032 delete mode 100644 src/patches/bash/bash32-033 delete mode 100644 src/patches/bash/bash32-034 delete mode 100644 src/patches/bash/bash32-035 delete mode 100644 src/patches/bash/bash32-036 delete mode 100644 src/patches/bash/bash32-037 delete mode 100644 src/patches/bash/bash32-038 delete mode 100644 src/patches/bash/bash32-039 delete mode 100644 src/patches/bash/bash32-040 delete mode 100644 src/patches/bash/bash32-041 delete mode 100644 src/patches/bash/bash32-042 delete mode 100644 src/patches/bash/bash32-043 delete mode 100644 src/patches/bash/bash32-044 delete mode 100644 src/patches/bash/bash32-045 delete mode 100644 src/patches/bash/bash32-046 delete mode 100644 src/patches/bash/bash32-047 delete mode 100644 src/patches/bash/bash32-048 delete mode 100644 src/patches/bash/bash32-049 delete mode 100644 src/patches/bash/bash32-050 delete mode 100644 src/patches/bash/bash32-051 create mode 100644 src/patches/bash/bash43-001 create mode 100644 src/patches/bash/bash43-002 create mode 100644 src/patches/bash/bash43-003 create mode 100644 src/patches/bash/bash43-004 create mode 100644 src/patches/bash/bash43-005 create mode 100644 src/patches/bash/bash43-006 create mode 100644 src/patches/bash/bash43-007 create mode 100644 src/patches/bash/bash43-008 create mode 100644 src/patches/bash/bash43-009 create mode 100644 src/patches/bash/bash43-010 create mode 100644 src/patches/bash/bash43-011 create mode 100644 src/patches/bash/bash43-012 create mode 100644 src/patches/bash/bash43-013 create mode 100644 src/patches/bash/bash43-014 create mode 100644 src/patches/bash/bash43-015 create mode 100644 src/patches/bash/bash43-016 create mode 100644 src/patches/bash/bash43-017 create mode 100644 src/patches/bash/bash43-018 diff --git a/config/rootfiles/common/bash b/config/rootfiles/common/bash index ecaeb1bdd..6afa0e45e 100644 --- a/config/rootfiles/common/bash +++ b/config/rootfiles/common/bash @@ -1,6 +1,56 @@ bin/sh bin/bash #bin/bashbug +#usr/share/doc/bash +#usr/share/doc/bash/CHANGES +#usr/share/doc/bash/COMPAT +#usr/share/doc/bash/FAQ +#usr/share/doc/bash/INTRO +#usr/share/doc/bash/NEWS +#usr/share/doc/bash/POSIX +#usr/share/doc/bash/RBASH +#usr/share/doc/bash/README +#usr/share/doc/bash/bash.html +#usr/share/doc/bash/bashref.html #usr/share/info/bash.info #usr/share/man/man1/bash.1 #usr/share/man/man1/bashbug.1 +#usr/share/locale/af +#usr/share/locale/af/LC_MESSAGES +#usr/share/locale/af/LC_MESSAGES/bash.mo +#usr/share/locale/bg/LC_MESSAGES/bash.mo +#usr/share/locale/ca/LC_MESSAGES/bash.mo +#usr/share/locale/cs/LC_MESSAGES/bash.mo +#usr/share/locale/da/LC_MESSAGES/bash.mo +#usr/share/locale/de/LC_MESSAGES/bash.mo +#usr/share/locale/el/LC_MESSAGES/bash.mo +#usr/share/locale/en@boldquot +#usr/share/locale/en@boldquot/LC_MESSAGES +#usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo +#usr/share/locale/en@quot/LC_MESSAGES/bash.mo +#usr/share/locale/eo/LC_MESSAGES/bash.mo +#usr/share/locale/es/LC_MESSAGES/bash.mo +#usr/share/locale/et/LC_MESSAGES/bash.mo +#usr/share/locale/fi/LC_MESSAGES/bash.mo +#usr/share/locale/fr/LC_MESSAGES/bash.mo +#usr/share/locale/ga/LC_MESSAGES/bash.mo +#usr/share/locale/gl/LC_MESSAGES/bash.mo +#usr/share/locale/hr/LC_MESSAGES/bash.mo +#usr/share/locale/hu/LC_MESSAGES/bash.mo +#usr/share/locale/id/LC_MESSAGES/bash.mo +#usr/share/locale/it/LC_MESSAGES/bash.mo +#usr/share/locale/ja/LC_MESSAGES/bash.mo +#usr/share/locale/lt/LC_MESSAGES/bash.mo +#usr/share/locale/nl/LC_MESSAGES/bash.mo +#usr/share/locale/pl/LC_MESSAGES/bash.mo +#usr/share/locale/pt_BR/LC_MESSAGES/bash.mo +#usr/share/locale/ro/LC_MESSAGES/bash.mo +#usr/share/locale/ru/LC_MESSAGES/bash.mo +#usr/share/locale/sk/LC_MESSAGES/bash.mo +#usr/share/locale/sl/LC_MESSAGES/bash.mo +#usr/share/locale/sr +#usr/share/locale/sr/LC_MESSAGES +#usr/share/locale/sr/LC_MESSAGES/bash.mo +#usr/share/locale/sv/LC_MESSAGES/bash.mo +#usr/share/locale/tr/LC_MESSAGES/bash.mo +#usr/share/locale/uk/LC_MESSAGES/bash.mo diff --git a/lfs/bash b/lfs/bash index c89ff545a..862c94432 100644 --- a/lfs/bash +++ b/lfs/bash @@ -24,7 +24,7 @@ include Config -VER = 3.2 +VER = 4.3 THISAPP = bash-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -35,20 +35,15 @@ DIR_APP = $(DIR_SRC)/$(THISAPP) # ifeq "$(ROOT)" "" TARGET = $(DIR_INFO)/$(THISAPP) - EXTRA_CONFIG = --prefix=/usr --bindir=/bin \ - --without-bash-malloc --with-installed-readline \ - --disable-nls - EXTRA_MAKE = - EXTRA_INSTALL = + CONFIGURE_OPTIONS = --prefix=/usr --bindir=/bin \ + --with-installed-readline else TARGET = $(DIR_INFO)/$(THISAPP)-tools - EXTRA_CONFIG = --prefix=/tools --without-bash-malloc \ - --disable-nls - EXTRA_MAKE = - EXTRA_INSTALL = + CONFIGURE_OPTIONS = --prefix=/tools endif -EXTRA_CONFIG += ac_cv_func_working_mktime=yes +CONFIGURE_OPTIONS += \ + --without-bash-malloc ############################################################################### # Top-level Rules @@ -58,7 +53,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 00bfa16d58e034e3c2aa27f390390d30 +$(DL_FILE)_MD5 = 81348932d5da294953e15d4814c74dd1 install : $(TARGET) @@ -87,24 +82,31 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zaxf $(DIR_DL)/$(DL_FILE) - for i in $$(seq 1 51); do \ - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash32-$$(printf "%03d" "$${i}") || exit 1; \ + sed -e "s/filename, RTLD_LAZY/filename, RTLD_NOW/" \ + -i $(DIR_APP)/builtins/enable.def + + for i in $$(seq 1 18); do \ + cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash43-$$(printf "%03d" "$${i}") || exit 1; \ done cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-paths-1.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-profile-1.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-3.2-ssh_source_bash.patch - cd $(DIR_APP) && ./configure $(EXTRA_CONFIG) - cd $(DIR_APP) && make $(EXTRA_MAKE) - cd $(DIR_APP) && make $(EXTRA_INSTALL) install + + cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install + ln -sf bash /bin/sh + ifneq "$(ROOT)" "" -mkdir -p $(ROOT)/bin -mkdir -p $(ROOT)/usr/bin ln -sf bash /tools/bin/sh -ln -sf /tools/bin/bash $(ROOT)/bin/sh endif + @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/patches/bash-3.2-ssh_source_bash.patch b/src/patches/bash-3.2-ssh_source_bash.patch index 4b371326a..5bd19ce9a 100644 --- a/src/patches/bash-3.2-ssh_source_bash.patch +++ b/src/patches/bash-3.2-ssh_source_bash.patch @@ -1,9 +1,12 @@ -diff -up bash-3.2/config-top.h.ssh_source_bash bash-3.2/config-top.h ---- bash-3.2/config-top.h.ssh_source_bash 2008-10-23 15:08:04.000000000 +0200 -+++ bash-3.2/config-top.h 2008-10-23 15:08:33.000000000 +0200 -@@ -86,4 +86,4 @@ - - /* Define this if you want bash to try to check whether it's being run by - sshd and source the .bashrc if so (like the rshd behavior). */ +diff -up bash-4.0/config-top.h.ssh_source_bash bash-4.0/config-top.h +--- bash-4.0/config-top.h.ssh_source_bash 2009-01-21 15:20:06.000000000 +0100 ++++ bash-4.0/config-top.h 2009-01-21 15:25:46.000000000 +0100 +@@ -90,7 +90,7 @@ + sshd and source the .bashrc if so (like the rshd behavior). This checks + for the presence of SSH_CLIENT or SSH2_CLIENT in the initial environment, + which can be fooled under certain not-uncommon circumstances. */ -/* #define SSH_SOURCE_BASHRC */ +#define SSH_SOURCE_BASHRC + + /* Define if you want the case-capitalizing operators (~[~]) and the + `capcase' variable attribute (declare -c). */ diff --git a/src/patches/bash-4.0-paths-1.patch b/src/patches/bash-4.0-paths-1.patch index 735a3810f..24ec5cc0b 100644 --- a/src/patches/bash-4.0-paths-1.patch +++ b/src/patches/bash-4.0-paths-1.patch @@ -1,25 +1,6 @@ ---- bash-3.0/config.h.in.paths 2004-07-21 21:08:31.000000000 +0100 -+++ bash-3.0/config.h.in 2004-07-28 09:16:27.257884999 +0100 -@@ -197,7 +197,7 @@ - - /* System paths */ - --#define DEFAULT_MAIL_DIRECTORY "/usr/spool/mail" -+#define DEFAULT_MAIL_DIRECTORY "/var/spool/mail" - - /* Characteristics of the system's header files and libraries that affect - the compilation environment. */ --- bash-3.0/config-top.h.paths 2003-08-05 15:36:12.000000000 +0100 +++ bash-3.0/config-top.h 2004-07-28 09:36:27.117205637 +0100 -@@ -52,14 +52,14 @@ - /* The default value of the PATH variable. */ - #ifndef DEFAULT_PATH_VALUE - #define DEFAULT_PATH_VALUE \ -- "/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:." -+ "/usr/local/bin:/bin:/usr/bin" - #endif - - /* The value for PATH when invoking `command -p'. This is only used when +@@ -66,7 +66,7 @@ the Posix.2 confstr () function, or CS_PATH define are not present. */ #ifndef STANDARD_UTILS_PATH #define STANDARD_UTILS_PATH \ diff --git a/src/patches/bash/bash32-001 b/src/patches/bash/bash32-001 deleted file mode 100644 index b7d1f1e07..000000000 --- a/src/patches/bash/bash32-001 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-001 - -Bug-Reported-by: Greg Schafer -Bug-Reference-ID: <20061012084940.GA15768@tigers.local> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00046.html - -Bug-Description: - -When using historical ``-style command substitution, bash incorrectly attempts -to interpret shell comments while scanning for the closing backquote. - -Patch: - -*** ../bash-3.2/parse.y Tue Sep 19 16:37:21 2006 ---- parse.y Thu Oct 12 10:30:57 2006 -*************** -*** 2736,2740 **** - count = 1; - pass_next_character = backq_backslash = was_dollar = in_comment = 0; -! check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; - - /* RFLAGS is the set of flags we want to pass to recursive calls. */ ---- 2736,2740 ---- - count = 1; - pass_next_character = backq_backslash = was_dollar = in_comment = 0; -! check_comment = (flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; - - /* RFLAGS is the set of flags we want to pass to recursive calls. */ -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 0 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 1 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-002 b/src/patches/bash/bash32-002 deleted file mode 100644 index b934df9fa..000000000 --- a/src/patches/bash/bash32-002 +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-002 - -Bug-Reported-by: Jim Gifford -Bug-Reference-ID: <12j2pc3aq35mb04@corp.supernews.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00082.html - -Bug-Description: - -An incorrect encoding specification in the Content-Type header causes msgfmt -to fail, which causes `make install' to fail. - -Patch: - -*** ../bash-3.2/po/ru.po Tue Jan 10 17:51:03 2006 ---- po/ru.po Mon Oct 16 15:13:23 2006 -*************** -*** 13,17 **** - "Language-Team: Russian \n" - "MIME-Version: 1.0\n" -! "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ---- 13,17 ---- - "Language-Team: Russian \n" - "MIME-Version: 1.0\n" -! "Content-Type: text/plain; charset=KOI8-R\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 1 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 2 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-003 b/src/patches/bash/bash32-003 deleted file mode 100644 index 922041b4a..000000000 --- a/src/patches/bash/bash32-003 +++ /dev/null @@ -1,147 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-003 - -Bug-Reported-by: John Gatewood Ham -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00045.html - -Bug-Description: - -When using the conditional command's `=~' operator to match regular -expressions, the parser did not skip over shell metacharacters in the -regular expression, leading to syntax errors. - -Patch: - -*** ../bash-3.2-patched/parse.y Tue Oct 17 11:45:20 2006 ---- parse.y Sat Oct 14 14:56:16 2006 -*************** -*** 1029,1034 **** ---- 1029,1035 ---- - #define PST_CMDTOKEN 0x1000 /* command token OK - unused */ - #define PST_COMPASSIGN 0x2000 /* parsing x=(...) compound assignment */ - #define PST_ASSIGNOK 0x4000 /* assignment statement ok in this context */ -+ #define PST_REGEXP 0x8000 /* parsing an ERE/BRE as a single word */ - - /* Initial size to allocate for tokens, and the - amount to grow them by. */ -*************** -*** 2591,2596 **** ---- 2592,2600 ---- - return (character); - } - -+ if (parser_state & PST_REGEXP) -+ goto tokword; -+ - /* Shell meta-characters. */ - if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0)) - { -*************** -*** 2698,2703 **** ---- 2702,2708 ---- - if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND)) - return (character); - -+ tokword: - /* Okay, if we got this far, we have to read a word. Read one, - and then check it against the known ones. */ - result = read_token_word (character); -*************** -*** 3202,3209 **** - if (tok == WORD && test_binop (yylval.word->word)) - op = yylval.word; - #if defined (COND_REGEXP) -! else if (tok == WORD && STREQ (yylval.word->word,"=~")) -! op = yylval.word; - #endif - else if (tok == '<' || tok == '>') - op = make_word_from_token (tok); /* ( */ ---- 3207,3217 ---- - if (tok == WORD && test_binop (yylval.word->word)) - op = yylval.word; - #if defined (COND_REGEXP) -! else if (tok == WORD && STREQ (yylval.word->word, "=~")) -! { -! op = yylval.word; -! parser_state |= PST_REGEXP; -! } - #endif - else if (tok == '<' || tok == '>') - op = make_word_from_token (tok); /* ( */ -*************** -*** 3234,3239 **** ---- 3242,3248 ---- - - /* rhs */ - tok = read_token (READ); -+ parser_state &= ~PST_REGEXP; - if (tok == WORD) - { - tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL); -*************** -*** 3419,3427 **** - goto next_character; - } - - #ifdef EXTENDED_GLOB - /* Parse a ksh-style extended pattern matching specification. */ -! if (extended_glob && PATTERN_CHAR (character)) - { - peek_char = shell_getc (1); - if MBTEST(peek_char == '(') /* ) */ ---- 3428,3461 ---- - goto next_character; - } - -+ #ifdef COND_REGEXP -+ /* When parsing a regexp as a single word inside a conditional command, -+ we need to special-case characters special to both the shell and -+ regular expressions. Right now, that is only '(' and '|'. */ /*)*/ -+ if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|')) /*)*/ -+ { -+ if (character == '|') -+ goto got_character; -+ -+ push_delimiter (dstack, character); -+ ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0); -+ pop_delimiter (dstack); -+ if (ttok == &matched_pair_error) -+ return -1; /* Bail immediately. */ -+ RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2, -+ token_buffer_size, TOKEN_DEFAULT_GROW_SIZE); -+ token[token_index++] = character; -+ strcpy (token + token_index, ttok); -+ token_index += ttoklen; -+ FREE (ttok); -+ dollar_present = all_digit_token = 0; -+ goto next_character; -+ } -+ #endif /* COND_REGEXP */ -+ - #ifdef EXTENDED_GLOB - /* Parse a ksh-style extended pattern matching specification. */ -! if MBTEST(extended_glob && PATTERN_CHAR (character)) - { - peek_char = shell_getc (1); - if MBTEST(peek_char == '(') /* ) */ - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 2 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 3 - - #endif /* _PATCHLEVEL_H_ */ - diff --git a/src/patches/bash/bash32-004 b/src/patches/bash/bash32-004 deleted file mode 100644 index cd2accfa3..000000000 --- a/src/patches/bash/bash32-004 +++ /dev/null @@ -1,96 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-004 - -Bug-Reported-by: Stuart Shelton -Bug-Reference-ID: <619141e40610261203y6cda5aa6i23cb24c7aeba996e@mail.gmail.com> -Bug-Reference-URL: - -Bug-Description: - -A bug in the parameter pattern substitution implementation treated a pattern -whose first character was `/' (after expansion) as specifying global -replacement. - -Patch: - -*** ../bash-3.2/subst.c Tue Sep 19 08:35:09 2006 ---- subst.c Thu Oct 26 09:17:50 2006 -*************** -*** 5707,5712 **** ---- 5707,5717 ---- - vtype &= ~VT_STARSUB; - - mflags = 0; -+ if (patsub && *patsub == '/') -+ { -+ mflags |= MATCH_GLOBREP; -+ patsub++; -+ } - - /* Malloc this because expand_string_if_necessary or one of the expansion - functions in its call chain may free it on a substitution error. */ -*************** -*** 5741,5753 **** - } - - /* ksh93 doesn't allow the match specifier to be a part of the expanded -! pattern. This is an extension. */ - p = pat; -! if (pat && pat[0] == '/') -! { -! mflags |= MATCH_GLOBREP|MATCH_ANY; -! p++; -! } - else if (pat && pat[0] == '#') - { - mflags |= MATCH_BEG; ---- 5746,5757 ---- - } - - /* ksh93 doesn't allow the match specifier to be a part of the expanded -! pattern. This is an extension. Make sure we don't anchor the pattern -! at the beginning or end of the string if we're doing global replacement, -! though. */ - p = pat; -! if (mflags & MATCH_GLOBREP) -! mflags |= MATCH_ANY; - else if (pat && pat[0] == '#') - { - mflags |= MATCH_BEG; -*** ../bash-3.2/tests/new-exp.right Thu Aug 10 12:00:00 2006 ---- tests/new-exp.right Sun Oct 29 16:03:36 2006 -*************** -*** 430,436 **** - Case06---1---A B C::--- - Case07---3---A:B:C--- - Case08---3---A:B:C--- -! ./new-exp.tests: line 506: /${$(($#-1))}: bad substitution - argv[1] = - argv[2] = - argv[3] = ---- 430,436 ---- - Case06---1---A B C::--- - Case07---3---A:B:C--- - Case08---3---A:B:C--- -! ./new-exp.tests: line 506: ${$(($#-1))}: bad substitution - argv[1] = - argv[2] = - argv[3] = -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 3 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 4 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-005 b/src/patches/bash/bash32-005 deleted file mode 100644 index 903ec5840..000000000 --- a/src/patches/bash/bash32-005 +++ /dev/null @@ -1,223 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-005 - -Bug-Reported-by: Stuart Shelton -Bug-Reference-ID: <453F7CC8.6030907@openobjects.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-10/msg00127.html - -Bug-Description: - -A missing extern declaration for `asprintf' caused `double' arguments to be -passed as `0', leading to incorrect results. Additionally, a bug in the -replacement asprintf/snprintf function caused an infinite loop when passed -0 arguments to the floating point conversions under some circumstances. - -Patch: - -*** ../bash-3.2/builtins/printf.def Mon Sep 18 08:48:42 2006 ---- builtins/printf.def Tue Oct 31 08:19:44 2006 -*************** -*** 49,54 **** ---- 49,60 ---- - # define INT_MIN (-2147483647-1) - #endif - -+ #if defined (PREFER_STDARG) -+ # include -+ #else -+ # include -+ #endif -+ - #include - #include - -*************** -*** 151,156 **** ---- 157,166 ---- - #define SKIP1 "#'-+ 0" - #define LENMODS "hjlLtz" - -+ #ifndef HAVE_ASPRINTF -+ extern int asprintf __P((char **, const char *, ...)) __attribute__((__format__ (printf, 2, 3))); -+ #endif -+ - static void printf_erange __P((char *)); - static int printstr __P((char *, char *, int, int, int)); - static int tescape __P((char *, char *, int *)); - - -*** ../bash-3.2/lib/sh/snprintf.c Thu Apr 6 09:48:40 2006 ---- lib/sh/snprintf.c Sat Oct 28 00:00:13 2006 -*************** -*** 471,476 **** ---- 476,483 ---- - 10^x ~= r - * log_10(200) = 2; - * log_10(250) = 2; -+ * -+ * NOTE: do not call this with r == 0 -- an infinite loop results. - */ - static int - log_10(r) -*************** -*** 576,583 **** - { - integral_part[0] = '0'; - integral_part[1] = '\0'; -! fraction_part[0] = '0'; -! fraction_part[1] = '\0'; - if (fract) - *fract = fraction_part; - return integral_part; ---- 583,593 ---- - { - integral_part[0] = '0'; - integral_part[1] = '\0'; -! /* The fractional part has to take the precision into account */ -! for (ch = 0; ch < precision-1; ch++) -! fraction_part[ch] = '0'; -! fraction_part[ch] = '0'; -! fraction_part[ch+1] = '\0'; - if (fract) - *fract = fraction_part; - return integral_part; -*************** -*** 805,810 **** ---- 815,821 ---- - PUT_CHAR(*tmp, p); - tmp++; - } -+ - PAD_LEFT(p); - } - -*************** -*** 972,982 **** - if ((p->flags & PF_THOUSANDS) && grouping && (t = groupnum (tmp))) - tmp = t; - - /* calculate the padding. 1 for the dot */ - p->width = p->width - - ((d > 0. && p->justify == RIGHT) ? 1:0) - - ((p->flags & PF_SPACE) ? 1:0) - -! strlen(tmp) - p->precision - 1; - PAD_RIGHT(p); - PUT_PLUS(d, p, 0.); - PUT_SPACE(d, p, 0.); ---- 983,1003 ---- - if ((p->flags & PF_THOUSANDS) && grouping && (t = groupnum (tmp))) - tmp = t; - -+ if ((*p->pf == 'g' || *p->pf == 'G') && (p->flags & PF_ALTFORM) == 0) -+ { -+ /* smash the trailing zeros unless altform */ -+ for (i = strlen(tmp2) - 1; i >= 0 && tmp2[i] == '0'; i--) -+ tmp2[i] = '\0'; -+ if (tmp2[0] == '\0') -+ p->precision = 0; -+ } -+ - /* calculate the padding. 1 for the dot */ - p->width = p->width - - ((d > 0. && p->justify == RIGHT) ? 1:0) - - ((p->flags & PF_SPACE) ? 1:0) - -! strlen(tmp) - p->precision - -! ((p->precision != 0 || (p->flags & PF_ALTFORM)) ? 1 : 0); /* radix char */ - PAD_RIGHT(p); - PUT_PLUS(d, p, 0.); - PUT_SPACE(d, p, 0.); -*************** -*** 991,1001 **** - if (p->precision != 0 || (p->flags & PF_ALTFORM)) - PUT_CHAR(decpoint, p); /* put the '.' */ - -- if ((*p->pf == 'g' || *p->pf == 'G') && (p->flags & PF_ALTFORM) == 0) -- /* smash the trailing zeros unless altform */ -- for (i = strlen(tmp2) - 1; i >= 0 && tmp2[i] == '0'; i--) -- tmp2[i] = '\0'; -- - for (; *tmp2; tmp2++) - PUT_CHAR(*tmp2, p); /* the fraction */ - ---- 1012,1017 ---- -*************** -*** 1011,1024 **** - char *tmp, *tmp2; - int j, i; - -! if (chkinfnan(p, d, 1) || chkinfnan(p, d, 2)) - return; /* already printed nan or inf */ - - GETLOCALEDATA(decpoint, thoussep, grouping); - DEF_PREC(p); -! j = log_10(d); -! d = d / pow_10(j); /* get the Mantissa */ -! d = ROUND(d, p); - tmp = dtoa(d, p->precision, &tmp2); - - /* 1 for unit, 1 for the '.', 1 for 'e|E', ---- 1027,1045 ---- - char *tmp, *tmp2; - int j, i; - -! if (d != 0 && (chkinfnan(p, d, 1) || chkinfnan(p, d, 2))) - return; /* already printed nan or inf */ - - GETLOCALEDATA(decpoint, thoussep, grouping); - DEF_PREC(p); -! if (d == 0.) -! j = 0; -! else -! { -! j = log_10(d); -! d = d / pow_10(j); /* get the Mantissa */ -! d = ROUND(d, p); -! } - tmp = dtoa(d, p->precision, &tmp2); - - /* 1 for unit, 1 for the '.', 1 for 'e|E', -*************** -*** 1076,1081 **** ---- 1097,1103 ---- - PUT_CHAR(*tmp, p); - tmp++; - } -+ - PAD_LEFT(p); - } - #endif -*************** -*** 1358,1364 **** - STAR_ARGS(data); - DEF_PREC(data); - d = GETDOUBLE(data); -! i = log_10(d); - /* - * for '%g|%G' ANSI: use f if exponent - * is in the range or [-4,p] exclusively ---- 1380,1386 ---- - STAR_ARGS(data); - DEF_PREC(data); - d = GETDOUBLE(data); -! i = (d != 0.) ? log_10(d) : -1; - /* - * for '%g|%G' ANSI: use f if exponent - * is in the range or [-4,p] exclusively -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 4 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 5 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-006 b/src/patches/bash/bash32-006 deleted file mode 100644 index 589db9e59..000000000 --- a/src/patches/bash/bash32-006 +++ /dev/null @@ -1,45 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-006 - -Bug-Reported-by: ebb9@byu.net -Bug-Reference-ID: <45540862.9030900@byu.net> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00017.html - http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00016.html - -Bug-Description: - -In some cases, code that is intended to be used in the presence of multibyte -characters is called when no such characters are present, leading to incorrect -display position calculations and incorrect redisplay. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c Thu Sep 14 14:20:12 2006 ---- lib/readline/display.c Mon Nov 13 17:55:57 2006 -*************** -*** 2381,2384 **** ---- 2409,2414 ---- - if (end <= start) - return 0; -+ if (MB_CUR_MAX == 1 || rl_byte_oriented) -+ return (end - start); - - memset (&ps, 0, sizeof (mbstate_t)); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 5 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 6 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-007 b/src/patches/bash/bash32-007 deleted file mode 100644 index 9b86f4af7..000000000 --- a/src/patches/bash/bash32-007 +++ /dev/null @@ -1,55 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-007 - -Bug-Reported-by: jidanni@jidanni.org -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00039.html - -Bug-Description: - -When removing the current or previous job from the jobs list, bash incorrectly -resets the current job under some circumstances. - -Patch: - -*** ../bash-3.2-patched/jobs.c Sat Jul 29 16:40:48 2006 ---- jobs.c Fri Nov 24 14:50:01 2006 -*************** -*** 985,990 **** - if (temp == 0) - return; -- if (job_index == js.j_current || job_index == js.j_previous) -- reset_current (); - - if ((dflags & DEL_NOBGPID) == 0) ---- 985,988 ---- -*************** -*** 1029,1032 **** ---- 1027,1033 ---- - else if (jobs[js.j_firstj] == 0 || jobs[js.j_lastj] == 0) - reset_job_indices (); -+ -+ if (job_index == js.j_current || job_index == js.j_previous) -+ reset_current (); - } - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 6 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 7 - - #endif /* _PATCHLEVEL_H_ */ - - diff --git a/src/patches/bash/bash32-008 b/src/patches/bash/bash32-008 deleted file mode 100644 index 7ec07ffe6..000000000 --- a/src/patches/bash/bash32-008 +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-008 - -Bug-Reported-by: Linda Walsh -Bug-Reference-ID: <456041FD.8000605@tlinx.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00040.html - -Bug-Description: - -When checking pathnames from the command hash table (e.g., when the `checkhash' -shell option is enabled), a bug causes bash to delete and re-lookup each -command. - -Patch: - -*** ../bash-3.2-patched/findcmd.c Wed Aug 17 16:49:54 2005 ---- findcmd.c Fri Nov 24 10:48:37 2006 -*************** -*** 309,313 **** - { - st = file_status (hashed_file); -! if ((st ^ (FS_EXISTS | FS_EXECABLE)) != 0) - { - phash_remove (pathname); ---- 309,313 ---- - { - st = file_status (hashed_file); -! if ((st & (FS_EXISTS|FS_EXECABLE)) != (FS_EXISTS|FS_EXECABLE)) - { - phash_remove (pathname); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 7 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 8 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-009 b/src/patches/bash/bash32-009 deleted file mode 100644 index 9cfd16e94..000000000 --- a/src/patches/bash/bash32-009 +++ /dev/null @@ -1,61 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-009 - -Bug-Reported-by: James.M.Botte@lowes.com -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-12/msg00000.html - -Bug-Description: - -When using its built-in replacement for snprintf/asprintf, bash does not -treat the %x, %X, and %o format specifiers as unsigned numbers. - -Patch: - -*** ../bash-3.2-patched/lib/sh/snprintf.c Mon Nov 13 08:58:52 2006 ---- lib/sh/snprintf.c Wed Dec 6 11:15:04 2006 -*************** -*** 669,673 **** - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = (*p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; ---- 674,679 ---- - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = 0; -! flags = (*p->pf == 'x' || *p->pf == 'X' || *p->pf == 'o' || *p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; -*************** -*** 739,743 **** - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = (*p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; ---- 745,749 ---- - - sd = d; /* signed for ' ' padding in base 10 */ -! flags = (*p->pf == 'x' || *p->pf == 'X' || *p->pf == 'o' || *p->pf == 'u' || *p->pf == 'U') ? FL_UNSIGNED : 0; - if (*p->pf == 'X') - flags |= FL_HEXUPPER; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 8 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 9 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-010 b/src/patches/bash/bash32-010 deleted file mode 100644 index 88de5758f..000000000 --- a/src/patches/bash/bash32-010 +++ /dev/null @@ -1,207 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-010 - -Bug-Reported-by: Ryan Waldron -Bug-Reference-ID: <20070119065603.546D011E9C@kansas.erebor.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-01/msg00059.html - -Bug-Description: - -The glibc implementation of regcomp/regexec does not allow backslashes to -escape "ordinary" pattern characters when matching. Bash used backslashes -to quote all characters when the pattern argument to the [[ special -command's =~ operator was quoted. This caused the match to fail on Linux -and other systems using GNU libc. - -Patch: - -*** ../bash-3.2.9/pathexp.h Sat Feb 19 17:23:18 2005 ---- pathexp.h Wed Jan 31 22:53:16 2007 -*************** -*** 1,5 **** - /* pathexp.h -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* pathexp.h -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 33,36 **** ---- 33,37 ---- - #define QGLOB_CVTNULL 0x01 /* convert QUOTED_NULL strings to '\0' */ - #define QGLOB_FILENAME 0x02 /* do correct quoting for matching filenames */ -+ #define QGLOB_REGEXP 0x04 /* quote an ERE for regcomp/regexec */ - - #if defined (EXTENDED_GLOB) -*** ../bash-3.2.9/pathexp.c Mon May 6 13:43:05 2002 ---- pathexp.c Mon Feb 26 16:59:23 2007 -*************** -*** 1,5 **** - /* pathexp.c -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1995-2002 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* pathexp.c -- The shell interface to the globbing library. */ - -! /* Copyright (C) 1995-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 111,114 **** ---- 111,141 ---- - } - -+ /* Return 1 if C is a character that is `special' in a POSIX ERE and needs to -+ be quoted to match itself. */ -+ static inline int -+ ere_char (c) -+ int c; -+ { -+ switch (c) -+ { -+ case '.': -+ case '[': -+ case '\\': -+ case '(': -+ case ')': -+ case '*': -+ case '+': -+ case '?': -+ case '{': -+ case '|': -+ case '^': -+ case '$': -+ return 1; -+ default: -+ return 0; -+ } -+ return (0); -+ } -+ - /* PATHNAME can contain characters prefixed by CTLESC; this indicates - that the character is to be quoted. We quote it here in the style -*************** -*** 143,146 **** ---- 170,175 ---- - if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/') - continue; -+ if ((qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0) -+ continue; - temp[j++] = '\\'; - i++; -*** ../bash-3.2.9/subst.c Tue Nov 7 16:14:41 2006 ---- subst.c Wed Jan 31 23:09:58 2007 -*************** -*** 5,9 **** - beauty, but, hey, you're alright.'' */ - -! /* Copyright (C) 1987-2006 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 5,9 ---- - beauty, but, hey, you're alright.'' */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 2647,2655 **** - /* This needs better error handling. */ - /* Expand W for use as an argument to a unary or binary operator in a -! [[...]] expression. If SPECIAL is nonzero, this is the rhs argument - to the != or == operator, and should be treated as a pattern. In -! this case, we quote the string specially for the globbing code. The -! caller is responsible for removing the backslashes if the unquoted -! words is needed later. */ - char * - cond_expand_word (w, special) ---- 2647,2656 ---- - /* This needs better error handling. */ - /* Expand W for use as an argument to a unary or binary operator in a -! [[...]] expression. If SPECIAL is 1, this is the rhs argument - to the != or == operator, and should be treated as a pattern. In -! this case, we quote the string specially for the globbing code. If -! SPECIAL is 2, this is an rhs argument for the =~ operator, and should -! be quoted appropriately for regcomp/regexec. The caller is responsible -! for removing the backslashes if the unquoted word is needed later. */ - char * - cond_expand_word (w, special) -*************** -*** 2659,2662 **** ---- 2660,2664 ---- - char *r, *p; - WORD_LIST *l; -+ int qflags; - - if (w->word == 0 || w->word[0] == '\0') -*************** -*** 2673,2678 **** - else - { - p = string_list (l); -! r = quote_string_for_globbing (p, QGLOB_CVTNULL); - free (p); - } ---- 2675,2683 ---- - else - { -+ qflags = QGLOB_CVTNULL; -+ if (special == 2) -+ qflags |= QGLOB_REGEXP; - p = string_list (l); -! r = quote_string_for_globbing (p, qflags); - free (p); - } -*** ../bash-3.2.9/execute_cmd.c Sat Aug 26 00:23:17 2006 ---- execute_cmd.c Wed Jan 31 23:12:06 2007 -*************** -*** 1,5 **** - /* execute_cmd.c -- Execute a COMMAND structure. */ - -! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* execute_cmd.c -- Execute a COMMAND structure. */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 2547,2551 **** - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, patmatch||rmatch); - if (arg2 == 0) - arg2 = nullstr; ---- 2547,2551 ---- - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, rmatch ? 2 : (patmatch ? 1 : 0)); - if (arg2 == 0) - arg2 = nullstr; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 9 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 10 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-011 b/src/patches/bash/bash32-011 deleted file mode 100644 index c021f52f8..000000000 --- a/src/patches/bash/bash32-011 +++ /dev/null @@ -1,138 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-011 - -Bug-Reported-by: Petr Sumbera -Bug-Reference-ID: <45AF5F4B.1020800@sun.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-01/msg00049.html - -Bug-Description: - -Under certain circumstances (loopback mounts), the bash getcwd does not -return correct results. This patch allows the use of the Solaris libc -getcwd even though it doesn't dynamically allocate memory. - -Run `touch configure' to make sure make doesn't try to run autoconf. -Then run configure with whatever options you like. - -Patch: - -*** ../bash-3.2-patched/configure.in Tue Sep 26 11:05:45 2006 ---- configure.in Wed Jan 31 09:48:00 2007 -*************** -*** 6,10 **** - dnl Process this file with autoconf to produce a configure script. - -! # Copyright (C) 1987-2006 Free Software Foundation, Inc. - - # This program is free software; you can redistribute it and/or modify ---- 6,10 ---- - dnl Process this file with autoconf to produce a configure script. - -! # Copyright (C) 1987-2007 Free Software Foundation, Inc. - - # This program is free software; you can redistribute it and/or modify -*************** -*** 992,996 **** - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS=-DSunOS5 ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading ---- 992,997 ---- - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;; -! solaris2*) LOCAL_CFLAGS=-DSOLARIS ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading -*** ../bash-3.2-patched/config-bot.h Tue Sep 12 16:43:04 2006 ---- config-bot.h Tue Mar 6 10:41:31 2007 -*************** -*** 2,6 **** - /* modify settings or make new ones based on what autoconf tells us. */ - -! /* Copyright (C) 1989-2002 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 2,6 ---- - /* modify settings or make new ones based on what autoconf tells us. */ - -! /* Copyright (C) 1989-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 71,77 **** - #endif - -! /* If we have a getcwd(3), but it calls popen(), #undef HAVE_GETCWD so -! the replacement in getcwd.c will be built. */ -! #if defined (HAVE_GETCWD) && defined (GETCWD_BROKEN) - # undef HAVE_GETCWD - #endif ---- 71,79 ---- - #endif - -! /* If we have a getcwd(3), but one that does not dynamically allocate memory, -! #undef HAVE_GETCWD so the replacement in getcwd.c will be built. We do -! not do this on Solaris, because their implementation of loopback mounts -! breaks the traditional file system assumptions that getcwd uses. */ -! #if defined (HAVE_GETCWD) && defined (GETCWD_BROKEN) && !defined (SOLARIS) - # undef HAVE_GETCWD - #endif -*** ../bash-3.2-patched/builtins/common.c Thu Jul 27 09:39:51 2006 ---- builtins/common.c Tue Mar 6 10:43:27 2007 -*************** -*** 1,3 **** -! /* Copyright (C) 1987-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,3 ---- -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 476,480 **** ---- 476,484 ---- - if (the_current_working_directory == 0) - { -+ #if defined (GETCWD_BROKEN) -+ the_current_working_directory = getcwd (0, PATH_MAX); -+ #else - the_current_working_directory = getcwd (0, 0); -+ #endif - if (the_current_working_directory == 0) - { -*** ../bash-3.2-patched/configure Tue Sep 26 11:06:01 2006 ---- configure Tue Mar 6 10:59:20 2007 -*************** -*** 27317,27321 **** - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS=-DSunOS5 ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading ---- 27317,27322 ---- - sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;; - sunos4*) LOCAL_CFLAGS=-DSunOS4 ;; -! solaris2.5*) LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;; -! solaris2*) LOCAL_CFLAGS=-DSOLARIS ;; - lynxos*) LOCAL_CFLAGS=-DRECYCLES_PIDS ;; - linux*) LOCAL_LDFLAGS=-rdynamic # allow dynamic loading -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 10 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 11 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-012 b/src/patches/bash/bash32-012 deleted file mode 100644 index 8d669d27c..000000000 --- a/src/patches/bash/bash32-012 +++ /dev/null @@ -1,96 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-012 - -Bug-Reported-by: John Wyman -Bug-Reference-ID: <5E7DEFC094C35044B87FAE761D9F0EE20143A3B7@exchange2k.celink.com> -Bug-Reference-URL: - -Bug-Description: - -Some systems (AIX 4.x) don't implement the PRI_xxx macros correctly, -causing syntax errors when attempting to compile bash on those systems. -This patch adds support for the PRI_MACROS_BROKEN define. - -You will need to re-run `configure' after applying the patch. Run -`touch configure' so make doesn't try to run autoconf. - -Patch: - -*** ../bash-3.2.11/config.h.in Tue Sep 12 16:00:54 2006 ---- config.h.in Tue Mar 6 11:17:55 2007 -*************** -*** 1,5 **** - /* config.h -- Configuration file for bash. */ - -! /* Copyright (C) 1987-2006 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 1,5 ---- - /* config.h -- Configuration file for bash. */ - -! /* Copyright (C) 1987-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 414,417 **** ---- 414,419 ---- - #undef HAVE_DECL_STRTOLD - -+ #undef PRI_MACROS_BROKEN -+ - #undef STRTOLD_BROKEN - -*************** -*** 1007,1010 **** ---- 1009,1015 ---- - #undef HAVE_DCGETTEXT - -+ /* Define if you have the `localeconv' function. */ -+ #undef HAVE_LOCALECONV -+ - /* Define if your system has a working `malloc' function. */ - /* #undef HAVE_MALLOC */ -*** ../bash-3.2.11/builtins/printf.def Mon Nov 13 08:58:52 2006 ---- builtins/printf.def Sun Feb 4 13:58:59 2007 -*************** -*** 2,6 **** - It implements the builtin "printf" in Bash. - -! Copyright (C) 1997-2005 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. ---- 2,6 ---- - It implements the builtin "printf" in Bash. - -! Copyright (C) 1997-2007 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. -*************** -*** 71,74 **** ---- 71,78 ---- - #include "common.h" - -+ #if defined (PRI_MACROS_BROKEN) -+ # undef PRIdMAX -+ #endif -+ - #if !defined (PRIdMAX) - # if HAVE_LONG_LONG -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 11 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 12 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-013 b/src/patches/bash/bash32-013 deleted file mode 100644 index d47bc1a5f..000000000 --- a/src/patches/bash/bash32-013 +++ /dev/null @@ -1,65 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-013 - -Bug-Reported-by: Magnus Svensson -Bug-Reference-ID: <45BDC44D.80609@mysql.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html - -Bug-Description: - -Readline neglects to reallocate the array it uses to keep track of wrapped -screen lines when increasing its size. This will eventually result in -segmentation faults when given sufficiently long input. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c Thu Sep 14 14:20:12 2006 ---- lib/readline/display.c Fri Feb 2 20:23:17 2007 -*************** -*** 561,574 **** ---- 561,586 ---- - wrap_offset = prompt_invis_chars_first_line = 0; - } - -+ #if defined (HANDLE_MULTIBYTE) - #define CHECK_INV_LBREAKS() \ - do { \ - if (newlines >= (inv_lbsize - 2)) \ - { \ - inv_lbsize *= 2; \ - inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ -+ _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ - } \ - } while (0) -+ #else -+ #define CHECK_INV_LBREAKS() \ -+ do { \ -+ if (newlines >= (inv_lbsize - 2)) \ -+ { \ -+ inv_lbsize *= 2; \ -+ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ -+ } \ -+ } while (0) -+ #endif /* HANDLE_MULTIBYTE */ - - #if defined (HANDLE_MULTIBYTE) - #define CHECK_LPOS() \ - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 12 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 13 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-014 b/src/patches/bash/bash32-014 deleted file mode 100644 index b706505b7..000000000 --- a/src/patches/bash/bash32-014 +++ /dev/null @@ -1,307 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-014 - -Bug-Reported-by: Brett Stahlman -Bug-Reference-ID: <000701c72d29$a227e0e0$5ec7cf47@computerroom> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-12/msg00065.html - -Bug-Description: - -Bash mishandles word splitting under certain circumstances when IFS is -null (IFS=). Constructs affected include ${param/pat/sub} and others -when expanding arrays (array[@]). - -Patch: - -*** ../bash-3.2-patched/array.c Wed Jun 1 16:39:22 2005 ---- array.c Mon Jan 15 22:58:00 2007 -*************** -*** 121,125 **** - } - -- #ifdef INCLUDE_UNUSED - /* - * Make and return a new array composed of the elements in array A from ---- 121,124 ---- -*************** -*** 142,146 **** - n = array_create_element (element_index(p), element_value(p)); - ADD_BEFORE(a->head, n); -! mi = element_index(ae); - } - a->num_elements = i; ---- 141,145 ---- - n = array_create_element (element_index(p), element_value(p)); - ADD_BEFORE(a->head, n); -! mi = element_index(n); - } - a->num_elements = i; -*************** -*** 148,152 **** - return a; - } -- #endif - - /* ---- 147,150 ---- -*************** -*** 301,304 **** ---- 299,319 ---- - } - -+ ARRAY * -+ array_quote_escapes(array) -+ ARRAY *array; -+ { -+ ARRAY_ELEMENT *a; -+ char *t; -+ -+ if (array == 0 || array_head(array) == 0 || array_empty(array)) -+ return (ARRAY *)NULL; -+ for (a = element_forw(array->head); a != array->head; a = element_forw(a)) { -+ t = quote_escapes (a->value); -+ FREE(a->value); -+ a->value = t; -+ } -+ return array; -+ } -+ - /* - * Return a string whose elements are the members of array A beginning at -*************** -*** 312,318 **** - int starsub, quoted; - { - ARRAY_ELEMENT *h, *p; - arrayind_t i; -! char *ifs, sep[2]; - - p = a ? array_head (a) : 0; ---- 327,334 ---- - int starsub, quoted; - { -+ ARRAY *a2; - ARRAY_ELEMENT *h, *p; - arrayind_t i; -! char *ifs, sep[2], *t; - - p = a ? array_head (a) : 0; -*************** -*** 337,340 **** ---- 353,363 ---- - ; - -+ a2 = array_slice(a, h, p); -+ -+ if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) -+ array_quote(a2); -+ else -+ array_quote_escapes(a2); -+ - if (starsub && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) { - ifs = getifs(); -*************** -*** 344,348 **** - sep[1] = '\0'; - -! return (array_to_string_internal (h, p, sep, quoted)); - } - ---- 367,374 ---- - sep[1] = '\0'; - -! t = array_to_string (a2, sep, 0); -! array_dispose(a2); -! -! return t; - } - -*************** -*** 368,372 **** - - if (mflags & MATCH_QUOTED) -! array_quote (a2); - if (mflags & MATCH_STARSUB) { - ifs = getifs(); ---- 394,400 ---- - - if (mflags & MATCH_QUOTED) -! array_quote(a2); -! else -! array_quote_escapes(a2); - if (mflags & MATCH_STARSUB) { - ifs = getifs(); -*** ../bash-3.2-patched/array.h Sun Jun 1 15:50:30 2003 ---- array.h Mon Jan 15 22:35:35 2007 -*************** -*** 56,59 **** ---- 56,60 ---- - extern int array_shift_element __P((ARRAY *, char *)); - extern ARRAY *array_quote __P((ARRAY *)); -+ extern ARRAY *array_quote_escapes __P((ARRAY *)); - - extern char *array_subrange __P((ARRAY *, arrayind_t, arrayind_t, int, int)); -*** ../bash-3.2-patched/subst.c Fri Mar 2 16:20:50 2007 ---- subst.c Tue Mar 6 11:40:55 2007 -*************** -*** 1888,1892 **** ---- 1889,1899 ---- - #endif - -+ /* XXX -- why call quote_list if ifs == 0? we can get away without doing -+ it now that quote_escapes quotes spaces */ -+ #if 0 - tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0)) -+ #else -+ tlist = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) -+ #endif - ? quote_list (list) - : list_quote_escapes (list); -*************** -*** 2922,2926 **** - /* Quote escape characters in string s, but no other characters. This is - used to protect CTLESC and CTLNUL in variable values from the rest of -! the word expansion process after the variable is expanded. */ - char * - quote_escapes (string) ---- 2935,2944 ---- - /* Quote escape characters in string s, but no other characters. This is - used to protect CTLESC and CTLNUL in variable values from the rest of -! the word expansion process after the variable is expanded. If IFS is -! null, we quote spaces as well, just in case we split on spaces later -! (in the case of unquoted $@, we will eventually attempt to split the -! entire word on spaces). Corresponding code exists in dequote_escapes. -! Even if we don't end up splitting on spaces, quoting spaces is not a -! problem. */ - char * - quote_escapes (string) -*************** -*** 2930,2933 **** ---- 2948,2952 ---- - size_t slen; - char *result, *send; -+ int quote_spaces; - DECLARE_MBSTATE; - -*************** -*** 2935,2938 **** ---- 2954,2958 ---- - send = string + slen; - -+ quote_spaces = (ifs_value && *ifs_value == 0); - t = result = (char *)xmalloc ((slen * 2) + 1); - s = string; -*************** -*** 2940,2944 **** - while (*s) - { -! if (*s == CTLESC || *s == CTLNUL) - *t++ = CTLESC; - COPY_CHAR_P (t, s, send); ---- 2960,2964 ---- - while (*s) - { -! if (*s == CTLESC || *s == CTLNUL || (quote_spaces && *s == ' ')) - *t++ = CTLESC; - COPY_CHAR_P (t, s, send); -*************** -*** 2982,2985 **** ---- 3002,3006 ---- - size_t slen; - char *result, *send; -+ int quote_spaces; - DECLARE_MBSTATE; - -*************** -*** 2996,3002 **** - return (strcpy (result, s)); - - while (*s) - { -! if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL)) - { - s++; ---- 3017,3024 ---- - return (strcpy (result, s)); - -+ quote_spaces = (ifs_value && *ifs_value == 0); - while (*s) - { -! if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL || (quote_spaces && s[1] == ' '))) - { - s++; -*************** -*** 4462,4466 **** - RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE); - -! if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || c == CTLESC || c == CTLNUL) - istring[istring_index++] = CTLESC; - ---- 4498,4510 ---- - RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE); - -! /* This is essentially quote_string inline */ -! if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) /* || c == CTLESC || c == CTLNUL */) -! istring[istring_index++] = CTLESC; -! /* Escape CTLESC and CTLNUL in the output to protect those characters -! from the rest of the word expansions (word splitting and globbing.) -! This is essentially quote_escapes inline. */ -! else if (c == CTLESC) -! istring[istring_index++] = CTLESC; -! else if (c == CTLNUL || (c == ' ' && (ifs_value && *ifs_value == 0))) - istring[istring_index++] = CTLESC; - -*************** -*** 5552,5555 **** ---- 5610,5616 ---- - rely on array_subrange to understand how to deal with them). */ - tt = array_subrange (array_cell (v), e1, e2, starsub, quoted); -+ #if 0 -+ /* array_subrange now calls array_quote_escapes as appropriate, so the -+ caller no longer needs to. */ - if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0) - { -*************** -*** 5558,5561 **** ---- 5619,5623 ---- - } - else -+ #endif - temp = tt; - break; -*************** -*** 5808,5811 **** ---- 5870,5876 ---- - case VT_ARRAYVAR: - temp = array_patsub (array_cell (v), p, rep, mflags); -+ #if 0 -+ /* Don't need to do this anymore; array_patsub calls array_quote_escapes -+ as appropriate before adding the space separators. */ - if (temp && (mflags & MATCH_QUOTED) == 0) - { -*************** -*** 5814,5817 **** ---- 5879,5883 ---- - temp = tt; - } -+ #endif - break; - #endif -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 13 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 14 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-015 b/src/patches/bash/bash32-015 deleted file mode 100644 index d887f6e56..000000000 --- a/src/patches/bash/bash32-015 +++ /dev/null @@ -1,95 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-015 - -Bug-Reported-by: -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under certain circumstances, when using FIFOs for process substitution, -bash fails to unlink the FIFOs. This leaves open file descriptors that -can cause the shell to hang and litters the file system. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c Fri Mar 2 16:20:50 2007 ---- execute_cmd.c Wed Jan 31 23:12:06 2007 -*************** -*** 3051,3054 **** ---- 3051,3059 ---- - command_line = savestring (the_printed_command_except_trap); - -+ #if defined (PROCESS_SUBSTITUTION) -+ if ((subshell_environment & SUBSHELL_COMSUB) && (simple_command->flags & CMD_NO_FORK) && fifos_pending() > 0) -+ simple_command->flags &= ~CMD_NO_FORK; -+ #endif -+ - execute_disk_command (words, simple_command->redirects, command_line, - pipe_in, pipe_out, async, fds_to_close, -*** ../bash-3.2-patched/subst.c Fri Mar 2 16:20:50 2007 ---- subst.c Tue Mar 6 11:40:55 2007 -*************** -*** 4129,4132 **** ---- 4151,4160 ---- - } - -+ int -+ fifos_pending () -+ { -+ return nfifo; -+ } -+ - static char * - make_named_pipe () -*************** -*** 4178,4181 **** ---- 4206,4215 ---- - } - -+ int -+ fifos_pending () -+ { -+ return 0; /* used for cleanup; not needed with /dev/fd */ -+ } -+ - void - unlink_fifo_list () -*************** -*** 4671,4674 **** ---- 4719,4725 ---- - last_command_exit_value = rc; - rc = run_exit_trap (); -+ #if defined (PROCESS_SUBSTITUTION) -+ unlink_fifo_list (); -+ #endif - exit (rc); - } -*** ../bash-3.2-patched/subst.h Tue Sep 19 08:34:41 2006 ---- subst.h Wed Jan 10 09:46:47 2007 -*************** -*** 223,226 **** ---- 223,227 ---- - extern char *pat_subst __P((char *, char *, char *, int)); - -+ extern int fifos_pending __P((void)); - extern void unlink_fifo_list __P((void)); - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 14 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 15 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-016 b/src/patches/bash/bash32-016 deleted file mode 100644 index a0f065ad3..000000000 --- a/src/patches/bash/bash32-016 +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-016 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1171795523.8021.18.camel@localhost> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html - -Bug-Description: - -When moving the cursor, bash sometimes misplaces the cursor when the prompt -contains two or more multibyte characters. The particular circumstance that -uncovered the problem was having the (multibyte) current directory name in -the prompt string. - -Patch: - -*** ../bash-3.2/lib/readline/display.c Fri Jan 19 13:34:50 2007 ---- lib/readline/display.c Sat Mar 10 17:25:44 2007 -*************** -*** 1745,1749 **** - { - dpos = _rl_col_width (data, 0, new); -! if (dpos > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; ---- 1745,1752 ---- - { - dpos = _rl_col_width (data, 0, new); -! /* Use NEW when comparing against the last invisible character in the -! prompt string, since they're both buffer indices and DPOS is a -! desired display position. */ -! if (new > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 15 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 16 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-017 b/src/patches/bash/bash32-017 deleted file mode 100644 index 99e5e70d2..000000000 --- a/src/patches/bash/bash32-017 +++ /dev/null @@ -1,85 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-017 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1173636022.7039.36.camel@localhost> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html - -Bug-Description: - -When restoring the original prompt after finishing an incremental search, -bash sometimes places the cursor incorrectly if the primary prompt contains -invisible characters. - -Patch: - -*** ../bash-3.2.16/lib/readline/display.c Fri Apr 20 13:30:16 2007 ---- lib/readline/display.c Fri Apr 20 15:17:01 2007 -*************** -*** 1599,1604 **** - if (temp > 0) - { - _rl_output_some_chars (nfd, temp); -! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; - } - } ---- 1599,1618 ---- - if (temp > 0) - { -+ /* If nfd begins at the prompt, or before the invisible -+ characters in the prompt, we need to adjust _rl_last_c_pos -+ in a multibyte locale to account for the wrap offset and -+ set cpos_adjusted accordingly. */ - _rl_output_some_chars (nfd, temp); -! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -! { -! _rl_last_c_pos += _rl_col_width (nfd, 0, temp); -! if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -! { -! _rl_last_c_pos -= wrap_offset; -! cpos_adjusted = 1; -! } -! } -! else -! _rl_last_c_pos += temp; - } - } -*************** -*** 1608,1613 **** ---- 1622,1639 ---- - if (temp > 0) - { -+ /* If nfd begins at the prompt, or before the invisible -+ characters in the prompt, we need to adjust _rl_last_c_pos -+ in a multibyte locale to account for the wrap offset and -+ set cpos_adjusted accordingly. */ - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; /* XXX */ -+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -+ { -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ } - } - lendiff = (oe - old) - (ne - new); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 16 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 17 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-018 b/src/patches/bash/bash32-018 deleted file mode 100644 index d729aaf5e..000000000 --- a/src/patches/bash/bash32-018 +++ /dev/null @@ -1,98 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-018 - -Bug-Reported-by: osicka@post.cz -Bug-Reference-ID: <228.177-19682-1132061412-1179356692@post.cz> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-05/msg00061.html - -Bug-Description: - -In certain cases, bash can lose the saved status of a background job, though -it should still be reported by `wait'. Bash can also loop infinitely after -creating and waiting for 4096 jobs. - -Patch: - -*** ../bash-20070510/jobs.c Thu Mar 8 16:05:50 2007 ---- jobs.c Fri May 18 11:40:14 2007 -*************** -*** 784,792 **** - { - old = js.j_firstj++; - while (js.j_firstj != old) - { - if (js.j_firstj >= js.j_jobslots) - js.j_firstj = 0; -! if (jobs[js.j_firstj]) - break; - js.j_firstj++; ---- 784,794 ---- - { - old = js.j_firstj++; -+ if (old >= js.j_jobslots) -+ old = js.j_jobslots - 1; - while (js.j_firstj != old) - { - if (js.j_firstj >= js.j_jobslots) - js.j_firstj = 0; -! if (jobs[js.j_firstj] || js.j_firstj == old) /* needed if old == 0 */ - break; - js.j_firstj++; -*************** -*** 798,806 **** - { - old = js.j_lastj--; - while (js.j_lastj != old) - { - if (js.j_lastj < 0) - js.j_lastj = js.j_jobslots - 1; -! if (jobs[js.j_lastj]) - break; - js.j_lastj--; ---- 800,810 ---- - { - old = js.j_lastj--; -+ if (old < 0) -+ old = 0; - while (js.j_lastj != old) - { - if (js.j_lastj < 0) - js.j_lastj = js.j_jobslots - 1; -! if (jobs[js.j_lastj] || js.j_lastj == old) /* needed if old == js.j_jobslots */ - break; - js.j_lastj--; -*************** -*** 964,968 **** - realloc_jobs_list (); - -! return (js.j_lastj); - } - ---- 975,983 ---- - realloc_jobs_list (); - -! #ifdef DEBUG -! itrace("compact_jobs_list: returning %d", (js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0); -! #endif -! -! return ((js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0); - } - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 17 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 18 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-019 b/src/patches/bash/bash32-019 deleted file mode 100644 index 647bd1fa3..000000000 --- a/src/patches/bash/bash32-019 +++ /dev/null @@ -1,343 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-019 - -Bug-Reported-by: Thomas Loeber -Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html - -Bug-Description: - -When rl_read_key returns -1, indicating that bash's controlling terminal -has been invalidated for some reason (e.g., receiving a SIGHUP), the error -status was not reported correctly to the caller. This could cause input -loops. - -Patch: - -*** ../bash-3.2-patched/lib/readline/complete.c Fri Jul 28 11:35:49 2006 ---- lib/readline/complete.c Tue Mar 13 08:50:16 2007 -*************** -*** 429,433 **** - if (c == 'n' || c == 'N' || c == RUBOUT) - return (0); -! if (c == ABORT_CHAR) - _rl_abort_internal (); - if (for_pager && (c == NEWLINE || c == RETURN)) ---- 440,444 ---- - if (c == 'n' || c == 'N' || c == RUBOUT) - return (0); -! if (c == ABORT_CHAR || c < 0) - _rl_abort_internal (); - if (for_pager && (c == NEWLINE || c == RETURN)) -*** ../bash-3.2-patched/lib/readline/input.c Wed Aug 16 15:15:16 2006 ---- lib/readline/input.c Wed May 2 16:07:59 2007 -*************** -*** 514,518 **** - int size; - { -! int mb_len = 0; - size_t mbchar_bytes_length; - wchar_t wc; ---- 522,526 ---- - int size; - { -! int mb_len, c; - size_t mbchar_bytes_length; - wchar_t wc; -*************** -*** 521,531 **** - memset(&ps, 0, sizeof (mbstate_t)); - memset(&ps_back, 0, sizeof (mbstate_t)); -! - while (mb_len < size) - { - RL_SETSTATE(RL_STATE_MOREINPUT); -! mbchar[mb_len++] = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - - mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); - if (mbchar_bytes_length == (size_t)(-1)) ---- 529,545 ---- - memset(&ps, 0, sizeof (mbstate_t)); - memset(&ps_back, 0, sizeof (mbstate_t)); -! -! mb_len = 0; - while (mb_len < size) - { - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ break; -+ -+ mbchar[mb_len++] = c; -+ - mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); - if (mbchar_bytes_length == (size_t)(-1)) -*************** -*** 565,569 **** - c = first; - memset (mb, 0, mlen); -! for (i = 0; i < mlen; i++) - { - mb[i] = (char)c; ---- 579,583 ---- - c = first; - memset (mb, 0, mlen); -! for (i = 0; c >= 0 && i < mlen; i++) - { - mb[i] = (char)c; -*** ../bash-3.2-patched/lib/readline/isearch.c Mon Dec 26 17:18:53 2005 ---- lib/readline/isearch.c Fri Mar 9 14:30:59 2007 -*************** -*** 328,333 **** - - f = (rl_command_func_t *)NULL; -! -! /* Translate the keys we do something with to opcodes. */ - if (c >= 0 && _rl_keymap[c].type == ISFUNC) - { ---- 328,340 ---- - - f = (rl_command_func_t *)NULL; -! -! if (c < 0) -! { -! cxt->sflags |= SF_FAILED; -! cxt->history_pos = cxt->last_found_line; -! return -1; -! } -! -! /* Translate the keys we do something with to opcodes. */ - if (c >= 0 && _rl_keymap[c].type == ISFUNC) - { -*** ../bash-3.2-patched/lib/readline/misc.c Mon Dec 26 17:20:46 2005 ---- lib/readline/misc.c Fri Mar 9 14:44:11 2007 -*************** -*** 147,150 **** ---- 147,152 ---- - rl_clear_message (); - RL_UNSETSTATE(RL_STATE_NUMERICARG); -+ if (key < 0) -+ return -1; - return (_rl_dispatch (key, _rl_keymap)); - } -*** ../bash-3.2-patched/lib/readline/readline.c Wed Aug 16 15:00:36 2006 ---- lib/readline/readline.c Fri Mar 9 14:47:24 2007 -*************** -*** 646,649 **** ---- 669,677 ---- - { - nkey = _rl_subseq_getchar (cxt->okey); -+ if (nkey < 0) -+ { -+ _rl_abort_internal (); -+ return -1; -+ } - r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); - cxt->flags |= KSEQ_DISPATCHED; -*** ../bash-3.2-patched/lib/readline/text.c Fri Jul 28 11:55:27 2006 ---- lib/readline/text.c Sun Mar 25 13:41:38 2007 -*************** -*** 858,861 **** ---- 864,870 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - #if defined (HANDLE_SIGNALS) - if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) -*************** -*** 1521,1524 **** ---- 1530,1536 ---- - mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); - -+ if (mb_len <= 0) -+ return -1; -+ - if (count < 0) - return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); -*************** -*** 1537,1540 **** ---- 1549,1555 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - if (count < 0) - return (_rl_char_search_internal (-count, bdir, c)); -*** ../bash-3.2-patched/lib/readline/vi_mode.c Sat Jul 29 16:42:28 2006 ---- lib/readline/vi_mode.c Fri Mar 9 15:02:11 2007 -*************** -*** 887,890 **** ---- 887,897 ---- - c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ -+ if (c < 0) -+ { -+ *nextkey = 0; -+ return -1; -+ } -+ - *nextkey = c; - -*************** -*** 903,906 **** ---- 910,918 ---- - c = rl_read_key (); /* real command */ - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ if (c < 0) -+ { -+ *nextkey = 0; -+ return -1; -+ } - *nextkey = c; - } -*************** -*** 1225,1236 **** - _rl_callback_generic_arg *data; - { - #if defined (HANDLE_MULTIBYTE) -! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! _rl_vi_last_search_char = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - - _rl_callback_func = 0; - _rl_want_redisplay = 1; ---- 1243,1262 ---- - _rl_callback_generic_arg *data; - { -+ int c; - #if defined (HANDLE_MULTIBYTE) -! c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - -+ if (c <= 0) -+ return -1; -+ -+ #if !defined (HANDLE_MULTIBYTE) -+ _rl_vi_last_search_char = c; -+ #endif -+ - _rl_callback_func = 0; - _rl_want_redisplay = 1; -*************** -*** 1248,1251 **** ---- 1274,1278 ---- - int count, key; - { -+ int c; - #if defined (HANDLE_MULTIBYTE) - static char *target; -*************** -*** 1294,1302 **** - { - #if defined (HANDLE_MULTIBYTE) -! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! _rl_vi_last_search_char = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); - #endif - } ---- 1321,1335 ---- - { - #if defined (HANDLE_MULTIBYTE) -! c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); -! if (c <= 0) -! return -1; -! _rl_vi_last_search_mblen = c; - #else - RL_SETSTATE(RL_STATE_MOREINPUT); -! c = rl_read_key (); - RL_UNSETSTATE(RL_STATE_MOREINPUT); -+ if (c < 0) -+ return -1; -+ _rl_vi_last_search_char = c; - #endif - } -*************** -*** 1468,1471 **** ---- 1501,1507 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -+ if (c < 0) -+ return -1; -+ - #if defined (HANDLE_MULTIBYTE) - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -*************** -*** 1486,1489 **** ---- 1522,1528 ---- - _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); - -+ if (c < 0) -+ return -1; -+ - _rl_callback_func = 0; - _rl_want_redisplay = 1; -*************** -*** 1517,1520 **** ---- 1556,1562 ---- - _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); - -+ if (c < 0) -+ return -1; -+ - return (_rl_vi_change_char (count, c, mb)); - } -*************** -*** 1651,1655 **** - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -! if (ch < 'a' || ch > 'z') - { - rl_ding (); ---- 1693,1697 ---- - RL_UNSETSTATE(RL_STATE_MOREINPUT); - -! if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ - { - rl_ding (); -*************** -*** 1703,1707 **** - return 0; - } -! else if (ch < 'a' || ch > 'z') - { - rl_ding (); ---- 1745,1749 ---- - return 0; - } -! else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ - { - rl_ding (); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 18 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 19 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-020 b/src/patches/bash/bash32-020 deleted file mode 100644 index 8c7e32890..000000000 --- a/src/patches/bash/bash32-020 +++ /dev/null @@ -1,183 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-020 - -Bug-Reported-by: Ian A Watson -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -In some cases of error processing, a jump back to the top-level processing -loop from a builtin command would leave the shell in an inconsistent state. - -Patch: - -*** ../bash-3.2-patched/sig.c Wed Jan 25 14:57:59 2006 ---- sig.c Sat Mar 10 11:11:30 2007 -*************** -*** 351,354 **** ---- 351,373 ---- - #undef XHANDLER - -+ /* Run some of the cleanups that should be performed when we run -+ jump_to_top_level from a builtin command context. XXX - might want to -+ also call reset_parser here. */ -+ void -+ top_level_cleanup () -+ { -+ /* Clean up string parser environment. */ -+ while (parse_and_execute_level) -+ parse_and_execute_cleanup (); -+ -+ #if defined (PROCESS_SUBSTITUTION) -+ unlink_fifo_list (); -+ #endif /* PROCESS_SUBSTITUTION */ -+ -+ run_unwind_protects (); -+ loop_level = continuing = breaking = 0; -+ return_catch_flag = 0; -+ } -+ - /* What to do when we've been interrupted, and it is safe to handle it. */ - void -*** ../bash-3.2-patched/sig.h Wed Jan 25 14:50:27 2006 ---- sig.h Sat Mar 10 11:14:18 2007 -*************** -*** 122,125 **** ---- 122,126 ---- - extern void initialize_terminating_signals __P((void)); - extern void reset_terminating_signals __P((void)); -+ extern void top_level_cleanup __P((void)); - extern void throw_to_top_level __P((void)); - extern void jump_to_top_level __P((int)) __attribute__((__noreturn__)); -*** ../bash-3.2-patched/builtins/common.c Tue Apr 3 16:47:13 2007 ---- builtins/common.c Mon Apr 30 15:01:33 2007 -*************** -*** 132,135 **** ---- 132,136 ---- - { - builtin_error (_("too many arguments")); -+ top_level_cleanup (); - jump_to_top_level (DISCARD); - } -*************** -*** 396,400 **** - throw_to_top_level (); - else -! jump_to_top_level (DISCARD); - } - no_args (list->next); ---- 410,417 ---- - throw_to_top_level (); - else -! { -! top_level_cleanup (); -! jump_to_top_level (DISCARD); -! } - } - no_args (list->next); -*** ../bash-3.2-patched/subst.c Tue Apr 3 16:47:19 2007 ---- subst.c Tue Jul 17 09:45:11 2007 -*************** -*** 1279,1283 **** - if (no_longjmp_on_fatal_error == 0) - { /* { */ -! report_error ("bad substitution: no closing `%s' in %s", "}", string); - last_command_exit_value = EXECUTION_FAILURE; - exp_jump_to_top_level (DISCARD); ---- 1290,1294 ---- - if (no_longjmp_on_fatal_error == 0) - { /* { */ -! report_error (_("bad substitution: no closing `%s' in %s"), "}", string); - last_command_exit_value = EXECUTION_FAILURE; - exp_jump_to_top_level (DISCARD); -*************** -*** 7662,7665 **** ---- 7706,7711 ---- - expand_no_split_dollar_star = 0; /* XXX */ - expanding_redir = 0; -+ -+ top_level_cleanup (); /* from sig.c */ - - jump_to_top_level (v); -*************** -*** 7880,7884 **** - { - report_error (_("no match: %s"), tlist->word->word); -! jump_to_top_level (DISCARD); - } - else if (allow_null_glob_expansion == 0) ---- 7927,7931 ---- - { - report_error (_("no match: %s"), tlist->word->word); -! exp_jump_to_top_level (DISCARD); - } - else if (allow_null_glob_expansion == 0) -*** ../bash-3.2-patched/arrayfunc.c Thu Jul 27 09:37:59 2006 ---- arrayfunc.c Thu May 31 11:55:46 2007 -*************** -*** 619,622 **** ---- 619,624 ---- - { - last_command_exit_value = EXECUTION_FAILURE; -+ -+ top_level_cleanup (); - jump_to_top_level (DISCARD); - } -*** ../bash-3.2-patched/expr.c Wed Dec 28 17:47:03 2005 ---- expr.c Tue Apr 24 14:17:59 2007 -*************** -*** 930,933 **** ---- 930,934 ---- - { - expr_unwind (); -+ top_level_cleanup (); - jump_to_top_level (DISCARD); - } -*** ../bash-3.2-patched/variables.c Fri Sep 8 13:33:32 2006 ---- variables.c Tue Jul 17 09:54:59 2007 -*************** -*** 1822,1830 **** - lval = evalexp (oval, &expok); /* ksh93 seems to do this */ - if (expok == 0) -! jump_to_top_level (DISCARD); - } - rval = evalexp (value, &expok); - if (expok == 0) -! jump_to_top_level (DISCARD); - if (flags & ASS_APPEND) - rval += lval; ---- 1855,1869 ---- - lval = evalexp (oval, &expok); /* ksh93 seems to do this */ - if (expok == 0) -! { -! top_level_cleanup (); -! jump_to_top_level (DISCARD); -! } - } - rval = evalexp (value, &expok); - if (expok == 0) -! { -! top_level_cleanup (); -! jump_to_top_level (DISCARD); -! } - if (flags & ASS_APPEND) - rval += lval; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 19 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 20 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-021 b/src/patches/bash/bash32-021 deleted file mode 100644 index 003489c6b..000000000 --- a/src/patches/bash/bash32-021 +++ /dev/null @@ -1,72 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-021 - -Bug-Reported-by: BAGSHAW Paul RD-TECH-REN -Bug-Reference-ID: <941BA0BF46DB8F4983FF7C8AFE800BC205EA7D4B@ftrdmel3.rd.francetelecom.fr> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00065.html - -Bug-Description: - -When the parser read a backslash-escaped character that would be treated -internally as an escape, it would double the number of escape characters. - -Patch: - -*** ../bash-3.2-patched/parse.y Mon Oct 30 17:22:00 2006 ---- parse.y Sat Mar 24 17:13:20 2007 -*************** -*** 3377,3381 **** - { - pass_next_character = 0; -! goto got_character; - } - ---- 3377,3381 ---- - { - pass_next_character = 0; -! goto got_escaped_character; - } - -*************** -*** 3651,3660 **** - got_character: - -- all_digit_token &= DIGIT (character); -- dollar_present |= character == '$'; -- - if (character == CTLESC || character == CTLNUL) - token[token_index++] = CTLESC; - - token[token_index++] = character; - ---- 3651,3662 ---- - got_character: - - if (character == CTLESC || character == CTLNUL) - token[token_index++] = CTLESC; - -+ got_escaped_character: -+ -+ all_digit_token &= DIGIT (character); -+ dollar_present |= character == '$'; -+ - token[token_index++] = character; - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 20 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 21 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-022 b/src/patches/bash/bash32-022 deleted file mode 100644 index d3679e67f..000000000 --- a/src/patches/bash/bash32-022 +++ /dev/null @@ -1,126 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-022 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -POSIX specifies that the `read' builtin invoked from an interative shell -must prompt with $PS2 when a line is continued using a backslash while -reading from a terminal. - -Patch: - -*** ../bash-3.2-patched/builtins/read.def Tue Sep 19 08:45:48 2006 ---- builtins/read.def Thu May 24 16:03:30 2007 -*************** -*** 128,133 **** - { - register char *varname; -! int size, i, nr, pass_next, saw_escape, eof, opt, retval, code; -! int input_is_tty, input_is_pipe, unbuffered_read; - int raw, edit, nchars, silent, have_timeout, fd; - unsigned int tmout; ---- 131,136 ---- - { - register char *varname; -! int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; -! int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul; - int raw, edit, nchars, silent, have_timeout, fd; - unsigned int tmout; -*************** -*** 135,139 **** - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1; - struct stat tsb; - SHELL_VAR *var; ---- 138,142 ---- - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1, *ps2; - struct stat tsb; - SHELL_VAR *var; -*************** -*** 149,152 **** ---- 152,156 ---- - USE_VAR(i); - USE_VAR(pass_next); -+ USE_VAR(print_ps2); - USE_VAR(saw_escape); - USE_VAR(input_is_pipe); -*************** -*** 164,167 **** ---- 168,172 ---- - #endif - USE_VAR(list); -+ USE_VAR(ps2); - - i = 0; /* Index into the string that we are reading. */ -*************** -*** 387,391 **** - #endif - -! for (eof = retval = 0;;) - { - #if defined (READLINE) ---- 394,399 ---- - #endif - -! ps2 = 0; -! for (print_ps2 = eof = retval = 0;;) - { - #if defined (READLINE) -*************** -*** 413,416 **** ---- 421,433 ---- - #endif - -+ if (print_ps2) -+ { -+ if (ps2 == 0) -+ ps2 = get_string_value ("PS2"); -+ fprintf (stderr, "%s", ps2 ? ps2 : ""); -+ fflush (stderr); -+ print_ps2 = 0; -+ } -+ - if (unbuffered_read) - retval = zread (fd, &c, 1); -*************** -*** 441,445 **** - pass_next = 0; - if (c == '\n') -! i--; /* back up over the CTLESC */ - else - goto add_char; ---- 458,466 ---- - pass_next = 0; - if (c == '\n') -! { -! i--; /* back up over the CTLESC */ -! if (interactive && input_is_tty && raw == 0) -! print_ps2 = 1; -! } - else - goto add_char; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 21 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 22 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-023 b/src/patches/bash/bash32-023 deleted file mode 100644 index 34a63947f..000000000 --- a/src/patches/bash/bash32-023 +++ /dev/null @@ -1,51 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-023 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -When an error occurs during the pattern removal word expansion, the shell -can free unallocated memory or free memory multiple times. - -Patch: - -*** ../bash-3.2-patched/subst.c Tue Apr 3 16:47:19 2007 ---- subst.c Tue Jul 17 09:45:11 2007 -*************** -*** 3975,3979 **** - patstr++; - -! pattern = getpattern (patstr, quoted, 1); - - temp1 = (char *)NULL; /* shut up gcc */ ---- 4008,4016 ---- - patstr++; - -! /* Need to pass getpattern newly-allocated memory in case of expansion -- -! the expansion code will free the passed string on an error. */ -! temp1 = savestring (patstr); -! pattern = getpattern (temp1, quoted, 1); -! free (temp1); - - temp1 = (char *)NULL; /* shut up gcc */ -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 22 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 23 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-024 b/src/patches/bash/bash32-024 deleted file mode 100644 index 1575f37a9..000000000 --- a/src/patches/bash/bash32-024 +++ /dev/null @@ -1,77 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-024 - -Bug-Reported-by: Peter Volkov -Bug-Reference-ID: <1178376645.9063.25.camel@localhost> -Bug-Reference-URL: http://bugs.gentoo.org/177095 - -Bug-Description: - -The readline display code miscalculated the screen position when performing -a redisplay in which the new text occupies more screen space that the old, -but takes fewer bytes to do so (e.g., when replacing a shorter string -containing multibyte characters with a longer one containing only ASCII). - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c Thu Apr 26 11:38:22 2007 ---- lib/readline/display.c Thu Jul 12 23:10:10 2007 -*************** -*** 1519,1527 **** - /* Non-zero if we're increasing the number of lines. */ - int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; - /* Sometimes it is cheaper to print the characters rather than - use the terminal's capabilities. If we're growing the number - of lines, make sure we actually cause the new line to wrap - around on auto-wrapping terminals. */ -! if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) - { - /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and ---- 1568,1596 ---- - /* Non-zero if we're increasing the number of lines. */ - int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; -+ /* If col_lendiff is > 0, implying that the new string takes up more -+ screen real estate than the old, but lendiff is < 0, meaning that it -+ takes fewer bytes, we need to just output the characters starting -+ from the first difference. These will overwrite what is on the -+ display, so there's no reason to do a smart update. This can really -+ only happen in a multibyte environment. */ -+ if (lendiff < 0) -+ { -+ _rl_output_some_chars (nfd, temp); -+ _rl_last_c_pos += _rl_col_width (nfd, 0, temp); -+ /* If nfd begins before any invisible characters in the prompt, -+ adjust _rl_last_c_pos to account for wrap_offset and set -+ cpos_adjusted to let the caller know. */ -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } -+ return; -+ } - /* Sometimes it is cheaper to print the characters rather than - use the terminal's capabilities. If we're growing the number - of lines, make sure we actually cause the new line to wrap - around on auto-wrapping terminals. */ -! else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) - { - /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 23 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 24 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-025 b/src/patches/bash/bash32-025 deleted file mode 100644 index 4d53d89d7..000000000 --- a/src/patches/bash/bash32-025 +++ /dev/null @@ -1,79 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-025 - -Bug-Reported-by: Tom Bjorkholm -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html - -Bug-Description: - -An off-by-one error in readline's input buffering caused readline to drop -each 511th character of buffered input (e.g., when pasting a large amount -of data into a terminal window). - -Patch: - -*** ../bash-3.2-patched/lib/readline/input.c Wed Aug 16 15:15:16 2006 ---- lib/readline/input.c Tue Jul 17 09:24:21 2007 -*************** -*** 134,139 **** - - *key = ibuffer[pop_index++]; -! - if (pop_index >= ibuffer_len) - pop_index = 0; - ---- 134,142 ---- - - *key = ibuffer[pop_index++]; -! #if 0 - if (pop_index >= ibuffer_len) -+ #else -+ if (pop_index > ibuffer_len) -+ #endif - pop_index = 0; - -*************** -*** 251,255 **** - { - k = (*rl_getc_function) (rl_instream); -! rl_stuff_char (k); - if (k == NEWLINE || k == RETURN) - break; ---- 254,259 ---- - { - k = (*rl_getc_function) (rl_instream); -! if (rl_stuff_char (k) == 0) -! break; /* some problem; no more room */ - if (k == NEWLINE || k == RETURN) - break; -*************** -*** 374,378 **** ---- 378,386 ---- - } - ibuffer[push_index++] = key; -+ #if 0 - if (push_index >= ibuffer_len) -+ #else -+ if (push_index > ibuffer_len) -+ #endif - push_index = 0; - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 24 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 25 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-026 b/src/patches/bash/bash32-026 deleted file mode 100644 index ba7de50a8..000000000 --- a/src/patches/bash/bash32-026 +++ /dev/null @@ -1,82 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-026 - -Bug-Reported-by: Chet Ramey -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -This keeps the Apple linker from attempting to link bash against Apple's -readline library "replacement" rather than the one shipped with bash. It -extends the configure workaround to Mac OS X Leopard (10.5). - -As a side effect, the patch updates the copyright date displayed in the -version string. - -You must re-run configure after applying the patch, and before rebuilding -bash. - -Patch: - -*** ../bash-3.2-patched/configure.in 2007-03-06 11:07:38.000000000 -0500 ---- configure.in 2007-11-23 15:37:41.000000000 -0500 -*************** -*** 519,523 **** - # dynamic version - case "${host_os}" in -! darwin8*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac ---- 519,523 ---- - # dynamic version - case "${host_os}" in -! darwin[[89]]*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac -*** ../bash-3.2-patched/configure 2007-03-24 14:51:22.000000000 -0400 ---- configure 2007-11-23 15:46:15.000000000 -0500 -*************** -*** 4872,4876 **** - # dynamic version - case "${host_os}" in -! darwin8*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac ---- 4872,4876 ---- - # dynamic version - case "${host_os}" in -! darwin[89]*) READLINE_LIB='${READLINE_LIBRARY}' ;; - *) READLINE_LIB=-lreadline ;; - esac -*** ../bash-3.2-patched/version.c 2005-05-16 11:58:34.000000000 -0400 ---- version.c 2007-11-23 16:03:40.000000000 -0500 -*************** -*** 80,83 **** - printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); - if (extended) -! printf (_("Copyright (C) 2005 Free Software Foundation, Inc.\n")); - } ---- 80,83 ---- - printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); - if (extended) -! printf (_("Copyright (C) 2007 Free Software Foundation, Inc.\n")); - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 25 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 26 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-027 b/src/patches/bash/bash32-027 deleted file mode 100644 index 5e110cb96..000000000 --- a/src/patches/bash/bash32-027 +++ /dev/null @@ -1,85 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-027 - -Bug-Reported-by: dAniel hAhler -Bug-Reference-ID: <4702ED8A.5000503@thequod.de> -Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938 - -Bug-Description: - -When updating the display after displaying, for instance, a list of possible -completions, readline will place the cursor at the wrong position if the -prompt contains invisible characters and a newline. - -Patch: - -*** ../bash-3.2.25/lib/readline/display.c Mon Aug 6 14:26:29 2007 ---- lib/readline/display.c Wed Oct 10 22:43:58 2007 -*************** -*** 1049,1053 **** - else - tx = nleft; -! if (_rl_last_c_pos > tx) - { - _rl_backspace (_rl_last_c_pos - tx); /* XXX */ ---- 1049,1053 ---- - else - tx = nleft; -! if (tx >= 0 && _rl_last_c_pos > tx) - { - _rl_backspace (_rl_last_c_pos - tx); /* XXX */ -*************** -*** 1205,1209 **** - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd; - int current_invis_chars; - int col_lendiff, col_temp; ---- 1205,1209 ---- - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; -*************** -*** 1466,1469 **** ---- 1466,1471 ---- - } - -+ o_cpos = _rl_last_c_pos; -+ - /* When this function returns, _rl_last_c_pos is correct, and an absolute - cursor postion in multibyte mode, but a buffer index when not in a -*************** -*** 1475,1479 **** - invisible characters in the prompt string. Let's see if setting this when - we make sure we're at the end of the drawn prompt string works. */ -! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars) - cpos_adjusted = 1; - #endif ---- 1477,1483 ---- - invisible characters in the prompt string. Let's see if setting this when - we make sure we're at the end of the drawn prompt string works. */ -! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && -! (_rl_last_c_pos > 0 || o_cpos > 0) && -! _rl_last_c_pos == prompt_physical_chars) - cpos_adjusted = 1; - #endif -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 26 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 27 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-028 b/src/patches/bash/bash32-028 deleted file mode 100644 index e8182948d..000000000 --- a/src/patches/bash/bash32-028 +++ /dev/null @@ -1,60 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-028 - -Bug-Reported-by: dAniel hAhler -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under some circumstances, readline will incorrectly display a prompt string -containing invisible characters after the final newline. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c 2007-08-25 13:47:08.000000000 -0400 ---- lib/readline/display.c 2007-11-10 17:51:29.000000000 -0500 -*************** -*** 392,396 **** - local_prompt = expand_prompt (p, &prompt_visible_length, - &prompt_last_invisible, -! (int *)NULL, - &prompt_physical_chars); - c = *t; *t = '\0'; ---- 420,424 ---- - local_prompt = expand_prompt (p, &prompt_visible_length, - &prompt_last_invisible, -! &prompt_invis_chars_first_line, - &prompt_physical_chars); - c = *t; *t = '\0'; -*************** -*** 399,403 **** - local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, - (int *)NULL, -! &prompt_invis_chars_first_line, - (int *)NULL); - *t = c; ---- 427,431 ---- - local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, - (int *)NULL, -! (int *)NULL, - (int *)NULL); - *t = c; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 27 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 28 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-029 b/src/patches/bash/bash32-029 deleted file mode 100644 index 9de208584..000000000 --- a/src/patches/bash/bash32-029 +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-029 - -Bug-Reported-by: Tomas Janousek -Bug-Reference-ID: <20071102104034.GA26893@redhat.com> -Bug-Reference-URL: https://bugzilla.redhat.com/show_bug.cgi?id=286861 - -Bug-Description: - -When the bash arithmetic expression evaluator has temporarily turned off -evalation, such as when parsing a pre- or post-decrement or -increment -operator, and an error occurs, evaluation is not re-enabled. - -Patch: - -*** ../bash-3.2-patched/expr.c 2007-08-25 13:47:05.000000000 -0400 ---- expr.c 2007-10-18 08:08:44.000000000 -0400 -*************** -*** 287,290 **** ---- 287,292 ---- - } - free (expr_stack[expr_depth]); /* free the allocated EXPR_CONTEXT */ -+ -+ noeval = 0; /* XXX */ - } - -*************** -*** 320,323 **** ---- 322,326 ---- - - val = 0; -+ noeval = 0; - - FASTCOPY (evalbuf, oevalbuf, sizeof (evalbuf)); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 28 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 29 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-030 b/src/patches/bash/bash32-030 deleted file mode 100644 index 3f12c2833..000000000 --- a/src/patches/bash/bash32-030 +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-030 - -Bug-Reported-by: Paul Eggert Andreas Schwab -Bug-Reference-ID: <877il0nu84.fsf_-_@penguin.cs.ucla.edu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-11/msg00023.html http://lists.gnu.org/archive/html/bug-bash/2007-11/msg00022.htmlhttp://lists.gnu.org/archive/html/bug-bash/2007-11/msg00022.html - -Bug-Description: - -If redirections attached to a compound command fail, bash does not set the -command's exit status correctly. This only happens when the command is the -first in a sequential list. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2007-03-24 14:51:05.000000000 -0400 ---- execute_cmd.c 2007-11-05 22:31:14.000000000 -0500 -*************** -*** 615,619 **** - redirection_undo_list = (REDIRECT *)NULL; - dispose_exec_redirects (); -! return (EXECUTION_FAILURE); - } - ---- 620,624 ---- - redirection_undo_list = (REDIRECT *)NULL; - dispose_exec_redirects (); -! return (last_command_exit_value = EXECUTION_FAILURE); - } - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 29 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 30 - - #endif /* _PATCHLEVEL_H_ */ - - diff --git a/src/patches/bash/bash32-031 b/src/patches/bash/bash32-031 deleted file mode 100644 index 6c96fb9d0..000000000 --- a/src/patches/bash/bash32-031 +++ /dev/null @@ -1,62 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-031 - -Bug-Reported-by: Miroslav Lichvar -Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100 -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html - -Bug-Description: - -In certain cases when outputting characters at the end of the line, -e.g., when displaying the prompt string, readline positions the cursor -incorrectly if the prompt string contains invisible characters and the -text being drawn begins before the last invisible character in the line. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c 2007-08-25 13:47:08.000000000 -0400 ---- lib/readline/display.c 2007-11-10 17:51:29.000000000 -0500 -*************** -*** 1566,1574 **** - else - { -- /* We have horizontal scrolling and we are not inserting at -- the end. We have invisible characters in this line. This -- is a dumb update. */ - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; - return; - } ---- 1619,1632 ---- - else - { - _rl_output_some_chars (nfd, temp); - _rl_last_c_pos += col_temp; -+ /* If nfd begins before any invisible characters in the prompt, -+ adjust _rl_last_c_pos to account for wrap_offset and set -+ cpos_adjusted to let the caller know. */ -+ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) -+ { -+ _rl_last_c_pos -= wrap_offset; -+ cpos_adjusted = 1; -+ } - return; - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 30 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 31 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-032 b/src/patches/bash/bash32-032 deleted file mode 100644 index 5e53e2919..000000000 --- a/src/patches/bash/bash32-032 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-032 - -Bug-Reported-by: Uwe Doering -Bug-Reference-ID: <46F3DD72.2090801@geminix.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html - -Bug-Description: - -There is an off-by-one error in the code that buffers characters received -very quickly in succession, causing characters to be dropped. - -Patch: - -*** ../bash-3.2-patched/lib/readline/input.c 2007-08-25 13:47:10.000000000 -0400 ---- lib/readline/input.c 2007-10-12 22:55:25.000000000 -0400 -*************** -*** 155,159 **** - pop_index--; - if (pop_index < 0) -! pop_index = ibuffer_len - 1; - ibuffer[pop_index] = key; - return (1); ---- 155,159 ---- - pop_index--; - if (pop_index < 0) -! pop_index = ibuffer_len; - ibuffer[pop_index] = key; - return (1); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 31 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 32 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-033 b/src/patches/bash/bash32-033 deleted file mode 100644 index 0d698108b..000000000 --- a/src/patches/bash/bash32-033 +++ /dev/null @@ -1,88 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-033 - -Bug-Reported-by: Christophe Martin -Bug-Reference-ID: <465ABA4A.3030805@free.fr> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-05/msg00104.html - -Bug-Description: - -References made within a function to an uninitialized local array variable -using the [*] subscript in a double-quoted string can result in spurious -ASCII 127 characters in the expanded value. - -Patch: - -*** ../bash-3.2-patched/arrayfunc.c 2007-08-25 13:47:05.000000000 -0400 ---- arrayfunc.c 2007-05-31 11:55:46.000000000 -0400 -*************** -*** 723,727 **** - { - if (rtype) -! *rtype = 1; - if (allow_all == 0) - { ---- 723,727 ---- - { - if (rtype) -! *rtype = (t[0] == '*') ? 1 : 2; - if (allow_all == 0) - { -*** ../bash-3.2-patched/subst.c 2007-08-25 13:47:08.000000000 -0400 ---- subst.c 2007-11-14 15:43:00.000000000 -0500 -*************** -*** 4908,4915 **** - intmax_t arg_index; - SHELL_VAR *var; -! int atype; - - ret = 0; - temp = 0; - - /* Handle multiple digit arguments, as in ${11}. */ ---- 4973,4981 ---- - intmax_t arg_index; - SHELL_VAR *var; -! int atype, rflags; - - ret = 0; - temp = 0; -+ rflags = 0; - - /* Handle multiple digit arguments, as in ${11}. */ -*************** -*** 4944,4947 **** ---- 5010,5015 ---- - ? quote_string (temp) - : quote_escapes (temp); -+ else if (atype == 1 && temp && QUOTED_NULL (temp) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) -+ rflags |= W_HASQUOTEDNULL; - } - #endif -*************** -*** 4971,4974 **** ---- 5039,5043 ---- - ret = alloc_word_desc (); - ret->word = temp; -+ ret->flags |= rflags; - } - return ret; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 32 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 33 - - #endif /* _PATCHLEVEL_H_ */ - diff --git a/src/patches/bash/bash32-034 b/src/patches/bash/bash32-034 deleted file mode 100644 index 4f081624b..000000000 --- a/src/patches/bash/bash32-034 +++ /dev/null @@ -1,74 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-034 - -Bug-Reported-by: Ian Campbell -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-10/msg00060.html - -Bug-Description: - -The bash getcwd replacement will write past the end of allocated memory -when it allocates the buffer itself if it uses the buffer size passed as -an argument, and that size is less than the length of the pathname. - -Patch: - -*** ../bash-3.2-patched/lib/sh/getcwd.c 2004-07-21 17:15:19.000000000 -0400 ---- lib/sh/getcwd.c 2007-12-31 19:26:36.000000000 -0500 -*************** -*** 252,268 **** - { - size_t len = pathbuf + pathsize - pathp; - if (buf == NULL) - { -! if (len < (size_t) size) -! len = size; -! buf = (char *) malloc (len); - if (buf == NULL) - goto lose2; - } -! else if ((size_t) size < len) -! { -! errno = ERANGE; -! goto lose2; -! } - (void) memcpy((PTR_T) buf, (PTR_T) pathp, len); - } ---- 287,305 ---- - { - size_t len = pathbuf + pathsize - pathp; -+ if (buf == NULL && size <= 0) -+ size = len; -+ -+ if ((size_t) size < len) -+ { -+ errno = ERANGE; -+ goto lose2; -+ } - if (buf == NULL) - { -! buf = (char *) malloc (size); - if (buf == NULL) - goto lose2; - } -! - (void) memcpy((PTR_T) buf, (PTR_T) pathp, len); - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 33 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 34 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-035 b/src/patches/bash/bash32-035 deleted file mode 100644 index 55506baef..000000000 --- a/src/patches/bash/bash32-035 +++ /dev/null @@ -1,159 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-035 - -Bug-Reported-by: Ingo Molnar -Bug-Reference-ID: <20071205202901.GA25202@elte.hu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-12/msg00014.html - -Bug-Description: - -Bash incorrectly puts the second and subsequent children spawned by a -shell forked to run a command substitution in the wrong process group. - -Patch: - -*** ../bash-3.2-patched/subst.c 2007-12-13 22:31:21.000000000 -0500 ---- subst.c 2008-01-17 22:48:15.000000000 -0500 -*************** -*** 4621,4627 **** - - #if defined (JOB_CONTROL) - set_sigchld_handler (); - stop_making_children (); -! pipeline_pgrp = old_pipeline_pgrp; - #else - stop_making_children (); ---- 4721,4728 ---- - - #if defined (JOB_CONTROL) - set_sigchld_handler (); - stop_making_children (); -! if (pid != 0) -! pipeline_pgrp = old_pipeline_pgrp; - #else - stop_making_children (); -*** ../bash-3.2-patched/jobs.c 2007-08-25 13:46:59.000000000 -0400 ---- jobs.c 2007-12-08 16:47:43.000000000 -0500 -*************** -*** 251,254 **** ---- 251,255 ---- - static int set_job_status_and_cleanup __P((int)); - -+ static WAIT job_signal_status __P((int)); - static WAIT raw_job_exit_status __P((int)); - -*************** -*** 2220,2223 **** ---- 2238,2261 ---- - } - -+ static WAIT -+ job_signal_status (job) -+ int job; -+ { -+ register PROCESS *p; -+ WAIT s; -+ -+ p = jobs[job]->pipe; -+ do -+ { -+ s = p->status; -+ if (WIFSIGNALED(s) || WIFSTOPPED(s)) -+ break; -+ p = p->next; -+ } -+ while (p != jobs[job]->pipe); -+ -+ return s; -+ } -+ - /* Return the exit status of the last process in the pipeline for job JOB. - This is the exit status of the entire job. */ -*************** -*** 2302,2310 **** - received, only if one of the jobs run is killed via SIGINT. If - job control is not set, the job will be run in the same pgrp as -! the shell, and the shell will see any signals the job gets. */ - - /* This is possibly a race condition -- should it go in stop_pipeline? */ - wait_sigint_received = 0; -! if (job_control == 0) - { - old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); ---- 2343,2354 ---- - received, only if one of the jobs run is killed via SIGINT. If - job control is not set, the job will be run in the same pgrp as -! the shell, and the shell will see any signals the job gets. In -! fact, we want this set every time the waiting shell and the waited- -! for process are in the same process group, including command -! substitution. */ - - /* This is possibly a race condition -- should it go in stop_pipeline? */ - wait_sigint_received = 0; -! if (job_control == 0 || (subshell_environment&SUBSHELL_COMSUB)) - { - old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler); -*************** -*** 2452,2464 **** - the last process in the pipeline. If no process exits due to a - signal, S is left as the status of the last job in the pipeline. */ -! p = jobs[job]->pipe; -! do -! { -! s = p->status; -! if (WIFSIGNALED(s) || WIFSTOPPED(s)) -! break; -! p = p->next; -! } -! while (p != jobs[job]->pipe); - - if (WIFSIGNALED (s) || WIFSTOPPED (s)) ---- 2496,2500 ---- - the last process in the pipeline. If no process exits due to a - signal, S is left as the status of the last job in the pipeline. */ -! s = job_signal_status (job); - - if (WIFSIGNALED (s) || WIFSTOPPED (s)) -*************** -*** 2494,2497 **** ---- 2530,2551 ---- - } - } -+ else if ((subshell_environment & SUBSHELL_COMSUB) && wait_sigint_received) -+ { -+ /* If waiting for a job in a subshell started to do command -+ substitution, simulate getting and being killed by the SIGINT to -+ pass the status back to our parent. */ -+ s = job_signal_status (job); -+ -+ if (WIFSIGNALED (s) && WTERMSIG (s) == SIGINT && signal_is_trapped (SIGINT) == 0) -+ { -+ UNBLOCK_CHILD (oset); -+ restore_sigint_handler (); -+ old_sigint_handler = set_signal_handler (SIGINT, SIG_DFL); -+ if (old_sigint_handler == SIG_IGN) -+ restore_sigint_handler (); -+ else -+ kill (getpid (), SIGINT); -+ } -+ } - - /* Moved here from set_job_status_and_cleanup, which is in the SIGCHLD -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 34 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 35 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-036 b/src/patches/bash/bash32-036 deleted file mode 100644 index ef22e60e0..000000000 --- a/src/patches/bash/bash32-036 +++ /dev/null @@ -1,44 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-036 - -Bug-Reported-by: Len Lattanzi -Bug-Reference-ID: <87493131-7AEC-4301-A684-E6CC6D06E3E1@apple.com> -Bug-Reference-URL: - -Bug-Description: - -When initializing a subshell, bash did not reset a sentinel keeping track -of the number of command substitutions, leading to an infinite loop if -an error was encountered in the subshell. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2007-12-13 22:31:14.000000000 -0500 ---- execute_cmd.c 2007-12-20 08:52:34.000000000 -0500 -*************** -*** 3881,3884 **** ---- 3916,3921 ---- - - clear_unwind_protect_list (0); -+ /* XXX -- are there other things we should be resetting here? */ -+ parse_and_execute_level = 0; /* nothing left to restore it */ - - /* We're no longer inside a shell function. */ -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 35 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 36 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-037 b/src/patches/bash/bash32-037 deleted file mode 100644 index 376bd937c..000000000 --- a/src/patches/bash/bash32-037 +++ /dev/null @@ -1,110 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-037 - -Bug-Reported-by: jared r r spiegel -Bug-Reference-ID: <200801152201.m0FM1lDp021260@iorek.ice-nine.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-01/msg00049.html - -Bug-Description: - -Bash inappropriately evaluates command substitutions while expanding -directory names as part of command substitution. - -Patch: - -*** ../bash-3.2-patched/subst.c 2007-12-13 22:31:21.000000000 -0500 ---- subst.c 2008-01-17 22:48:15.000000000 -0500 -*************** -*** 2815,2821 **** - to jump_to_top_level here so we don't endlessly loop. */ - WORD_LIST * -! expand_prompt_string (string, quoted) - char *string; - int quoted; - { - WORD_LIST *value; ---- 2895,2902 ---- - to jump_to_top_level here so we don't endlessly loop. */ - WORD_LIST * -! expand_prompt_string (string, quoted, wflags) - char *string; - int quoted; -+ int wflags; - { - WORD_LIST *value; -*************** -*** 2825,2829 **** - return ((WORD_LIST *)NULL); - -! td.flags = 0; - td.word = savestring (string); - ---- 2906,2910 ---- - return ((WORD_LIST *)NULL); - -! td.flags = wflags; - td.word = savestring (string); - -*** ../bash-3.2-patched/subst.h 2007-03-24 14:51:05.000000000 -0400 ---- subst.h 2008-01-17 22:46:08.000000000 -0500 -*************** -*** 136,140 **** - - /* Expand a prompt string. */ -! extern WORD_LIST *expand_prompt_string __P((char *, int)); - - /* Expand STRING just as if you were expanding a word. This also returns ---- 137,141 ---- - - /* Expand a prompt string. */ -! extern WORD_LIST *expand_prompt_string __P((char *, int, int)); - - /* Expand STRING just as if you were expanding a word. This also returns -*** ../bash-3.2-patched/parse.y 2007-08-25 13:47:06.000000000 -0400 ---- parse.y 2008-01-17 22:46:30.000000000 -0500 -*************** -*** 4367,4371 **** - { - last_exit_value = last_command_exit_value; -! list = expand_prompt_string (result, Q_DOUBLE_QUOTES); - free (result); - result = string_list (list); ---- 4367,4371 ---- - { - last_exit_value = last_command_exit_value; -! list = expand_prompt_string (result, Q_DOUBLE_QUOTES, 0); - free (result); - result = string_list (list); -*** ../bash-3.2-patched/bashline.c 2006-07-29 16:39:30.000000000 -0400 ---- bashline.c 2008-02-17 12:53:42.000000000 -0500 -*************** -*** 2358,2362 **** - { - new_dirname = savestring (local_dirname); -! wl = expand_prompt_string (new_dirname, 0); /* does the right thing */ - if (wl) - { ---- 2376,2380 ---- - { - new_dirname = savestring (local_dirname); -! wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB); /* does the right thing */ - if (wl) - { -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 36 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 37 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-038 b/src/patches/bash/bash32-038 deleted file mode 100644 index 842b1b501..000000000 --- a/src/patches/bash/bash32-038 +++ /dev/null @@ -1,80 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-038 - -Bug-Reported-by: Wojciech Puchar -Bug-Reference-ID: <200803131141.m2DBf9vo001136@wojtek.tensor.gdynia.pl> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-03/msg00029.html - -Bug-Description: - -When reading input lines into a single variable using the `read' builtin, -bash did not free the memory it read after assigining it to the named -variable, causing a memory leak noticable when reading large amounts of -data. - - -Patch: - -*** ../bash-3.2-patched/builtins/read.def 2007-08-25 13:47:07.000000000 -0400 ---- builtins/read.def 2008-03-07 12:55:47.000000000 -0500 -*************** -*** 135,139 **** - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1, *ps2; - struct stat tsb; - SHELL_VAR *var; ---- 152,156 ---- - char c; - char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname; -! char *e, *t, *t1, *ps2, *tofree; - struct stat tsb; - SHELL_VAR *var; -*************** -*** 675,678 **** ---- 728,732 ---- - /* Check whether or not the number of fields is exactly the same as the - number of variables. */ -+ tofree = NULL; - if (*input_string) - { -*************** -*** 680,684 **** - t = get_word_from_string (&input_string, ifs_chars, &e); - if (*input_string == 0) -! input_string = t; - else - input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape); ---- 734,738 ---- - t = get_word_from_string (&input_string, ifs_chars, &e); - if (*input_string == 0) -! tofree = input_string = t; - else - input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape); -*************** -*** 695,698 **** ---- 749,754 ---- - var = bind_read_variable (list->word->word, input_string); - stupidly_hack_special_variables (list->word->word); -+ FREE (tofree); -+ - if (var) - VUNSETATTR (var, att_invisible); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 37 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 38 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-039 b/src/patches/bash/bash32-039 deleted file mode 100644 index c225a5af4..000000000 --- a/src/patches/bash/bash32-039 +++ /dev/null @@ -1,175 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-039 - -Bug-Reported-by: rew@erebor.com -Bug-Reference-ID: <20070119065603.546D011E9C@kansas.erebor.com> -Bug-Reference-URL: - -Bug-Description: - -Bash-3.2 changed the behavior of the [[ command's `=~' operator when the -right-hand side was quoted: it matched the quoted portions as strings. -This patch introduces a new shell option: compat31. When enabled, it -restores the bash-3.1 behavior with respect to evaluating quoted arguments -to the =~ operator. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2007-12-14 21:12:39.000000000 -0500 ---- execute_cmd.c 2008-02-22 21:20:40.000000000 -0500 -*************** -*** 2547,2551 **** - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, rmatch ? 2 : (patmatch ? 1 : 0)); - if (arg2 == 0) - arg2 = nullstr; ---- 2552,2557 ---- - if (arg1 == 0) - arg1 = nullstr; -! arg2 = cond_expand_word (cond->right->op, -! (rmatch && shell_compatibility_level > 31) ? 2 : (patmatch ? 1 : 0)); - if (arg2 == 0) - arg2 = nullstr; -*** ../bash-3.2-patched/shell.h 2003-06-01 15:04:36.000000000 -0400 ---- shell.h 2008-02-22 21:16:48.000000000 -0500 -*************** -*** 90,93 **** ---- 90,94 ---- - extern int interactive, interactive_shell; - extern int startup_state; -+ extern int shell_compatibility_level; - - /* Structure to pass around that holds a bitmap of file descriptors -*** ../bash-3.2-patched/version.c 2007-12-14 21:12:29.000000000 -0500 ---- version.c 2008-04-10 08:22:22.000000000 -0400 -*************** -*** 44,47 **** ---- 44,50 ---- - const char *sccs_version = SCCSVERSION; - -+ /* If == 31, shell compatible with bash-3.1, == 32 with bash-3.2, and so on */ -+ int shell_compatibility_level = 32; -+ - /* Functions for getting, setting, and displaying the shell version. */ - -*** ../bash-3.2-patched/builtins/shopt.def 2005-02-19 17:25:03.000000000 -0500 ---- builtins/shopt.def 2008-04-10 08:13:32.000000000 -0400 -*************** -*** 102,105 **** ---- 102,107 ---- - static int set_shellopts_after_change __P((int)); - -+ static int set_compatibility_level __P((int)); -+ - #if defined (RESTRICTED_SHELL) - static int set_restricted_shell __P((int)); -*************** -*** 107,110 **** ---- 109,113 ---- - - static int shopt_login_shell; -+ static int shopt_compat31; - - typedef int shopt_set_func_t __P((int)); -*************** -*** 122,125 **** ---- 125,129 ---- - { "cmdhist", &command_oriented_history, (shopt_set_func_t *)NULL }, - #endif -+ { "compat31", &shopt_compat31, set_compatibility_level }, - { "dotglob", &glob_dot_filenames, (shopt_set_func_t *)NULL }, - { "execfail", &no_exit_on_failed_exec, (shopt_set_func_t *)NULL }, -*************** -*** 460,463 **** ---- 464,479 ---- - } - -+ static int -+ set_compatibility_level (mode) -+ int mode; -+ { -+ /* Need to change logic here as we add more compatibility levels */ -+ if (shopt_compat31) -+ shell_compatibility_level = 31; -+ else -+ shell_compatibility_level = 32; -+ return 0; -+ } -+ - #if defined (RESTRICTED_SHELL) - /* Don't allow the value of restricted_shell to be modified. */ -*** ../bash-3.2-patched/doc/bash.1 2006-09-28 10:26:05.000000000 -0400 ---- doc/bash.1 2008-04-25 12:32:49.000000000 -0400 -*************** -*** 7978,7981 **** ---- 8200,8209 ---- - easy re-editing of multi-line commands. - .TP 8 -+ .B compat31 -+ If set, -+ .B bash -+ changes its behavior to that of version 3.1 with respect to quoted -+ arguments to the conditional command's =~ operator. -+ .TP 8 - .B dotglob - If set, -*** ../bash-20080214/doc/bashref.texi 2008-02-08 21:28:35.000000000 -0500 ---- doc/bashref.texi 2008-02-22 21:44:51.000000000 -0500 -*************** -*** 4053,4056 **** ---- 4061,4069 ---- - easy re-editing of multi-line commands. - -+ @item compat31 -+ If set, Bash -+ changes its behavior to that of version 3.1 with respect to quoted -+ arguments to the conditional command's =~ operator. -+ - @item dotglob - If set, Bash includes filenames beginning with a `.' in -*** ../bash-3.2-patched/tests/shopt.right 2005-02-19 17:46:09.000000000 -0500 ---- tests/shopt.right 2008-04-28 09:13:07.000000000 -0400 -*************** -*** 7,10 **** ---- 7,11 ---- - shopt -u checkwinsize - shopt -s cmdhist -+ shopt -u compat31 - shopt -u dotglob - shopt -u execfail -*************** -*** 54,57 **** ---- 55,59 ---- - shopt -u checkhash - shopt -u checkwinsize -+ shopt -u compat31 - shopt -u dotglob - shopt -u execfail -*************** -*** 78,81 **** ---- 80,84 ---- - checkhash off - checkwinsize off -+ compat31 off - dotglob off - execfail off - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 38 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 39 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-040 b/src/patches/bash/bash32-040 deleted file mode 100644 index 50b85bbe5..000000000 --- a/src/patches/bash/bash32-040 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-040 - -Bug-Reported-by: John McCabe-Dansted -Bug-Reference-ID: -Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/202885 - -Bug-Description: - -When using the `set' builtin to list all shell variables, the shell uses -the wrong variable when computing the length of a variable's value. - -Patch: - -*** ../bash-3.2-patched/array.c 2007-03-24 14:51:03.000000000 -0400 ---- array.c 2008-08-17 13:07:04.000000000 -0400 -*************** -*** 684,688 **** - valstr = element_value (ae) ? sh_double_quote (element_value(ae)) - : (char *)NULL; -! elen = STRLEN (indstr) + 8 + STRLEN (valstr); - RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize); - ---- 809,813 ---- - valstr = element_value (ae) ? sh_double_quote (element_value(ae)) - : (char *)NULL; -! elen = STRLEN (is) + 8 + STRLEN (valstr); - RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize); - -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 39 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 40 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-041 b/src/patches/bash/bash32-041 deleted file mode 100644 index 3c05c04ea..000000000 --- a/src/patches/bash/bash32-041 +++ /dev/null @@ -1,154 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-041 - -Bug-Reported-by: Dan Jacobson -Bug-Reference-ID: <873arjs11h.fsf@jidanni.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-02/msg00049.html - -Bug-Description: - -Bash saved and restored the value of `set -o history' while sourcing files, -preventing users from turning off history with `set +o history' in .bashrc. - -Patch: - -*** ../bash-3.2-patched/bashhist.c 2005-12-26 13:31:16.000000000 -0500 ---- bashhist.c 2008-08-17 13:07:40.000000000 -0400 -*************** -*** 81,84 **** ---- 81,85 ---- - becomes zero when we read lines from a file, for example. */ - int remember_on_history = 1; -+ int enable_history_list = 1; /* value for `set -o history' */ - - /* The number of lines that Bash has added to this history session. The -*************** -*** 235,239 **** - history_expansion_inhibited = 1; - #endif -! remember_on_history = interact != 0; - history_inhibit_expansion_function = bash_history_inhibit_expansion; - } ---- 236,240 ---- - history_expansion_inhibited = 1; - #endif -! remember_on_history = enable_history_list = interact != 0; - history_inhibit_expansion_function = bash_history_inhibit_expansion; - } -*** ../bash-3.2-patched/builtins/set.def 2006-07-27 09:41:43.000000000 -0400 ---- builtins/set.def 2008-08-14 16:33:41.000000000 -0400 -*************** -*** 190,194 **** - #endif /* BANG_HISTORY */ - #if defined (HISTORY) -! { "history", '\0', &remember_on_history, bash_set_history, (setopt_get_func_t *)NULL }, - #endif - { "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL }, ---- 198,202 ---- - #endif /* BANG_HISTORY */ - #if defined (HISTORY) -! { "history", '\0', &enable_history_list, bash_set_history, (setopt_get_func_t *)NULL }, - #endif - { "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL }, -*************** -*** 382,385 **** ---- 390,394 ---- - if (on_or_off == FLAG_ON) - { -+ enable_history_list = 1; - bash_history_enable (); - if (history_lines_this_session == 0) -*************** -*** 387,392 **** - } - else -! bash_history_disable (); -! return (1 - remember_on_history); - } - #endif ---- 396,404 ---- - } - else -! { -! enable_history_list = 0; -! bash_history_disable (); -! } -! return (1 - enable_history_list); - } - #endif -*************** -*** 566,570 **** - { - #if defined (HISTORY) -! remember_on_history = 1; - #endif - ignoreeof = 0; ---- 578,582 ---- - { - #if defined (HISTORY) -! remember_on_history = enable_history_list = 1; - #endif - ignoreeof = 0; -*** ../bash-3.2-patched/builtins/evalstring.c 2006-07-28 15:12:16.000000000 -0400 ---- builtins/evalstring.c 2008-11-10 21:17:16.000000000 -0500 -*************** -*** 68,71 **** ---- 68,79 ---- - static int cat_file __P((REDIRECT *)); - -+ #if defined (HISTORY) -+ static void -+ set_history_remembering () -+ { -+ remember_on_history = enable_history_list; -+ } -+ #endif -+ - /* How to force parse_and_execute () to clean up after itself. */ - void -*************** -*** 116,120 **** - - #if defined (HISTORY) -! unwind_protect_int (remember_on_history); /* can be used in scripts */ - # if defined (BANG_HISTORY) - if (interactive_shell) ---- 124,131 ---- - - #if defined (HISTORY) -! if (parse_and_execute_level == 0) -! add_unwind_protect (set_history_remembering, (char *)NULL); -! else -! unwind_protect_int (remember_on_history); /* can be used in scripts */ - # if defined (BANG_HISTORY) - if (interactive_shell) -*** ../bash-3.2-patched/bashhist.h 2005-07-01 15:44:41.000000000 -0400 ---- bashhist.h 2008-08-17 12:51:07.000000000 -0400 -*************** -*** 32,35 **** ---- 32,38 ---- - - extern int remember_on_history; -+ extern int enable_history_list; /* value for `set -o history' */ -+ extern int literal_history; /* controlled by `shopt lithist' */ -+ extern int force_append_history; - extern int history_lines_this_session; - extern int history_lines_in_file; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 40 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 41 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-042 b/src/patches/bash/bash32-042 deleted file mode 100644 index 4c9f4d6df..000000000 --- a/src/patches/bash/bash32-042 +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-042 - -Bug-Reported-by: Archimerged Ark Submedes -Bug-Reference-ID: <5ba4bef00804182116g65ff71e0qdffcf672f205e708@mail.gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-04/msg00041.html - -Bug-Description: - -An operator precedence error prevented the bash arithmetic evaluator from -parsing conditional commands correctly. - -Patch: - -*** ../bash-3.2-patched/expr.c 2007-12-13 22:30:43.000000000 -0500 ---- expr.c 2008-08-17 13:09:59.000000000 -0400 -*************** -*** 521,525 **** - noeval++; - } -! val2 = explor (); - if (set_noeval) - noeval--; ---- 521,526 ---- - noeval++; - } -! -! val2 = expcond (); - if (set_noeval) - noeval--; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 41 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 42 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-043 b/src/patches/bash/bash32-043 deleted file mode 100644 index 5a51843d2..000000000 --- a/src/patches/bash/bash32-043 +++ /dev/null @@ -1,62 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-043 - -Bug-Reported-by: Morita Sho -Bug-Reference-ID: -Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=478096 - -Bug-Description: - -Side effects caused by setting function-local versions of variables bash -handles specially persisted after the function returned. - -Patch: - -*** ../bash-3.2-patched/variables.c 2007-08-25 13:47:05.000000000 -0400 ---- variables.c 2008-11-09 17:47:31.000000000 -0500 -*************** -*** 3459,3465 **** - var->attributes &= ~(att_tempvar|att_propagate); - else -! shell_variables->flags |= VC_HASTMPVAR; - v->attributes |= var->attributes; - } - - dispose_variable (var); ---- 3771,3779 ---- - var->attributes &= ~(att_tempvar|att_propagate); - else -! shell_variables->flags |= VC_HASTMPVAR; - v->attributes |= var->attributes; - } -+ else -+ stupidly_hack_special_variables (var->name); /* XXX */ - - dispose_variable (var); -*************** -*** 3548,3551 **** ---- 3862,3867 ---- - v->attributes |= var->attributes; - } -+ else -+ stupidly_hack_special_variables (var->name); /* XXX */ - - dispose_variable (var); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 42 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 43 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-044 b/src/patches/bash/bash32-044 deleted file mode 100644 index 3e7a392d4..000000000 --- a/src/patches/bash/bash32-044 +++ /dev/null @@ -1,150 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-044 - -Bug-Reported-by: slinkp -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html - -Bug-Description: - -The presence of invisible characters in a prompt longer than the screenwidth -with invisible characters on the first and last prompt lines caused readline -to place the cursor in the wrong physical location. - -Patch: - -*** ../bash-3.2-patched/lib/readline/display.c 2007-12-14 21:12:40.000000000 -0500 ---- lib/readline/display.c 2008-10-23 09:39:46.000000000 -0400 -*************** -*** 911,914 **** ---- 944,951 ---- - OFFSET (which has already been calculated above). */ - -+ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) -+ #define WRAP_OFFSET(line, offset) ((line == 0) \ -+ ? (offset ? INVIS_FIRST() : 0) \ -+ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) - #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) - #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) -*************** -*** 945,949 **** - _rl_last_c_pos > wrap_offset && - o_cpos < prompt_last_invisible) -! _rl_last_c_pos -= wrap_offset; - - /* If this is the line with the prompt, we might need to ---- 982,992 ---- - _rl_last_c_pos > wrap_offset && - o_cpos < prompt_last_invisible) -! _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ -! else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && -! (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && -! cpos_adjusted == 0 && -! _rl_last_c_pos != o_cpos && -! _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) -! _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); - - /* If this is the line with the prompt, we might need to -*************** -*** 1205,1209 **** - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; ---- 1264,1268 ---- - { - register char *ofd, *ols, *oe, *nfd, *nls, *ne; -! int temp, lendiff, wsatend, od, nd, twidth, o_cpos; - int current_invis_chars; - int col_lendiff, col_temp; -*************** -*** 1221,1225 **** - temp = _rl_last_c_pos; - else -! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); - if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode - && _rl_last_v_pos == current_line - 1) ---- 1280,1284 ---- - temp = _rl_last_c_pos; - else -! temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); - if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode - && _rl_last_v_pos == current_line - 1) -*************** -*** 1587,1599 **** - { - _rl_output_some_chars (nfd + lendiff, temp - lendiff); -- #if 1 - /* XXX -- this bears closer inspection. Fixes a redisplay bug - reported against bash-3.0-alpha by Andreas Schwab involving - multibyte characters and prompt strings with invisible - characters, but was previously disabled. */ -! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); -! #else -! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); -! #endif - } - } ---- 1648,1660 ---- - { - _rl_output_some_chars (nfd + lendiff, temp - lendiff); - /* XXX -- this bears closer inspection. Fixes a redisplay bug - reported against bash-3.0-alpha by Andreas Schwab involving - multibyte characters and prompt strings with invisible - characters, but was previously disabled. */ -! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -! twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); -! else -! twidth = temp - lendiff; -! _rl_last_c_pos += twidth; - } - } -*************** -*** 1789,1793 **** - int cpos, dpos; /* current and desired cursor positions */ - -! woff = W_OFFSET (_rl_last_v_pos, wrap_offset); - cpos = _rl_last_c_pos; - #if defined (HANDLE_MULTIBYTE) ---- 1850,1854 ---- - int cpos, dpos; /* current and desired cursor positions */ - -! woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); - cpos = _rl_last_c_pos; - #if defined (HANDLE_MULTIBYTE) -*************** -*** 1803,1807 **** - prompt string, since they're both buffer indices and DPOS is a - desired display position. */ -! if (new > prompt_last_invisible) /* XXX - don't use woff here */ - { - dpos -= woff; ---- 1864,1872 ---- - prompt string, since they're both buffer indices and DPOS is a - desired display position. */ -! if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ -! (prompt_physical_chars > _rl_screenwidth && -! _rl_last_v_pos == prompt_last_screen_line && -! wrap_offset != woff && -! new > (prompt_last_invisible-_rl_screenwidth-wrap_offset))) - { - dpos -= woff; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 43 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 44 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-045 b/src/patches/bash/bash32-045 deleted file mode 100644 index 68b91ffe1..000000000 --- a/src/patches/bash/bash32-045 +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-045 - -Bug-Reported-by: Roman Rakus -Bug-Reference-ID: <4864B4A0.1060402@redhat.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-06/msg00098.html - -Bug-Description: - -When short-circuiting execution due to the `break' or `continue' builtins, -bash did not preserve the value of $?. - -Patch: - -*** ../bash-3.2-patched/execute_cmd.c 2008-04-28 22:00:24.000000000 -0400 ---- execute_cmd.c 2008-10-18 14:35:03.000000000 -0400 -*************** -*** 502,507 **** ---- 514,526 ---- - volatile int save_line_number; - -+ #if 0 - if (command == 0 || breaking || continuing || read_but_dont_execute) - return (EXECUTION_SUCCESS); -+ #else -+ if (breaking || continuing) -+ return (last_command_exit_value); -+ if (command == 0 || read_but_dont_execute) -+ return (EXECUTION_SUCCESS); -+ #endif - - QUIT; -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 44 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 45 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-046 b/src/patches/bash/bash32-046 deleted file mode 100644 index 78aaf0176..000000000 --- a/src/patches/bash/bash32-046 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-046 - -Bug-Reported-by: Wang Xin -Bug-Reference-ID: <9a73e1570807062042ide16698m10e1b18036c95592@mail.gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-07/msg00014.html - -Bug-Description: - -Bash did not compute the length of multibyte characters correctly when -performing array element length references (e.g., ${#var[subscript]}). - -Patch: - -*** /usr/src/local/bash/bash-3.2-patched/subst.c 2008-04-28 22:00:20.000000000 -0400 ---- subst.c 2008-11-10 22:02:38.000000000 -0500 -*************** -*** 4813,4817 **** - t = (ind == 0) ? value_cell (var) : (char *)NULL; - -! len = STRLEN (t); - return (len); - } ---- 4813,4817 ---- - t = (ind == 0) ? value_cell (var) : (char *)NULL; - -! len = MB_STRLEN (t); - return (len); - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 45 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 46 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-047 b/src/patches/bash/bash32-047 deleted file mode 100644 index b8272b1ee..000000000 --- a/src/patches/bash/bash32-047 +++ /dev/null @@ -1,65 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-047 - -Bug-Reported-by: Roman Rakus -Bug-Reference-ID: <48A89EBC.906@redhat.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-08/msg00026.html - -Bug-Description: - -When using the `.' (source) builtin, under certain circumstances bash was -too careful in discarding state to preserve internal consistency. One -effect was that assignments to readonly variables would cause entire scripts -to be aborted instead of execution of the offending command. This behavior -was introduced by bash-3.2 patch 20. - -Patch: - -*** /usr/src/local/chet/src/bash/bash-3.2-patched/subst.c 2008-04-29 21:24:55.000000000 -0400 ---- subst.c 2008-11-13 17:44:25.000000000 -0500 -*************** -*** 138,142 **** - extern int last_command_exit_value, last_command_exit_signal; - extern int subshell_environment; -! extern int subshell_level; - extern int eof_encountered; - extern int return_catch_flag, return_catch_value; ---- 138,142 ---- - extern int last_command_exit_value, last_command_exit_signal; - extern int subshell_environment; -! extern int subshell_level, parse_and_execute_level; - extern int eof_encountered; - extern int return_catch_flag, return_catch_value; -*************** -*** 7673,7677 **** - expanding_redir = 0; - -! top_level_cleanup (); /* from sig.c */ - - jump_to_top_level (v); ---- 7673,7679 ---- - expanding_redir = 0; - -! if (parse_and_execute_level == 0) -! top_level_cleanup (); /* from sig.c */ -! - - jump_to_top_level (v); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 46 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 47 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-048 b/src/patches/bash/bash32-048 deleted file mode 100644 index 551dadefe..000000000 --- a/src/patches/bash/bash32-048 +++ /dev/null @@ -1,56 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-048 - -Bug-Reported-by: Steffen Kiess -Bug-Reference-ID: <1223929957.5383.6.camel@fips> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-10/msg00047.html - -Bug-Description: - -When invoked as `bash -c', bash did not execute an EXIT trap when the last -command in the executed list was a command run from the file system. - -Patch: - -*** /Users/chet/src/bash/bash-3.2-patched/builtins/evalstring.c 2006-07-28 15:12:16.000000000 -0400 ---- builtins/evalstring.c 2008-11-13 18:38:45.000000000 -0500 -*************** -*** 249,252 **** ---- 249,253 ---- - * we're not running a trap AND - * we have parsed the full command (string == '\0') AND -+ * we're not going to run the exit trap AND - * we have a simple command without redirections AND - * the command is not being timed AND -*************** -*** 259,263 **** - *bash_input.location.string == '\0' && - command->type == cm_simple && -! !command->redirects && !command->value.Simple->redirects && - ((command->flags & CMD_TIME_PIPELINE) == 0) && - ((command->flags & CMD_INVERT_RETURN) == 0)) ---- 260,265 ---- - *bash_input.location.string == '\0' && - command->type == cm_simple && -! signal_is_trapped (EXIT_TRAP) == 0 && -! command->redirects == 0 && command->value.Simple->redirects == 0 && - ((command->flags & CMD_TIME_PIPELINE) == 0) && - ((command->flags & CMD_INVERT_RETURN) == 0)) -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 47 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 48 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-049 b/src/patches/bash/bash32-049 deleted file mode 100644 index 469c4c891..000000000 --- a/src/patches/bash/bash32-049 +++ /dev/null @@ -1,64 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-049 - -Bug-Reported-by: Len Lattanzi -Bug-Reference-ID: <52B1297F-6675-45CC-B63E-24745337D006@apple.com> -Bug-Reference-URL: - -Bug-Description: - -On systems where mbrtowc() returns -2 when passed a length argument with -value 0, when using a multibyte locale, Readline's emacs-mode forward-char -at the end of a line will leave the point beyond the end of the line. - -Patch: - -*** ../bash-3.2-patched/lib/readline/mbutil.c 2009-05-29 23:09:26.000000000 -0400 ---- lib/readline/mbutil.c 2009-05-29 23:10:12.000000000 -0400 -*************** -*** 78,82 **** - int seed, count, find_non_zero; - { -! size_t tmp; - mbstate_t ps; - int point; ---- 78,82 ---- - int seed, count, find_non_zero; - { -! size_t tmp, len; - mbstate_t ps; - int point; -*************** -*** 99,103 **** - while (count > 0) - { -! tmp = mbrtowc (&wc, string+point, strlen(string + point), &ps); - if (MB_INVALIDCH ((size_t)tmp)) - { ---- 99,106 ---- - while (count > 0) - { -! len = strlen (string + point); -! if (len == 0) -! break; -! tmp = mbrtowc (&wc, string+point, len, &ps); - if (MB_INVALIDCH ((size_t)tmp)) - { -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 48 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 49 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-050 b/src/patches/bash/bash32-050 deleted file mode 100644 index aef537e18..000000000 --- a/src/patches/bash/bash32-050 +++ /dev/null @@ -1,56 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-050 - -Bug-Reported-by: Jan Hnatek -Bug-Reference-ID: <4A44991F.8010005@sun.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-06/msg00084.html - -Bug-Description: - -On systems where mbrtowc() returns -2 when passed a length argument with -value 0, when using a multibyte locale, Readline's emacs-mode forward-char -at the end of a line will leave the point beyond the end of the line. - -Patch: - -*** ../bash-3.2-patched/lib/readline/mbutil.c 2009-06-16 11:26:50.000000000 -0400 ---- lib/readline/mbutil.c 2009-01-04 14:32:33.000000000 -0500 -*************** -*** 132,141 **** - { - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -! while (tmp > 0 && wcwidth (wc) == 0) - { - point += tmp; - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -- if (MB_NULLWCH (tmp) || MB_INVALIDCH (tmp)) -- break; - } - } ---- 130,137 ---- - { - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); -! while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && wcwidth (wc) == 0) - { - point += tmp; - tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); - } - } -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 49 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 50 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash32-051 b/src/patches/bash/bash32-051 deleted file mode 100644 index 404fbd646..000000000 --- a/src/patches/bash/bash32-051 +++ /dev/null @@ -1,46 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 3.2 -Patch-ID: bash32-051 - -Bug-Reported-by: werner@suse.de -Bug-Reference-ID: <201002251238.o1PCcYcg016893@boole.suse.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-02/msg00132.html - -Bug-Description: - -When the `read' builtin times out after the timeout specified with -t is -exceeded, it does not reset the flags that tell signal handlers to process -signals immediately instead of deferring their handling. This can result -in unsafe functions being called from signal handlers, which can cause bash -to hang or dump core. - -Patch: - -*** ../bash-3.2-patched/builtins/read.def 2008-04-29 21:25:00.000000000 -0400 ---- builtins/read.def 2010-03-17 09:50:51.000000000 -0400 -*************** -*** 327,330 **** ---- 327,332 ---- - if (code) - { -+ interrupt_immediately--; -+ terminate_immediately = 0; - run_unwind_frame ("read_builtin"); - return (EXECUTION_FAILURE); -*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006 ---- patchlevel.h Mon Oct 16 14:22:54 2006 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 50 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 51 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-001 b/src/patches/bash/bash43-001 new file mode 100644 index 000000000..ea1c6b265 --- /dev/null +++ b/src/patches/bash/bash43-001 @@ -0,0 +1,58 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-001 + +Bug-Reported-by: NBaH +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html + +Bug-Description: + +A missing check for a valid option prevented `test -R' from working. There +is another problem that causes bash to look up the wrong variable name when +processing the argument to `test -R'. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/test.c 2014-02-04 16:52:58.000000000 -0500 +--- test.c 2014-02-28 21:22:44.000000000 -0500 +*************** +*** 647,652 **** + + case 'R': +! v = find_variable (arg); +! return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE); + } + +--- 647,652 ---- + + case 'R': +! v = find_variable_noref (arg); +! return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE); + } + +*************** +*** 724,727 **** +--- 724,728 ---- + case 'u': case 'v': case 'w': case 'x': case 'z': + case 'G': case 'L': case 'O': case 'S': case 'N': ++ case 'R': + return (1); + } +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 0 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-002 b/src/patches/bash/bash43-002 new file mode 100644 index 000000000..735b7b81a --- /dev/null +++ b/src/patches/bash/bash43-002 @@ -0,0 +1,62 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-002 + +Bug-Reported-by: Moe Tunes +Bug-Reference-ID: <53103F49.3070100@gmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html + +Bug-Description: + +A change to save state while running the DEBUG trap caused pipelines to hang +on systems which need process group synchronization while building pipelines. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/trap.c 2014-02-05 10:03:21.000000000 -0500 +--- trap.c 2014-02-28 09:51:43.000000000 -0500 +*************** +*** 921,925 **** + + #if defined (JOB_CONTROL) +! save_pipeline (1); /* XXX only provides one save level */ + #endif + +--- 921,926 ---- + + #if defined (JOB_CONTROL) +! if (sig != DEBUG_TRAP) /* run_debug_trap does this */ +! save_pipeline (1); /* XXX only provides one save level */ + #endif + +*************** +*** 941,945 **** + + #if defined (JOB_CONTROL) +! restore_pipeline (1); + #endif + +--- 942,947 ---- + + #if defined (JOB_CONTROL) +! if (sig != DEBUG_TRAP) /* run_debug_trap does this */ +! restore_pipeline (1); + #endif + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-003 b/src/patches/bash/bash43-003 new file mode 100644 index 000000000..0f32f410d --- /dev/null +++ b/src/patches/bash/bash43-003 @@ -0,0 +1,48 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-003 + +Bug-Reported-by: Anatol Pomozov +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html + +Bug-Description: + +When in callback mode, some readline commands can cause readline to seg +fault by passing invalid contexts to callback functions. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400 +--- lib/readline/readline.c 2014-03-10 14:15:02.000000000 -0400 +*************** +*** 745,749 **** + + RL_CHECK_SIGNALS (); +! if (r == 0) /* success! */ + { + _rl_keyseq_chain_dispose (); +--- 745,750 ---- + + RL_CHECK_SIGNALS (); +! /* We only treat values < 0 specially to simulate recursion. */ +! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */ + { + _rl_keyseq_chain_dispose (); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-004 b/src/patches/bash/bash43-004 new file mode 100644 index 000000000..010f04a2a --- /dev/null +++ b/src/patches/bash/bash43-004 @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-004 + +Bug-Reported-by: Daan van Rossum +Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu> +Bug-Reference-URL: + +Bug-Description: + +The `.' command in vi mode cannot undo multi-key commands beginning with +`c', `d', and `y' (command plus motion specifier). + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.000000000 -0400 +--- lib/readline/readline.c 2014-03-07 15:20:33.000000000 -0500 +*************** +*** 965,969 **** + if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && + key != ANYOTHERKEY && +! rl_key_sequence_length == 1 && /* XXX */ + _rl_vi_textmod_command (key)) + _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); +--- 965,969 ---- + if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && + key != ANYOTHERKEY && +! _rl_dispatching_keymap == vi_movement_keymap && + _rl_vi_textmod_command (key)) + _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-005 b/src/patches/bash/bash43-005 new file mode 100644 index 000000000..bcd40697c --- /dev/null +++ b/src/patches/bash/bash43-005 @@ -0,0 +1,63 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-005 + +Bug-Reported-by: David Sines +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html + +Bug-Description: + +When in Posix mode, bash did not correctly interpret the ANSI-C-style +$'...' quoting mechanism when performing pattern substitution word +expansions within double quotes. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/parse.y 2014-02-11 09:42:10.000000000 -0500 +--- parse.y 2014-03-07 20:57:15.000000000 -0500 +*************** +*** 3399,3403 **** + unescaped double-quotes or single-quotes, if any, shall occur." */ + /* This was changed in Austin Group Interp 221 */ +! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') + continue; + +--- 3399,3403 ---- + unescaped double-quotes or single-quotes, if any, shall occur." */ + /* This was changed in Austin Group Interp 221 */ +! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') + continue; + +*** ../bash-4.3/y.tab.c 2014-02-11 10:57:47.000000000 -0500 +--- y.tab.c 2014-03-28 10:41:15.000000000 -0400 +*************** +*** 5711,5715 **** + unescaped double-quotes or single-quotes, if any, shall occur." */ + /* This was changed in Austin Group Interp 221 */ +! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') + continue; + +--- 5711,5715 ---- + unescaped double-quotes or single-quotes, if any, shall occur." */ + /* This was changed in Austin Group Interp 221 */ +! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') + continue; + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-006 b/src/patches/bash/bash43-006 new file mode 100644 index 000000000..24ff057a5 --- /dev/null +++ b/src/patches/bash/bash43-006 @@ -0,0 +1,48 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-006 + +Bug-Reported-by: Eduardo A . Bustamante Lopez +Bug-Reference-ID: <20140228170013.GA16015@dualbus.me> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html + +Bug-Description: + +A shell that started with job control active but was not interactive left +the terminal in the wrong process group when exiting, causing its parent +shell to get a stop signal when it attempted to read from the terminal. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/jobs.c 2014-01-10 09:05:34.000000000 -0500 +--- jobs.c 2014-03-02 18:05:09.000000000 -0500 +*************** +*** 4375,4379 **** + end_job_control () + { +! if (interactive_shell) /* XXX - should it be interactive? */ + { + terminate_stopped_jobs (); +--- 4375,4379 ---- + end_job_control () + { +! if (interactive_shell || job_control) /* XXX - should it be just job_control? */ + { + terminate_stopped_jobs (); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 6 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-007 b/src/patches/bash/bash43-007 new file mode 100644 index 000000000..0d62c9ec6 --- /dev/null +++ b/src/patches/bash/bash43-007 @@ -0,0 +1,50 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-007 + +Bug-Reported-by: geir.hauge@gmail.com +Bug-Reference-ID: <20140318093650.B181C1C5B0B@gina.itea.ntnu.no> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00095.html + +Bug-Description: + +Using compound assignments for associative arrays like + +assoc=( [x]= [y]=bar ) + +left the value corresponding to the key `x' NULL. This caused subsequent +lookups to interpret it as unset. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/arrayfunc.c 2013-08-02 16:19:59.000000000 -0400 +--- arrayfunc.c 2014-03-18 11:08:15.000000000 -0400 +*************** +*** 598,601 **** +--- 598,606 ---- + { + val = expand_assignment_string_to_string (val, 0); ++ if (val == 0) ++ { ++ val = (char *)xmalloc (1); ++ val[0] = '\0'; /* like do_assignment_internal */ ++ } + free_val = 1; + } +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 6 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 7 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-008 b/src/patches/bash/bash43-008 new file mode 100644 index 000000000..0ae7c9522 --- /dev/null +++ b/src/patches/bash/bash43-008 @@ -0,0 +1,188 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-008 + +Bug-Reported-by: Stephane Chazelas +Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html + +Bug-Description: + +Some extended glob patterns incorrectly matched filenames with a leading +dot, regardless of the setting of the `dotglob' option. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3/lib/glob/gmisc.c 2013-10-28 14:45:25.000000000 -0400 +--- lib/glob/gmisc.c 2014-03-19 09:16:08.000000000 -0400 +*************** +*** 211,214 **** +--- 211,215 ---- + case '!': + case '@': ++ case '?': + return (pat[1] == LPAREN); + default: +*** ../bash-4.3/lib/glob/glob.c 2014-01-31 21:43:51.000000000 -0500 +--- lib/glob/glob.c 2014-03-20 09:01:26.000000000 -0400 +*************** +*** 180,202 **** + int flags; + { +! char *pp, *pe, *t; +! int n, r; + + pp = pat + 2; +! pe = pp + strlen (pp) - 1; /*(*/ +! if (*pe != ')') +! return 0; +! if ((t = strchr (pp, '|')) == 0) /* easy case first */ + { + *pe = '\0'; + r = skipname (pp, dname, flags); /*(*/ + *pe = ')'; + return r; + } + while (t = glob_patscan (pp, pe, '|')) + { + n = t[-1]; + t[-1] = '\0'; + r = skipname (pp, dname, flags); + t[-1] = n; + if (r == 0) /* if any pattern says not skip, we don't skip */ +--- 180,215 ---- + int flags; + { +! char *pp, *pe, *t, *se; +! int n, r, negate; + ++ negate = *pat == '!'; + pp = pat + 2; +! se = pp + strlen (pp) - 1; /* end of string */ +! pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ +! /* we should check for invalid extglob pattern here */ +! /* if pe != se we have more of the pattern at the end of the extglob +! pattern. Check the easy case first ( */ +! if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0) + { + *pe = '\0'; ++ #if defined (HANDLE_MULTIBYTE) ++ r = mbskipname (pp, dname, flags); ++ #else + r = skipname (pp, dname, flags); /*(*/ ++ #endif + *pe = ')'; + return r; + } ++ ++ /* check every subpattern */ + while (t = glob_patscan (pp, pe, '|')) + { + n = t[-1]; + t[-1] = '\0'; ++ #if defined (HANDLE_MULTIBYTE) ++ r = mbskipname (pp, dname, flags); ++ #else + r = skipname (pp, dname, flags); ++ #endif + t[-1] = n; + if (r == 0) /* if any pattern says not skip, we don't skip */ +*************** +*** 205,219 **** + } /*(*/ + +! if (pp == pe) /* glob_patscan might find end of pattern */ + return r; + +! *pe = '\0'; +! # if defined (HANDLE_MULTIBYTE) +! r = mbskipname (pp, dname, flags); /*(*/ +! # else +! r = skipname (pp, dname, flags); /*(*/ +! # endif +! *pe = ')'; +! return r; + } + #endif +--- 218,227 ---- + } /*(*/ + +! /* glob_patscan might find end of pattern */ +! if (pp == se) + return r; + +! /* but if it doesn't then we didn't match a leading dot */ +! return 0; + } + #endif +*************** +*** 278,289 **** + { + #if EXTENDED_GLOB +! wchar_t *pp, *pe, *t, n; +! int r; + + pp = pat + 2; +! pe = pp + wcslen (pp) - 1; /*(*/ +! if (*pe != L')') +! return 0; +! if ((t = wcschr (pp, L'|')) == 0) + { + *pe = L'\0'; +--- 286,298 ---- + { + #if EXTENDED_GLOB +! wchar_t *pp, *pe, *t, n, *se; +! int r, negate; + ++ negate = *pat == L'!'; + pp = pat + 2; +! se = pp + wcslen (pp) - 1; /*(*/ +! pe = glob_patscan_wc (pp, se, 0); +! +! if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0) + { + *pe = L'\0'; +*************** +*** 292,295 **** +--- 301,306 ---- + return r; + } ++ ++ /* check every subpattern */ + while (t = glob_patscan_wc (pp, pe, '|')) + { +*************** +*** 306,313 **** + return r; + +! *pe = L'\0'; +! r = wchkname (pp, dname); /*(*/ +! *pe = L')'; +! return r; + #else + return (wchkname (pat, dname)); +--- 317,322 ---- + return r; + +! /* but if it doesn't then we didn't match a leading dot */ +! return 0; + #else + return (wchkname (pat, dname)); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 7 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 8 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-009 b/src/patches/bash/bash43-009 new file mode 100644 index 000000000..015835cde --- /dev/null +++ b/src/patches/bash/bash43-009 @@ -0,0 +1,64 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-009 + +Bug-Reported-by: Matthias Klose +Bug-Reference-ID: <53346FC8.6090005@debian.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00171.html + +Bug-Description: + +There is a problem with unsigned sign extension when attempting to reallocate +the input line when it is fewer than 3 characters long and there has been a +history expansion. The sign extension causes the shell to not reallocate the +line, which results in a segmentation fault when it writes past the end. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/parse.y 2014-02-11 09:42:10.000000000 -0500 +--- parse.y 2014-03-27 16:33:29.000000000 -0400 +*************** +*** 2425,2429 **** + if (shell_input_line_terminator != EOF) + { +! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3) + shell_input_line = (char *)xrealloc (shell_input_line, + 1 + (shell_input_line_size += 2)); +--- 2425,2429 ---- + if (shell_input_line_terminator != EOF) + { +! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size)) + shell_input_line = (char *)xrealloc (shell_input_line, + 1 + (shell_input_line_size += 2)); +*** ../bash-4.3-patched/y.tab.c 2014-03-28 11:17:06.000000000 -0400 +--- y.tab.c 2014-04-07 11:48:31.000000000 -0400 +*************** +*** 4737,4741 **** + if (shell_input_line_terminator != EOF) + { +! if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3) + shell_input_line = (char *)xrealloc (shell_input_line, + 1 + (shell_input_line_size += 2)); +--- 4737,4741 ---- + if (shell_input_line_terminator != EOF) + { +! if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size)) + shell_input_line = (char *)xrealloc (shell_input_line, + 1 + (shell_input_line_size += 2)); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 8 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 9 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-010 b/src/patches/bash/bash43-010 new file mode 100644 index 000000000..835a96ead --- /dev/null +++ b/src/patches/bash/bash43-010 @@ -0,0 +1,157 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-010 + +Bug-Reported-by: Albert Shih +Bug-Reference-ID: Wed, 5 Mar 2014 23:01:40 +0100 +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html + +Bug-Description: + +Patch (apply with `patch -p0'): + +This patch changes the behavior of programmable completion to compensate +for two assumptions made by the bash-completion package. Bash-4.3 changed +to dequote the argument to programmable completion only under certain +circumstances, to make the behavior of compgen more consistent when run +from the command line -- closer to the behavior when run by a shell function +run as part of programmable completion. Bash-completion can pass quoted +arguments to compgen when the original word to be completed was not quoted, +expecting programmable completion to dequote the word before attempting +completion. + +This patch fixes two cases: + +1. An empty string that bash-completion passes to compgen as a quoted null + string (''). + +2. An unquoted word that bash-completion quotes using single quotes or + backslashes before passing it to compgen. + +In these cases, since readline did not detect a quote character in the original +word to be completed, bash-4.3 + +*** ../bash-4.3/externs.h 2014-01-02 14:58:20.000000000 -0500 +--- externs.h 2014-03-13 14:42:57.000000000 -0400 +*************** +*** 325,328 **** +--- 325,329 ---- + extern char *sh_backslash_quote_for_double_quotes __P((char *)); + extern int sh_contains_shell_metas __P((char *)); ++ extern int sh_contains_quotes __P((char *)); + + /* declarations for functions defined in lib/sh/spell.c */ +*** ../bash-4.3/lib/sh/shquote.c 2013-03-31 21:53:32.000000000 -0400 +--- lib/sh/shquote.c 2014-03-13 14:42:57.000000000 -0400 +*************** +*** 312,313 **** +--- 312,327 ---- + return (0); + } ++ ++ int ++ sh_contains_quotes (string) ++ char *string; ++ { ++ char *s; ++ ++ for (s = string; s && *s; s++) ++ { ++ if (*s == '\'' || *s == '"' || *s == '\\') ++ return 1; ++ } ++ return 0; ++ } +*** ../bash-4.3/pcomplete.c 2013-08-26 15:23:45.000000000 -0400 +--- pcomplete.c 2014-03-25 17:23:23.000000000 -0400 +*************** +*** 184,187 **** +--- 184,188 ---- + COMPSPEC *pcomp_curcs; + const char *pcomp_curcmd; ++ const char *pcomp_curtxt; + + #ifdef DEBUG +*************** +*** 754,757 **** +--- 755,784 ---- + dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); + } ++ /* Intended to solve a mismatched assumption by bash-completion. If ++ the text to be completed is empty, but bash-completion turns it into ++ a quoted string ('') assuming that this code will dequote it before ++ calling readline, do the dequoting. */ ++ else if (iscompgen && iscompleting && ++ pcomp_curtxt && *pcomp_curtxt == 0 && ++ text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 && ++ rl_filename_dequoting_function) ++ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); ++ /* Another mismatched assumption by bash-completion. If compgen is being ++ run as part of bash-completion, and the argument to compgen is not ++ the same as the word originally passed to the programmable completion ++ code, dequote the argument if it has quote characters. It's an ++ attempt to detect when bash-completion is quoting its filename ++ argument before calling compgen. */ ++ /* We could check whether gen_shell_function_matches is in the call ++ stack by checking whether the gen-shell-function-matches tag is in ++ the unwind-protect stack, but there's no function to do that yet. ++ We could simply check whether we're executing in a function by ++ checking variable_context, and may end up doing that. */ ++ else if (iscompgen && iscompleting && rl_filename_dequoting_function && ++ pcomp_curtxt && text && ++ STREQ (pcomp_curtxt, text) == 0 && ++ variable_context && ++ sh_contains_quotes (text)) /* guess */ ++ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); + else + dfn = savestring (text); +*************** +*** 1523,1527 **** + { + COMPSPEC *cs, *oldcs; +! const char *oldcmd; + STRINGLIST *ret; + +--- 1550,1554 ---- + { + COMPSPEC *cs, *oldcs; +! const char *oldcmd, *oldtxt; + STRINGLIST *ret; + +*************** +*** 1546,1552 **** +--- 1573,1581 ---- + oldcs = pcomp_curcs; + oldcmd = pcomp_curcmd; ++ oldtxt = pcomp_curtxt; + + pcomp_curcs = cs; + pcomp_curcmd = cmd; ++ pcomp_curtxt = word; + + ret = gen_compspec_completions (cs, cmd, word, start, end, foundp); +*************** +*** 1554,1557 **** +--- 1583,1587 ---- + pcomp_curcs = oldcs; + pcomp_curcmd = oldcmd; ++ pcomp_curtxt = oldtxt; + + /* We need to conditionally handle setting *retryp here */ +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 9 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 10 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-011 b/src/patches/bash/bash43-011 new file mode 100644 index 000000000..cdc1572ee --- /dev/null +++ b/src/patches/bash/bash43-011 @@ -0,0 +1,49 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-011 + +Bug-Reported-by: Egmont Koblinger +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html + +Bug-Description: + +The signal handling changes to bash and readline (to avoid running any code +in a signal handler context) cause the cursor to be placed on the wrong +line of a multi-line command after a ^C interrupts editing. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/lib/readline/display.c 2013-12-27 13:10:56.000000000 -0500 +--- lib/readline/display.c 2014-03-27 11:52:45.000000000 -0400 +*************** +*** 2678,2682 **** + if (_rl_echoing_p) + { +! _rl_move_vert (_rl_vis_botlin); + _rl_vis_botlin = 0; + fflush (rl_outstream); +--- 2678,2683 ---- + if (_rl_echoing_p) + { +! if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */ +! _rl_move_vert (_rl_vis_botlin); + _rl_vis_botlin = 0; + fflush (rl_outstream); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 10 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 11 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-012 b/src/patches/bash/bash43-012 new file mode 100644 index 000000000..176fa15bd --- /dev/null +++ b/src/patches/bash/bash43-012 @@ -0,0 +1,43 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-012 + +Bug-Reported-by: Eduardo A. Bustamante López +Bug-Reference-ID: <5346B54C.4070205@case.edu> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00051.html + +Bug-Description: + +When a SIGCHLD trap runs a command containing a shell builtin while +a script is running `wait' to wait for all running children to complete, +the SIGCHLD trap will not be run once for each child that terminates. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/jobs.c 2014-03-28 10:54:19.000000000 -0400 +--- jobs.c 2014-04-15 08:47:03.000000000 -0400 +*************** +*** 3598,3601 **** +--- 3598,3602 ---- + unwind_protect_pointer (the_pipeline); + unwind_protect_pointer (subst_assign_varlist); ++ unwind_protect_pointer (this_shell_builtin); + + /* We have to add the commands this way because they will be run +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 11 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 12 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-013 b/src/patches/bash/bash43-013 new file mode 100644 index 000000000..8f4006b48 --- /dev/null +++ b/src/patches/bash/bash43-013 @@ -0,0 +1,66 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-013 + +Bug-Reported-by: +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html + +Bug-Description: + +Using reverse-i-search when horizontal scrolling is enabled does not redisplay +the entire line containing the successful search results. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/lib/readline/display.c 2014-04-08 18:19:36.000000000 -0400 +--- lib/readline/display.c 2014-04-20 18:32:52.000000000 -0400 +*************** +*** 1638,1642 **** + the spot of first difference is before the end of the invisible chars, + lendiff needs to be adjusted. */ +! if (current_line == 0 && !_rl_horizontal_scroll_mode && + current_invis_chars != visible_wrap_offset) + { +--- 1638,1642 ---- + the spot of first difference is before the end of the invisible chars, + lendiff needs to be adjusted. */ +! if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */ + current_invis_chars != visible_wrap_offset) + { +*************** +*** 1826,1831 **** + _rl_last_c_pos += bytes_to_insert; + + if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) +! goto clear_rest_of_line; + } + } +--- 1826,1836 ---- + _rl_last_c_pos += bytes_to_insert; + ++ /* XXX - we only want to do this if we are at the end of the line ++ so we move there with _rl_move_cursor_relative */ + if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) +! { +! _rl_move_cursor_relative (ne-new, new); +! goto clear_rest_of_line; +! } + } + } +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 12 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 13 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-014 b/src/patches/bash/bash43-014 new file mode 100644 index 000000000..f8371967f --- /dev/null +++ b/src/patches/bash/bash43-014 @@ -0,0 +1,102 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-014 + +Bug-Reported-by: Greg Wooledge +Bug-Reference-ID: <20140418202123.GB7660@eeg.ccf.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html + +Bug-Description: + +Under certain circumstances, $@ is expanded incorrectly in contexts where +word splitting is not performed. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/subst.c 2014-01-23 16:26:37.000000000 -0500 +--- subst.c 2014-04-19 15:41:26.000000000 -0400 +*************** +*** 3249,3254 **** +--- 3249,3256 ---- + return ((char *)NULL); + ++ expand_no_split_dollar_star = 1; + w->flags |= W_NOSPLIT2; + l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0); ++ expand_no_split_dollar_star = 0; + if (l) + { +*************** +*** 7848,7851 **** +--- 7850,7857 ---- + according to POSIX.2, this expands to a list of the positional + parameters no matter what IFS is set to. */ ++ /* XXX - what to do when in a context where word splitting is not ++ performed? Even when IFS is not the default, posix seems to imply ++ that we behave like unquoted $* ? Maybe we should use PF_NOSPLIT2 ++ here. */ + temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted); + +*************** +*** 8817,8820 **** +--- 8823,8827 ---- + { + char *ifs_chars; ++ char *tstring; + + ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL; +*************** +*** 8831,8834 **** +--- 8838,8865 ---- + if (split_on_spaces) + list = list_string (istring, " ", 1); /* XXX quoted == 1? */ ++ /* If we have $@ (has_dollar_at != 0) and we are in a context where we ++ don't want to split the result (W_NOSPLIT2), and we are not quoted, ++ we have already separated the arguments with the first character of ++ $IFS. In this case, we want to return a list with a single word ++ with the separator possibly replaced with a space (it's what other ++ shells seem to do). ++ quoted_dollar_at is internal to this function and is set if we are ++ passed an argument that is unquoted (quoted == 0) but we encounter a ++ double-quoted $@ while expanding it. */ ++ else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2)) ++ { ++ /* Only split and rejoin if we have to */ ++ if (*ifs_chars && *ifs_chars != ' ') ++ { ++ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); ++ tstring = string_list (list); ++ } ++ else ++ tstring = istring; ++ tword = make_bare_word (tstring); ++ if (tstring != istring) ++ free (tstring); ++ goto set_word_flags; ++ } + else if (has_dollar_at && ifs_chars) + list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); +*************** +*** 8836,8839 **** +--- 8867,8871 ---- + { + tword = make_bare_word (istring); ++ set_word_flags: + if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED)) + tword->flags |= W_QUOTED; +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 13 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 14 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-015 b/src/patches/bash/bash43-015 new file mode 100644 index 000000000..9c4e5ea48 --- /dev/null +++ b/src/patches/bash/bash43-015 @@ -0,0 +1,58 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-015 + +Bug-Reported-by: Clark Wang +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00095.html + +Bug-Description: + +When completing directory names, the directory name is dequoted twice. +This causes problems for directories with single and double quotes in +their names. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/bashline.c 2014-02-09 19:56:58.000000000 -0500 +--- bashline.c 2014-04-25 14:57:52.000000000 -0400 +*************** +*** 4168,4174 **** + + qc = rl_dispatching ? rl_completion_quote_character : 0; +! dfn = bash_dequote_filename ((char *)text, qc); + m1 = rl_completion_matches (dfn, rl_filename_completion_function); +! free (dfn); + + if (m1 == 0 || m1[0] == 0) +--- 4209,4222 ---- + + qc = rl_dispatching ? rl_completion_quote_character : 0; +! /* If rl_completion_found_quote != 0, rl_completion_matches will call the +! filename dequoting function, causing the directory name to be dequoted +! twice. */ +! if (rl_dispatching && rl_completion_found_quote == 0) +! dfn = bash_dequote_filename ((char *)text, qc); +! else +! dfn = (char *)text; + m1 = rl_completion_matches (dfn, rl_filename_completion_function); +! if (dfn != text) +! free (dfn); + + if (m1 == 0 || m1[0] == 0) +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 14 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 15 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-016 b/src/patches/bash/bash43-016 new file mode 100644 index 000000000..882d5939b --- /dev/null +++ b/src/patches/bash/bash43-016 @@ -0,0 +1,132 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-016 + +Bug-Reported-by: Pierre Gaston +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html + +Bug-Description: + +An extended glob pattern containing a slash (`/') causes the globbing code +to misinterpret it as a directory separator. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/lib/glob/glob.c 2014-03-28 10:54:23.000000000 -0400 +--- lib/glob/glob.c 2014-05-02 10:24:28.000000000 -0400 +*************** +*** 124,127 **** +--- 124,129 ---- + extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int)); + ++ extern char *glob_dirscan __P((char *, int)); ++ + /* Compile `glob_loop.c' for single-byte characters. */ + #define CHAR unsigned char +*************** +*** 188,191 **** +--- 190,196 ---- + pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ + /* we should check for invalid extglob pattern here */ ++ if (pe == 0) ++ return 0; ++ + /* if pe != se we have more of the pattern at the end of the extglob + pattern. Check the easy case first ( */ +*************** +*** 1016,1020 **** + char **result; + unsigned int result_size; +! char *directory_name, *filename, *dname; + unsigned int directory_len; + int free_dirname; /* flag */ +--- 1021,1025 ---- + char **result; + unsigned int result_size; +! char *directory_name, *filename, *dname, *fn; + unsigned int directory_len; + int free_dirname; /* flag */ +*************** +*** 1032,1035 **** +--- 1037,1052 ---- + /* Find the filename. */ + filename = strrchr (pathname, '/'); ++ #if defined (EXTENDED_GLOB) ++ if (filename && extended_glob) ++ { ++ fn = glob_dirscan (pathname, '/'); ++ #if DEBUG_MATCHING ++ if (fn != filename) ++ fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename); ++ #endif ++ filename = fn; ++ } ++ #endif ++ + if (filename == NULL) + { +*** ../bash-4.3-patched/lib/glob/gmisc.c 2014-03-28 10:54:23.000000000 -0400 +--- lib/glob/gmisc.c 2014-05-02 09:35:57.000000000 -0400 +*************** +*** 43,46 **** +--- 43,48 ---- + #define WRPAREN L')' + ++ extern char *glob_patscan __P((char *, char *, int)); ++ + /* Return 1 of the first character of WSTRING could match the first + character of pattern WPAT. Wide character version. */ +*************** +*** 376,377 **** +--- 378,410 ---- + return matlen; + } ++ ++ /* Skip characters in PAT and return the final occurrence of DIRSEP. This ++ is only called when extended_glob is set, so we have to skip over extglob ++ patterns x(...) */ ++ char * ++ glob_dirscan (pat, dirsep) ++ char *pat; ++ int dirsep; ++ { ++ char *p, *d, *pe, *se; ++ ++ d = pe = se = 0; ++ for (p = pat; p && *p; p++) ++ { ++ if (extglob_pattern_p (p)) ++ { ++ if (se == 0) ++ se = p + strlen (p) - 1; ++ pe = glob_patscan (p + 2, se, 0); ++ if (pe == 0) ++ continue; ++ else if (*pe == 0) ++ break; ++ p = pe - 1; /* will do increment above */ ++ continue; ++ } ++ if (*p == dirsep) ++ d = p; ++ } ++ return d; ++ } + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 15 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 16 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-017 b/src/patches/bash/bash43-017 new file mode 100644 index 000000000..4016fb934 --- /dev/null +++ b/src/patches/bash/bash43-017 @@ -0,0 +1,51 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-017 + +Bug-Reported-by: Dan Douglas +Bug-Reference-ID: <7781746.RhfoTROLxF@smorgbox> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00026.html + +Bug-Description: + +The code that creates local variables should not clear the `invisible' +attribute when returning an existing local variable. Let the code that +actually assigns a value clear it. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/variables.c 2014-02-14 11:55:12.000000000 -0500 +--- variables.c 2014-05-07 10:53:57.000000000 -0400 +*************** +*** 2198,2205 **** + old_var = find_variable (name); + if (old_var && local_p (old_var) && old_var->context == variable_context) +! { +! VUNSETATTR (old_var, att_invisible); /* XXX */ +! return (old_var); +! } + + was_tmpvar = old_var && tempvar_p (old_var); +--- 2260,2264 ---- + old_var = find_variable (name); + if (old_var && local_p (old_var) && old_var->context == variable_context) +! return (old_var); + + was_tmpvar = old_var && tempvar_p (old_var); + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 16 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 17 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-018 b/src/patches/bash/bash43-018 new file mode 100644 index 000000000..39499f663 --- /dev/null +++ b/src/patches/bash/bash43-018 @@ -0,0 +1,44 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-018 + +Bug-Reported-by: Geir Hauge +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00040.html + +Bug-Description: + +When assigning an array variable using the compound assignment syntax, +but using `declare' with the rhs of the compound assignment quoted, the +shell did not mark the variable as visible after successfully performing +the assignment. + +Patch (apply with `patch -p0'): +*** ../bash-4.3-patched/arrayfunc.c 2014-03-28 10:54:21.000000000 -0400 +--- arrayfunc.c 2014-05-12 11:19:00.000000000 -0400 +*************** +*** 180,183 **** +--- 180,184 ---- + FREE (newval); + ++ VUNSETATTR (entry, att_invisible); /* no longer invisible */ + return (entry); + } + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 17 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 18 + + #endif /* _PATCHLEVEL_H_ */ From 29d997e6c425b82303a4835dbcbd260611d12357 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 21:08:12 +0200 Subject: [PATCH 027/297] parted: Update to 3.1. --- config/rootfiles/{packages => common}/parted | 11 +++++++++-- config/rootfiles/installer/parted | 2 +- lfs/parted | 8 ++++---- 3 files changed, 14 insertions(+), 7 deletions(-) rename config/rootfiles/{packages => common}/parted (84%) diff --git a/config/rootfiles/packages/parted b/config/rootfiles/common/parted similarity index 84% rename from config/rootfiles/packages/parted rename to config/rootfiles/common/parted index 74164e0b7..223a580cb 100644 --- a/config/rootfiles/packages/parted +++ b/config/rootfiles/common/parted @@ -10,11 +10,16 @@ #usr/include/parted/parted.h #usr/include/parted/timer.h #usr/include/parted/unit.h +#usr/lib/libparted-fs-resize.a +#usr/lib/libparted-fs-resize.la +#usr/lib/libparted-fs-resize.so +usr/lib/libparted-fs-resize.so.0 +usr/lib/libparted-fs-resize.so.0.0.0 #usr/lib/libparted.a #usr/lib/libparted.la #usr/lib/libparted.so -usr/lib/libparted.so.0 -usr/lib/libparted.so.0.0.1 +usr/lib/libparted.so.2 +usr/lib/libparted.so.2.0.0 #usr/lib/pkgconfig/libparted.pc usr/sbin/parted usr/sbin/partprobe @@ -38,6 +43,8 @@ usr/sbin/partprobe #usr/share/locale/ru/LC_MESSAGES/parted.mo #usr/share/locale/rw/LC_MESSAGES/parted.mo #usr/share/locale/sk/LC_MESSAGES/parted.mo +#usr/share/locale/sl/LC_MESSAGES/parted.mo +#usr/share/locale/sr/LC_MESSAGES/parted.mo #usr/share/locale/sv/LC_MESSAGES/parted.mo #usr/share/locale/tr/LC_MESSAGES/parted.mo #usr/share/locale/uk/LC_MESSAGES/parted.mo diff --git a/config/rootfiles/installer/parted b/config/rootfiles/installer/parted index dc6967423..5c544a401 120000 --- a/config/rootfiles/installer/parted +++ b/config/rootfiles/installer/parted @@ -1 +1 @@ -../packages/parted \ No newline at end of file +../common/parted \ No newline at end of file diff --git a/lfs/parted b/lfs/parted index 25db9e5c3..6a3718a39 100644 --- a/lfs/parted +++ b/lfs/parted @@ -24,10 +24,10 @@ include Config -VER = 2.3 +VER = 3.1 THISAPP = parted-$(VER) -DL_FILE = $(THISAPP).tar.gz +DL_FILE = $(THISAPP).tar.xz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) @@ -45,7 +45,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 30ceb6df7e8681891e865e2fe5a7903d +$(DL_FILE)_MD5 = 5d89d64d94bcfefa9ce8f59f4b81bdcb install : $(TARGET) @@ -77,7 +77,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) cd $(DIR_APP) && ./configure --prefix=/usr --disable-device-mapper cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install From c60cec065d31786116fde34b73a504f6291027a9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 21:28:43 +0200 Subject: [PATCH 028/297] grub: Fix rootfile. --- config/rootfiles/common/i586/grub | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/rootfiles/common/i586/grub b/config/rootfiles/common/i586/grub index 0f730ddc1..c1dd901f6 100644 --- a/config/rootfiles/common/i586/grub +++ b/config/rootfiles/common/i586/grub @@ -176,7 +176,7 @@ usr/lib/grub/i386-pc/gcry_whirlpool.mod usr/lib/grub/i386-pc/gcry_whirlpool.module usr/lib/grub/i386-pc/gdb.mod usr/lib/grub/i386-pc/gdb.module -usr/lib/grub/i386-pc/gdb_grub2 +usr/lib/grub/i386-pc/gdb_grub usr/lib/grub/i386-pc/geli.mod usr/lib/grub/i386-pc/geli.module usr/lib/grub/i386-pc/gettext.mod From c28dada0c9e220de68b329b937220f18e8cbedc7 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 22:02:03 +0200 Subject: [PATCH 029/297] readline: Re-add accidentially deleted patches of -compat package --- src/patches/readline/readline52-001 | 30 +++ src/patches/readline/readline52-002 | 49 +++++ src/patches/readline/readline52-003 | 37 ++++ src/patches/readline/readline52-004 | 70 ++++++ src/patches/readline/readline52-005 | 328 ++++++++++++++++++++++++++++ src/patches/readline/readline52-006 | 62 ++++++ src/patches/readline/readline52-007 | 65 ++++++ src/patches/readline/readline52-008 | 70 ++++++ src/patches/readline/readline52-009 | 45 ++++ src/patches/readline/readline52-010 | 47 ++++ src/patches/readline/readline52-011 | 32 +++ src/patches/readline/readline52-012 | 150 +++++++++++++ src/patches/readline/readline52-013 | 135 ++++++++++++ src/patches/readline/readline52-014 | 49 +++++ 14 files changed, 1169 insertions(+) create mode 100644 src/patches/readline/readline52-001 create mode 100644 src/patches/readline/readline52-002 create mode 100644 src/patches/readline/readline52-003 create mode 100644 src/patches/readline/readline52-004 create mode 100644 src/patches/readline/readline52-005 create mode 100644 src/patches/readline/readline52-006 create mode 100644 src/patches/readline/readline52-007 create mode 100644 src/patches/readline/readline52-008 create mode 100644 src/patches/readline/readline52-009 create mode 100644 src/patches/readline/readline52-010 create mode 100644 src/patches/readline/readline52-011 create mode 100644 src/patches/readline/readline52-012 create mode 100644 src/patches/readline/readline52-013 create mode 100644 src/patches/readline/readline52-014 diff --git a/src/patches/readline/readline52-001 b/src/patches/readline/readline52-001 new file mode 100644 index 000000000..0bec9a278 --- /dev/null +++ b/src/patches/readline/readline52-001 @@ -0,0 +1,30 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-001 + +Bug-Reported-by: ebb9@byu.net +Bug-Reference-ID: <45540862.9030900@byu.net> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00017.html + http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00016.html + +Bug-Description: + +In some cases, code that is intended to be used in the presence of multibyte +characters is called when no such characters are present, leading to incorrect +display position calculations and incorrect redisplay. + +Patch: + +*** ../readline-5.2/display.c Thu Sep 14 14:20:12 2006 +--- display.c Mon Nov 13 17:55:57 2006 +*************** +*** 2381,2384 **** +--- 2409,2414 ---- + if (end <= start) + return 0; ++ if (MB_CUR_MAX == 1 || rl_byte_oriented) ++ return (end - start); + + memset (&ps, 0, sizeof (mbstate_t)); diff --git a/src/patches/readline/readline52-002 b/src/patches/readline/readline52-002 new file mode 100644 index 000000000..b0d8c9223 --- /dev/null +++ b/src/patches/readline/readline52-002 @@ -0,0 +1,49 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-002 + +Bug-Reported-by: Magnus Svensson +Bug-Reference-ID: <45BDC44D.80609@mysql.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html + +Bug-Description: + +Readline neglects to reallocate the array it uses to keep track of wrapped +screen lines when increasing its size. This will eventually result in +segmentation faults when given sufficiently long input. + +Patch: + +*** ../readline-5.2-patched/display.c Thu Sep 14 14:20:12 2006 +--- display.c Fri Feb 2 20:23:17 2007 +*************** +*** 561,574 **** +--- 561,586 ---- + wrap_offset = prompt_invis_chars_first_line = 0; + } + ++ #if defined (HANDLE_MULTIBYTE) + #define CHECK_INV_LBREAKS() \ + do { \ + if (newlines >= (inv_lbsize - 2)) \ + { \ + inv_lbsize *= 2; \ + inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ ++ _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ + } \ + } while (0) ++ #else ++ #define CHECK_INV_LBREAKS() \ ++ do { \ ++ if (newlines >= (inv_lbsize - 2)) \ ++ { \ ++ inv_lbsize *= 2; \ ++ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ ++ } \ ++ } while (0) ++ #endif /* HANDLE_MULTIBYTE */ + + #if defined (HANDLE_MULTIBYTE) + #define CHECK_LPOS() \ diff --git a/src/patches/readline/readline52-003 b/src/patches/readline/readline52-003 new file mode 100644 index 000000000..06916b3b2 --- /dev/null +++ b/src/patches/readline/readline52-003 @@ -0,0 +1,37 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-003 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1171795523.8021.18.camel@localhost> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html + +Bug-Description: + +When moving the cursor, bash sometimes misplaces the cursor when the prompt +contains two or more multibyte characters. The particular circumstance that +uncovered the problem was having the (multibyte) current directory name in +the prompt string. + +Patch: + +*** ../readline-5.2.2/display.c Fri Jan 19 13:34:50 2007 +--- display.c Sat Mar 10 17:25:44 2007 +*************** +*** 1745,1749 **** + { + dpos = _rl_col_width (data, 0, new); +! if (dpos > prompt_last_invisible) /* XXX - don't use woff here */ + { + dpos -= woff; +--- 1745,1752 ---- + { + dpos = _rl_col_width (data, 0, new); +! /* Use NEW when comparing against the last invisible character in the +! prompt string, since they're both buffer indices and DPOS is a +! desired display position. */ +! if (new > prompt_last_invisible) /* XXX - don't use woff here */ + { + dpos -= woff; diff --git a/src/patches/readline/readline52-004 b/src/patches/readline/readline52-004 new file mode 100644 index 000000000..b165ad9f4 --- /dev/null +++ b/src/patches/readline/readline52-004 @@ -0,0 +1,70 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-004 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1173636022.7039.36.camel@localhost> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html + +Bug-Description: + +When restoring the original prompt after finishing an incremental search, +bash sometimes places the cursor incorrectly if the primary prompt contains +invisible characters. + +Patch: + +*** ../readline-5.2.3/display.c Fri Apr 20 13:30:16 2007 +--- display.c Fri Apr 20 15:17:01 2007 +*************** +*** 1599,1604 **** + if (temp > 0) + { + _rl_output_some_chars (nfd, temp); +! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; + } + } +--- 1599,1618 ---- + if (temp > 0) + { ++ /* If nfd begins at the prompt, or before the invisible ++ characters in the prompt, we need to adjust _rl_last_c_pos ++ in a multibyte locale to account for the wrap offset and ++ set cpos_adjusted accordingly. */ + _rl_output_some_chars (nfd, temp); +! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) +! { +! _rl_last_c_pos += _rl_col_width (nfd, 0, temp); +! if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) +! { +! _rl_last_c_pos -= wrap_offset; +! cpos_adjusted = 1; +! } +! } +! else +! _rl_last_c_pos += temp; + } + } +*************** +*** 1608,1613 **** +--- 1622,1639 ---- + if (temp > 0) + { ++ /* If nfd begins at the prompt, or before the invisible ++ characters in the prompt, we need to adjust _rl_last_c_pos ++ in a multibyte locale to account for the wrap offset and ++ set cpos_adjusted accordingly. */ + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; /* XXX */ ++ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) ++ { ++ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) ++ { ++ _rl_last_c_pos -= wrap_offset; ++ cpos_adjusted = 1; ++ } ++ } + } + lendiff = (oe - old) - (ne - new); diff --git a/src/patches/readline/readline52-005 b/src/patches/readline/readline52-005 new file mode 100644 index 000000000..d192ac152 --- /dev/null +++ b/src/patches/readline/readline52-005 @@ -0,0 +1,328 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-005 + +Bug-Reported-by: Thomas Loeber +Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html + +Bug-Description: + +When rl_read_key returns -1, indicating that readline's controlling terminal +has been invalidated for some reason (e.g., receiving a SIGHUP), the error +status was not reported correctly to the caller. This could cause input +loops. + +Patch: + +*** ../readline-5.2/complete.c Fri Jul 28 11:35:49 2006 +--- complete.c Tue Mar 13 08:50:16 2007 +*************** +*** 429,433 **** + if (c == 'n' || c == 'N' || c == RUBOUT) + return (0); +! if (c == ABORT_CHAR) + _rl_abort_internal (); + if (for_pager && (c == NEWLINE || c == RETURN)) +--- 440,444 ---- + if (c == 'n' || c == 'N' || c == RUBOUT) + return (0); +! if (c == ABORT_CHAR || c < 0) + _rl_abort_internal (); + if (for_pager && (c == NEWLINE || c == RETURN)) +*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 +--- input.c Wed May 2 16:07:59 2007 +*************** +*** 514,518 **** + int size; + { +! int mb_len = 0; + size_t mbchar_bytes_length; + wchar_t wc; +--- 522,526 ---- + int size; + { +! int mb_len, c; + size_t mbchar_bytes_length; + wchar_t wc; +*************** +*** 521,531 **** + memset(&ps, 0, sizeof (mbstate_t)); + memset(&ps_back, 0, sizeof (mbstate_t)); +! + while (mb_len < size) + { + RL_SETSTATE(RL_STATE_MOREINPUT); +! mbchar[mb_len++] = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + + mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); + if (mbchar_bytes_length == (size_t)(-1)) +--- 529,545 ---- + memset(&ps, 0, sizeof (mbstate_t)); + memset(&ps_back, 0, sizeof (mbstate_t)); +! +! mb_len = 0; + while (mb_len < size) + { + RL_SETSTATE(RL_STATE_MOREINPUT); +! c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ break; ++ ++ mbchar[mb_len++] = c; ++ + mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); + if (mbchar_bytes_length == (size_t)(-1)) +*************** +*** 565,569 **** + c = first; + memset (mb, 0, mlen); +! for (i = 0; i < mlen; i++) + { + mb[i] = (char)c; +--- 579,583 ---- + c = first; + memset (mb, 0, mlen); +! for (i = 0; c >= 0 && i < mlen; i++) + { + mb[i] = (char)c; +*** ../readline-5.2/isearch.c Mon Dec 26 17:18:53 2005 +--- isearch.c Fri Mar 9 14:30:59 2007 +*************** +*** 328,333 **** + + f = (rl_command_func_t *)NULL; +! +! /* Translate the keys we do something with to opcodes. */ + if (c >= 0 && _rl_keymap[c].type == ISFUNC) + { +--- 328,340 ---- + + f = (rl_command_func_t *)NULL; +! +! if (c < 0) +! { +! cxt->sflags |= SF_FAILED; +! cxt->history_pos = cxt->last_found_line; +! return -1; +! } +! +! /* Translate the keys we do something with to opcodes. */ + if (c >= 0 && _rl_keymap[c].type == ISFUNC) + { +*** ../readline-5.2/misc.c Mon Dec 26 17:20:46 2005 +--- misc.c Fri Mar 9 14:44:11 2007 +*************** +*** 147,150 **** +--- 147,152 ---- + rl_clear_message (); + RL_UNSETSTATE(RL_STATE_NUMERICARG); ++ if (key < 0) ++ return -1; + return (_rl_dispatch (key, _rl_keymap)); + } +*** ../readline-5.2/readline.c Wed Aug 16 15:00:36 2006 +--- readline.c Fri Mar 9 14:47:24 2007 +*************** +*** 646,649 **** +--- 669,677 ---- + { + nkey = _rl_subseq_getchar (cxt->okey); ++ if (nkey < 0) ++ { ++ _rl_abort_internal (); ++ return -1; ++ } + r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); + cxt->flags |= KSEQ_DISPATCHED; +*** ../readline-5.2/text.c Fri Jul 28 11:55:27 2006 +--- text.c Sun Mar 25 13:41:38 2007 +*************** +*** 858,861 **** +--- 864,870 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ return -1; ++ + #if defined (HANDLE_SIGNALS) + if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) +*************** +*** 1521,1524 **** +--- 1530,1536 ---- + mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); + ++ if (mb_len <= 0) ++ return -1; ++ + if (count < 0) + return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); +*************** +*** 1537,1540 **** +--- 1549,1555 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ return -1; ++ + if (count < 0) + return (_rl_char_search_internal (-count, bdir, c)); +*** ../readline-5.2/vi_mode.c Sat Jul 29 16:42:28 2006 +--- vi_mode.c Fri Mar 9 15:02:11 2007 +*************** +*** 887,890 **** +--- 887,897 ---- + c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); ++ ++ if (c < 0) ++ { ++ *nextkey = 0; ++ return -1; ++ } ++ + *nextkey = c; + +*************** +*** 903,906 **** +--- 910,918 ---- + c = rl_read_key (); /* real command */ + RL_UNSETSTATE(RL_STATE_MOREINPUT); ++ if (c < 0) ++ { ++ *nextkey = 0; ++ return -1; ++ } + *nextkey = c; + } +*************** +*** 1225,1236 **** + _rl_callback_generic_arg *data; + { + #if defined (HANDLE_MULTIBYTE) +! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! _rl_vi_last_search_char = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + #endif + + _rl_callback_func = 0; + _rl_want_redisplay = 1; +--- 1243,1262 ---- + _rl_callback_generic_arg *data; + { ++ int c; + #if defined (HANDLE_MULTIBYTE) +! c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + #endif + ++ if (c <= 0) ++ return -1; ++ ++ #if !defined (HANDLE_MULTIBYTE) ++ _rl_vi_last_search_char = c; ++ #endif ++ + _rl_callback_func = 0; + _rl_want_redisplay = 1; +*************** +*** 1248,1251 **** +--- 1274,1278 ---- + int count, key; + { ++ int c; + #if defined (HANDLE_MULTIBYTE) + static char *target; +*************** +*** 1294,1302 **** + { + #if defined (HANDLE_MULTIBYTE) +! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! _rl_vi_last_search_char = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + #endif + } +--- 1321,1335 ---- + { + #if defined (HANDLE_MULTIBYTE) +! c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); +! if (c <= 0) +! return -1; +! _rl_vi_last_search_mblen = c; + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); ++ if (c < 0) ++ return -1; ++ _rl_vi_last_search_char = c; + #endif + } +*************** +*** 1468,1471 **** +--- 1501,1507 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ return -1; ++ + #if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) +*************** +*** 1486,1489 **** +--- 1522,1528 ---- + _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); + ++ if (c < 0) ++ return -1; ++ + _rl_callback_func = 0; + _rl_want_redisplay = 1; +*************** +*** 1517,1520 **** +--- 1556,1562 ---- + _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); + ++ if (c < 0) ++ return -1; ++ + return (_rl_vi_change_char (count, c, mb)); + } +*************** +*** 1651,1655 **** + RL_UNSETSTATE(RL_STATE_MOREINPUT); + +! if (ch < 'a' || ch > 'z') + { + rl_ding (); +--- 1693,1697 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + +! if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ + { + rl_ding (); +*************** +*** 1703,1707 **** + return 0; + } +! else if (ch < 'a' || ch > 'z') + { + rl_ding (); +--- 1745,1749 ---- + return 0; + } +! else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ + { + rl_ding (); diff --git a/src/patches/readline/readline52-006 b/src/patches/readline/readline52-006 new file mode 100644 index 000000000..d7391438d --- /dev/null +++ b/src/patches/readline/readline52-006 @@ -0,0 +1,62 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-006 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1178376645.9063.25.camel@localhost> +Bug-Reference-URL: http://bugs.gentoo.org/177095 + +Bug-Description: + +The readline display code miscalculated the screen position when performing +a redisplay in which the new text occupies more screen space that the old, +but takes fewer bytes to do so (e.g., when replacing a shorter string +containing multibyte characters with a longer one containing only ASCII). + +Patch: + +*** ../readline-5.2/display.c Thu Apr 26 11:38:22 2007 +--- display.c Thu Jul 12 23:10:10 2007 +*************** +*** 1519,1527 **** + /* Non-zero if we're increasing the number of lines. */ + int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; + /* Sometimes it is cheaper to print the characters rather than + use the terminal's capabilities. If we're growing the number + of lines, make sure we actually cause the new line to wrap + around on auto-wrapping terminals. */ +! if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) + { + /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and +--- 1568,1596 ---- + /* Non-zero if we're increasing the number of lines. */ + int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; ++ /* If col_lendiff is > 0, implying that the new string takes up more ++ screen real estate than the old, but lendiff is < 0, meaning that it ++ takes fewer bytes, we need to just output the characters starting ++ from the first difference. These will overwrite what is on the ++ display, so there's no reason to do a smart update. This can really ++ only happen in a multibyte environment. */ ++ if (lendiff < 0) ++ { ++ _rl_output_some_chars (nfd, temp); ++ _rl_last_c_pos += _rl_col_width (nfd, 0, temp); ++ /* If nfd begins before any invisible characters in the prompt, ++ adjust _rl_last_c_pos to account for wrap_offset and set ++ cpos_adjusted to let the caller know. */ ++ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) ++ { ++ _rl_last_c_pos -= wrap_offset; ++ cpos_adjusted = 1; ++ } ++ return; ++ } + /* Sometimes it is cheaper to print the characters rather than + use the terminal's capabilities. If we're growing the number + of lines, make sure we actually cause the new line to wrap + around on auto-wrapping terminals. */ +! else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) + { + /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and diff --git a/src/patches/readline/readline52-007 b/src/patches/readline/readline52-007 new file mode 100644 index 000000000..f75f53fc6 --- /dev/null +++ b/src/patches/readline/readline52-007 @@ -0,0 +1,65 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-007 + +Bug-Reported-by: Tom Bjorkholm +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html + + +Bug-Description: + +An off-by-one error in readline's input buffering caused readline to drop +each 511th character of buffered input (e.g., when pasting a large amount +of data into a terminal window). + +Patch: + +*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 +--- input.c Tue Jul 17 09:24:21 2007 +*************** +*** 134,139 **** + + *key = ibuffer[pop_index++]; +! + if (pop_index >= ibuffer_len) + pop_index = 0; + +--- 134,142 ---- + + *key = ibuffer[pop_index++]; +! #if 0 + if (pop_index >= ibuffer_len) ++ #else ++ if (pop_index > ibuffer_len) ++ #endif + pop_index = 0; + +*************** +*** 251,255 **** + { + k = (*rl_getc_function) (rl_instream); +! rl_stuff_char (k); + if (k == NEWLINE || k == RETURN) + break; +--- 254,259 ---- + { + k = (*rl_getc_function) (rl_instream); +! if (rl_stuff_char (k) == 0) +! break; /* some problem; no more room */ + if (k == NEWLINE || k == RETURN) + break; +*************** +*** 374,378 **** +--- 378,386 ---- + } + ibuffer[push_index++] = key; ++ #if 0 + if (push_index >= ibuffer_len) ++ #else ++ if (push_index > ibuffer_len) ++ #endif + push_index = 0; + diff --git a/src/patches/readline/readline52-008 b/src/patches/readline/readline52-008 new file mode 100644 index 000000000..1d7f3277f --- /dev/null +++ b/src/patches/readline/readline52-008 @@ -0,0 +1,70 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-008 + +Bug-Reported-by: dAniel hAhler +Bug-Reference-ID: <4702ED8A.5000503@thequod.de> +Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938 + +Bug-Description: + +When updating the display after displaying, for instance, a list of possible +completions, readline will place the cursor at the wrong position if the +prompt contains invisible characters and a newline. + +Patch: + +*** ../readline-5.2-patched/display.c Mon Aug 6 14:26:29 2007 +--- display.c Wed Oct 10 22:43:58 2007 +*************** +*** 1049,1053 **** + else + tx = nleft; +! if (_rl_last_c_pos > tx) + { + _rl_backspace (_rl_last_c_pos - tx); /* XXX */ +--- 1049,1053 ---- + else + tx = nleft; +! if (tx >= 0 && _rl_last_c_pos > tx) + { + _rl_backspace (_rl_last_c_pos - tx); /* XXX */ +*************** +*** 1205,1209 **** + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd; + int current_invis_chars; + int col_lendiff, col_temp; +--- 1205,1209 ---- + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd, o_cpos; + int current_invis_chars; + int col_lendiff, col_temp; +*************** +*** 1466,1469 **** +--- 1466,1471 ---- + } + ++ o_cpos = _rl_last_c_pos; ++ + /* When this function returns, _rl_last_c_pos is correct, and an absolute + cursor postion in multibyte mode, but a buffer index when not in a +*************** +*** 1475,1479 **** + invisible characters in the prompt string. Let's see if setting this when + we make sure we're at the end of the drawn prompt string works. */ +! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars) + cpos_adjusted = 1; + #endif +--- 1477,1483 ---- + invisible characters in the prompt string. Let's see if setting this when + we make sure we're at the end of the drawn prompt string works. */ +! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && +! (_rl_last_c_pos > 0 || o_cpos > 0) && +! _rl_last_c_pos == prompt_physical_chars) + cpos_adjusted = 1; + #endif diff --git a/src/patches/readline/readline52-009 b/src/patches/readline/readline52-009 new file mode 100644 index 000000000..af9e38174 --- /dev/null +++ b/src/patches/readline/readline52-009 @@ -0,0 +1,45 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-009 + +Bug-Reported-by: dAniel hAhler +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +Under some circumstances, readline will incorrectly display a prompt string +containing invisible characters after the final newline. + +Patch: + +*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 +--- display.c 2007-11-10 17:51:29.000000000 -0500 +*************** +*** 392,396 **** + local_prompt = expand_prompt (p, &prompt_visible_length, + &prompt_last_invisible, +! (int *)NULL, + &prompt_physical_chars); + c = *t; *t = '\0'; +--- 420,424 ---- + local_prompt = expand_prompt (p, &prompt_visible_length, + &prompt_last_invisible, +! &prompt_invis_chars_first_line, + &prompt_physical_chars); + c = *t; *t = '\0'; +*************** +*** 399,403 **** + local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, + (int *)NULL, +! &prompt_invis_chars_first_line, + (int *)NULL); + *t = c; +--- 427,431 ---- + local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, + (int *)NULL, +! (int *)NULL, + (int *)NULL); + *t = c; diff --git a/src/patches/readline/readline52-010 b/src/patches/readline/readline52-010 new file mode 100644 index 000000000..ee5c026f8 --- /dev/null +++ b/src/patches/readline/readline52-010 @@ -0,0 +1,47 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-010 + +Bug-Reported-by: Miroslav Lichvar +Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100 +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html + +Bug-Description: + +In certain cases when outputting characters at the end of the line, +e.g., when displaying the prompt string, readline positions the cursor +incorrectly if the prompt string contains invisible characters and the +text being drawn begins before the last invisible character in the line. + +Patch: + +*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 +--- display.c 2007-11-10 17:51:29.000000000 -0500 +*************** +*** 1566,1574 **** + else + { +- /* We have horizontal scrolling and we are not inserting at +- the end. We have invisible characters in this line. This +- is a dumb update. */ + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; + return; + } +--- 1619,1632 ---- + else + { + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; ++ /* If nfd begins before any invisible characters in the prompt, ++ adjust _rl_last_c_pos to account for wrap_offset and set ++ cpos_adjusted to let the caller know. */ ++ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) ++ { ++ _rl_last_c_pos -= wrap_offset; ++ cpos_adjusted = 1; ++ } + return; + } diff --git a/src/patches/readline/readline52-011 b/src/patches/readline/readline52-011 new file mode 100644 index 000000000..a1197ede6 --- /dev/null +++ b/src/patches/readline/readline52-011 @@ -0,0 +1,32 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-011 + +Bug-Reported-by: Uwe Doering +Bug-Reference-ID: <46F3DD72.2090801@geminix.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html + +Bug-Description: + +There is an off-by-one error in the code that buffers characters received +very quickly in succession, causing characters to be dropped. + +Patch: + +*** ../readline-5.2-patched/input.c 2007-08-25 13:47:10.000000000 -0400 +--- input.c 2007-10-12 22:55:25.000000000 -0400 +*************** +*** 155,159 **** + pop_index--; + if (pop_index < 0) +! pop_index = ibuffer_len - 1; + ibuffer[pop_index] = key; + return (1); +--- 155,159 ---- + pop_index--; + if (pop_index < 0) +! pop_index = ibuffer_len; + ibuffer[pop_index] = key; + return (1); diff --git a/src/patches/readline/readline52-012 b/src/patches/readline/readline52-012 new file mode 100644 index 000000000..7b370240c --- /dev/null +++ b/src/patches/readline/readline52-012 @@ -0,0 +1,150 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-012 + +Bug-Reported-by: Chet Ramey +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +This updates the options required to create shared libraries on several +systems, including Mac OS X 10.5 (darwin9.x), FreeBSD, NetBSD, OpenBSD, +AIX, and HP/UX. + +Patch: + +*** ../readline-5.2-patched/support/shobj-conf 2006-04-11 09:15:43.000000000 -0400 +--- support/shobj-conf 2007-12-06 23:46:41.000000000 -0500 +*************** +*** 11,15 **** + # chet@po.cwru.edu + +! # Copyright (C) 1996-2002 Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or modify +--- 11,15 ---- + # chet@po.cwru.edu + +! # Copyright (C) 1996-2007 Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or modify +*************** +*** 115,119 **** + ;; + +! freebsd2* | netbsd*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD=ld +--- 115,119 ---- + ;; + +! freebsd2*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD=ld +*************** +*** 126,130 **** + # FreeBSD-3.x ELF + freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) +! SHOBJ_CFLAGS=-fpic + SHOBJ_LD='${CC}' + +--- 126,130 ---- + # FreeBSD-3.x ELF + freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) +! SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' + +*************** +*** 143,147 **** + + # Darwin/MacOS X +! darwin8*) + SHOBJ_STATUS=supported + SHLIB_STATUS=supported +--- 143,147 ---- + + # Darwin/MacOS X +! darwin[89]*) + SHOBJ_STATUS=supported + SHLIB_STATUS=supported +*************** +*** 154,158 **** + SHLIB_LIBSUFF='dylib' + +! SHOBJ_LDFLAGS='-undefined dynamic_lookup' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + +--- 154,158 ---- + SHLIB_LIBSUFF='dylib' + +! SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + +*************** +*** 172,176 **** + + case "${host_os}" in +! darwin[78]*) SHOBJ_LDFLAGS='' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + ;; +--- 172,176 ---- + + case "${host_os}" in +! darwin[789]*) SHOBJ_LDFLAGS='' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + ;; +*************** +*** 183,187 **** + ;; + +! openbsd*) + SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' +--- 183,187 ---- + ;; + +! openbsd*|netbsd*) + SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' +*************** +*** 248,252 **** + ;; + +! aix4.[2-9]*-*gcc*) # lightly tested by jik@cisco.com + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='ld' +--- 248,252 ---- + ;; + +! aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='ld' +*************** +*** 259,263 **** + ;; + +! aix4.[2-9]*) + SHOBJ_CFLAGS=-K + SHOBJ_LD='ld' +--- 259,263 ---- + ;; + +! aix4.[2-9]*|aix[5-9].*) + SHOBJ_CFLAGS=-K + SHOBJ_LD='ld' +*************** +*** 330,334 **** + # if you have problems linking here, moving the `-Wl,+h,$@' from + # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work +! SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' + + SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' +--- 330,334 ---- + # if you have problems linking here, moving the `-Wl,+h,$@' from + # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work +! SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' + + SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' diff --git a/src/patches/readline/readline52-013 b/src/patches/readline/readline52-013 new file mode 100644 index 000000000..82a18972a --- /dev/null +++ b/src/patches/readline/readline52-013 @@ -0,0 +1,135 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-013 + +Bug-Reported-by: slinkp +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html + +Bug-Description: + +The presence of invisible characters in a prompt longer than the screenwidth +with invisible characters on the first and last prompt lines caused readline +to place the cursor in the wrong physical location. + +Patch: + +*** ../readline-5.2-patched/display.c 2007-12-14 21:12:40.000000000 -0500 +--- display.c 2008-10-23 09:39:46.000000000 -0400 +*************** +*** 911,914 **** +--- 944,951 ---- + OFFSET (which has already been calculated above). */ + ++ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) ++ #define WRAP_OFFSET(line, offset) ((line == 0) \ ++ ? (offset ? INVIS_FIRST() : 0) \ ++ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) + #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) + #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) +*************** +*** 945,949 **** + _rl_last_c_pos > wrap_offset && + o_cpos < prompt_last_invisible) +! _rl_last_c_pos -= wrap_offset; + + /* If this is the line with the prompt, we might need to +--- 982,992 ---- + _rl_last_c_pos > wrap_offset && + o_cpos < prompt_last_invisible) +! _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ +! else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && +! (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && +! cpos_adjusted == 0 && +! _rl_last_c_pos != o_cpos && +! _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) +! _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); + + /* If this is the line with the prompt, we might need to +*************** +*** 1205,1209 **** + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd, o_cpos; + int current_invis_chars; + int col_lendiff, col_temp; +--- 1264,1268 ---- + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd, twidth, o_cpos; + int current_invis_chars; + int col_lendiff, col_temp; +*************** +*** 1221,1225 **** + temp = _rl_last_c_pos; + else +! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); + if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode + && _rl_last_v_pos == current_line - 1) +--- 1280,1284 ---- + temp = _rl_last_c_pos; + else +! temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); + if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode + && _rl_last_v_pos == current_line - 1) +*************** +*** 1587,1599 **** + { + _rl_output_some_chars (nfd + lendiff, temp - lendiff); +- #if 1 + /* XXX -- this bears closer inspection. Fixes a redisplay bug + reported against bash-3.0-alpha by Andreas Schwab involving + multibyte characters and prompt strings with invisible + characters, but was previously disabled. */ +! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); +! #else +! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); +! #endif + } + } +--- 1648,1660 ---- + { + _rl_output_some_chars (nfd + lendiff, temp - lendiff); + /* XXX -- this bears closer inspection. Fixes a redisplay bug + reported against bash-3.0-alpha by Andreas Schwab involving + multibyte characters and prompt strings with invisible + characters, but was previously disabled. */ +! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) +! twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); +! else +! twidth = temp - lendiff; +! _rl_last_c_pos += twidth; + } + } +*************** +*** 1789,1793 **** + int cpos, dpos; /* current and desired cursor positions */ + +! woff = W_OFFSET (_rl_last_v_pos, wrap_offset); + cpos = _rl_last_c_pos; + #if defined (HANDLE_MULTIBYTE) +--- 1850,1854 ---- + int cpos, dpos; /* current and desired cursor positions */ + +! woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); + cpos = _rl_last_c_pos; + #if defined (HANDLE_MULTIBYTE) +*************** +*** 1803,1807 **** + prompt string, since they're both buffer indices and DPOS is a + desired display position. */ +! if (new > prompt_last_invisible) /* XXX - don't use woff here */ + { + dpos -= woff; +--- 1864,1872 ---- + prompt string, since they're both buffer indices and DPOS is a + desired display position. */ +! if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ +! (prompt_physical_chars > _rl_screenwidth && +! _rl_last_v_pos == prompt_last_screen_line && +! wrap_offset != woff && +! new > (prompt_last_invisible-_rl_screenwidth-wrap_offset))) + { + dpos -= woff; diff --git a/src/patches/readline/readline52-014 b/src/patches/readline/readline52-014 new file mode 100644 index 000000000..8dfaae45d --- /dev/null +++ b/src/patches/readline/readline52-014 @@ -0,0 +1,49 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-014 + +Bug-Reported-by: Len Lattanzi +Bug-Reference-ID: <52B1297F-6675-45CC-B63E-24745337D006@apple.com> +Bug-Reference-URL: + +Bug-Description: + +On systems where mbrtowc() returns -2 when passed a length argument with +value 0, when using a multibyte locale, Readline's emacs-mode forward-char +at the end of a line will leave the point beyond the end of the line. + +Patch: + +*** ../readline-5.2-patched/mbutil.c 2009-05-29 23:09:26.000000000 -0400 +--- mbutil.c 2009-05-29 23:10:12.000000000 -0400 +*************** +*** 78,82 **** + int seed, count, find_non_zero; + { +! size_t tmp; + mbstate_t ps; + int point; +--- 78,82 ---- + int seed, count, find_non_zero; + { +! size_t tmp, len; + mbstate_t ps; + int point; +*************** +*** 99,103 **** + while (count > 0) + { +! tmp = mbrtowc (&wc, string+point, strlen(string + point), &ps); + if (MB_INVALIDCH ((size_t)tmp)) + { +--- 99,106 ---- + while (count > 0) + { +! len = strlen (string + point); +! if (len == 0) +! break; +! tmp = mbrtowc (&wc, string+point, len, &ps); + if (MB_INVALIDCH ((size_t)tmp)) + { From c2b9e43e4ee1ce9cc64b41491edc91f623a5b3c9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 22:18:49 +0200 Subject: [PATCH 030/297] Drop mktemp package. This is in coreutils now. --- config/rootfiles/common/mktemp | 3 - lfs/mktemp | 79 -------------- make.sh | 1 - src/patches/mktemp-1.5-add_tempfile-3.patch | 111 -------------------- 4 files changed, 194 deletions(-) delete mode 100644 config/rootfiles/common/mktemp delete mode 100644 lfs/mktemp delete mode 100644 src/patches/mktemp-1.5-add_tempfile-3.patch diff --git a/config/rootfiles/common/mktemp b/config/rootfiles/common/mktemp deleted file mode 100644 index e6328ab89..000000000 --- a/config/rootfiles/common/mktemp +++ /dev/null @@ -1,3 +0,0 @@ -usr/bin/mktemp -#usr/bin/tempfile -#usr/man/man1/mktemp.1 diff --git a/lfs/mktemp b/lfs/mktemp deleted file mode 100644 index 73d834424..000000000 --- a/lfs/mktemp +++ /dev/null @@ -1,79 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007 Michael Tremer & Christian Schmidt # -# # -# 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 3 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, see . # -# # -############################################################################### - -############################################################################### -# Definitions -############################################################################### - -include Config - -VER = 1.5 - -THISAPP = mktemp-$(VER) -DL_FILE = $(THISAPP).tar.bz2 -DL_FROM = $(URL_IPFIRE) -DIR_APP = $(DIR_SRC)/$(THISAPP) -TARGET = $(DIR_INFO)/$(THISAPP) - -############################################################################### -# Top-level Rules -############################################################################### - -objects = $(DL_FILE) - -$(DL_FILE) = $(DL_FROM)/$(DL_FILE) - -$(DL_FILE)_MD5 = 3359aa075083aeae3ed6ca67ec5d944b - -install : $(TARGET) - -check : $(patsubst %,$(DIR_CHK)/%,$(objects)) - -download :$(patsubst %,$(DIR_DL)/%,$(objects)) - -md5 : $(subst %,%_MD5,$(objects)) - -############################################################################### -# Downloading, checking, md5sum -############################################################################### - -$(patsubst %,$(DIR_CHK)/%,$(objects)) : - @$(CHECK) - -$(patsubst %,$(DIR_DL)/%,$(objects)) : - @$(LOAD) - -$(subst %,%_MD5,$(objects)) : - @$(MD5) - -############################################################################### -# Installation Details -############################################################################### - -$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) - @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-add_tempfile-3.patch - cd $(DIR_APP) && ./configure --prefix=/usr --with-libc - cd $(DIR_APP) && make $(MAKETUNING) - cd $(DIR_APP) && make install - cd $(DIR_APP) && make install-tempfile - @rm -rf $(DIR_APP) - @$(POSTBUILD) diff --git a/make.sh b/make.sh index 1c10f3234..e6a96fd51 100755 --- a/make.sh +++ b/make.sh @@ -362,7 +362,6 @@ buildbase() { lfsmake2 less lfsmake2 make lfsmake2 man - lfsmake2 mktemp lfsmake2 kmod lfsmake2 net-tools lfsmake2 patch diff --git a/src/patches/mktemp-1.5-add_tempfile-3.patch b/src/patches/mktemp-1.5-add_tempfile-3.patch deleted file mode 100644 index bf6dfbeac..000000000 --- a/src/patches/mktemp-1.5-add_tempfile-3.patch +++ /dev/null @@ -1,111 +0,0 @@ -Submitted By: Tushar Teredesai -Date: 2005-07-25 -Initial Package Version: 1.5 -Upstream Status: Sent, no response yet. -Origin: http://archive.linuxfromscratch.org/mail-archives/lfs-dev/2003-April/033602.html - http://archive.linuxfromscratch.org/mail-archives/lfs-dev/2003-June/035234.html - http://linuxfromscratch.org/pipermail/lfs-dev/2005-June/051908.html -Description: Add tempfile wrapper script. Use "make install-tempfile" to install it. - -diff -Naur mktemp-1.5.orig/Makefile.in mktemp-1.5/Makefile.in ---- mktemp-1.5.orig/Makefile.in 2003-03-23 18:09:56.000000000 -0700 -+++ mktemp-1.5/Makefile.in 2005-07-25 11:11:11.000000000 -0600 -@@ -113,6 +113,9 @@ - install-man: - $(INSTALL) -m 0444 $(srcdir)/$(PROG).$(mantype) $(mandir)/man1/$(PROG).1 - -+install-tempfile: $(srcdir)/tempfile -+ $(INSTALL) -m 0555 $(srcdir)/tempfile $(bindir)/tempfile -+ - check: - @echo nothing to check - -diff -Naur mktemp-1.5.orig/tempfile mktemp-1.5/tempfile ---- mktemp-1.5.orig/tempfile 1969-12-31 17:00:00.000000000 -0700 -+++ mktemp-1.5/tempfile 2005-07-25 11:13:41.000000000 -0600 -@@ -0,0 +1,85 @@ -+#!/bin/bash -+# A tempfile wrapper for mktemp -+# Note: If you can, avoid using tempfile and use mktemp instead. -+# This wrapper is provided for compatibility since some scripts use -+# tempfile. If possible, the best solution is to patch the scripts -+# to use mktemp. -+# -+# Copyright (c) Tushar Teredesai -+# -+# Permission to use, copy, modify, and distribute this software for any -+# purpose with or without fee is hereby granted, provided that the above -+# copyright notice and this permission notice appear in all copies. -+# -+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+# -+ -+# Usage info -+usage() -+{ -+ echo "Usage: tempfile [OPTION]" -+ echo -+ echo "Create a temporary file in a safe manner." -+ echo "This version is a wrapper that invokes mktemp." -+ echo "NOTE: Do not use tempfile in your scripts." -+ echo " Use mktemp instead." -+ echo -+ echo "[-d|--directory] DIR -> place temporary file in DIR" -+ echo "[-p|--prefix] PREFIX -> ignored" -+ echo "[-s|--suffix] SUFFIX -> ignored" -+ echo "[-n|--name] NAME -> ignored" -+ echo "[-m|--mode] MODE -> ignored" -+ echo "--version -> output version information and exit" -+} -+ -+# parse all arguments -+while [ $# != 0 ] -+do -+ case "$1" in -+ # -d for tempfile is equivalent to -p for mktemp -+ -d|--directory) -+ dir="$2" -+ shift 2 -+ ;; -+ --directory=*) -+ dir="${1#--directory=}" -+ shift 1 -+ ;; -+ -d*) -+ dir="${1#-d}" -+ shift 1 -+ ;; -+ # The following switches are ignored. -+ -p|--prefix|-s|--suffix|-n|--name|-m|--mode) -+ shift 2 -+ ;; -+ -p*|--prefix=*|-s*|--suffix=*|-n*|--name=*|-m*|--mode=*) -+ shift 1 -+ ;; -+ # --version for tempfile is equivalent to -V for mktemp -+ --version) -+ echo "tempfile 1.0 (`mktemp -V 2>/dev/null`)" -+ exit 0 -+ ;; -+ # Unknown switch -+ *) -+ usage -+ exit 1 -+ ;; -+ esac -+done -+ -+# Use the dir if $TMPDIR is not set. -+if [ -z "$TMPDIR" -a ! -z "$dir" ] -+then -+ export TMPDIR="$dir" -+fi -+# Execute mktemp with proper arguments -+# the -t behaviour of mktemp is the default for tempfile -+exec mktemp -t From 4bd06a3dd2a1aab11782853f68b33f6e259e37ca Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 12:46:25 +0200 Subject: [PATCH 031/297] Rootfile updates. --- config/rootfiles/common/bash | 11 +++++++---- config/rootfiles/common/hostname | 1 + config/rootfiles/common/i586/grub | 14 ++------------ 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/config/rootfiles/common/bash b/config/rootfiles/common/bash index 6afa0e45e..84f587f3c 100644 --- a/config/rootfiles/common/bash +++ b/config/rootfiles/common/bash @@ -13,10 +13,6 @@ bin/bash #usr/share/doc/bash/bash.html #usr/share/doc/bash/bashref.html #usr/share/info/bash.info -#usr/share/man/man1/bash.1 -#usr/share/man/man1/bashbug.1 -#usr/share/locale/af -#usr/share/locale/af/LC_MESSAGES #usr/share/locale/af/LC_MESSAGES/bash.mo #usr/share/locale/bg/LC_MESSAGES/bash.mo #usr/share/locale/ca/LC_MESSAGES/bash.mo @@ -27,6 +23,8 @@ bin/bash #usr/share/locale/en@boldquot #usr/share/locale/en@boldquot/LC_MESSAGES #usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo +#usr/share/locale/en@quot +#usr/share/locale/en@quot/LC_MESSAGES #usr/share/locale/en@quot/LC_MESSAGES/bash.mo #usr/share/locale/eo/LC_MESSAGES/bash.mo #usr/share/locale/es/LC_MESSAGES/bash.mo @@ -54,3 +52,8 @@ bin/bash #usr/share/locale/sv/LC_MESSAGES/bash.mo #usr/share/locale/tr/LC_MESSAGES/bash.mo #usr/share/locale/uk/LC_MESSAGES/bash.mo +#usr/share/locale/vi/LC_MESSAGES/bash.mo +#usr/share/locale/zh_CN/LC_MESSAGES/bash.mo +#usr/share/locale/zh_TW/LC_MESSAGES/bash.mo +#usr/share/man/man1/bash.1 +#usr/share/man/man1/bashbug.1 diff --git a/config/rootfiles/common/hostname b/config/rootfiles/common/hostname index 7c59b98f7..83cbfc450 100644 --- a/config/rootfiles/common/hostname +++ b/config/rootfiles/common/hostname @@ -5,5 +5,6 @@ bin/nisdomainname bin/ypdomainname #usr/share/man/man1/dnsdomainname.1 #usr/share/man/man1/domainname.1 +#usr/share/man/man1/hostname.1 #usr/share/man/man1/nisdomainname.1 #usr/share/man/man1/ypdomainname.1 diff --git a/config/rootfiles/common/i586/grub b/config/rootfiles/common/i586/grub index c1dd901f6..533014410 100644 --- a/config/rootfiles/common/i586/grub +++ b/config/rootfiles/common/i586/grub @@ -2,9 +2,7 @@ boot/grub/grub.cfg #etc/bash_completion.d #etc/bash_completion.d/grub -#etc/default etc/default/grub -etc/grub2.cfg etc/grub.d etc/grub.d/00_header etc/grub.d/10_linux @@ -13,6 +11,7 @@ etc/grub.d/30_os-prober etc/grub.d/40_custom etc/grub.d/41_custom etc/grub.d/README +etc/grub2.cfg usr/bin/grub-editenv usr/bin/grub-fstest usr/bin/grub-kbdcomp @@ -477,6 +476,7 @@ usr/lib/grub/i386-pc/zfsinfo.module usr/sbin/grub-bios-setup usr/sbin/grub-install usr/sbin/grub-mkconfig +usr/sbin/grub-mknetdir usr/sbin/grub-ofpathname usr/sbin/grub-probe usr/sbin/grub-reboot @@ -513,31 +513,21 @@ usr/share/grub/grub-mkconfig_lib #usr/share/locale/en@piglatin #usr/share/locale/en@piglatin/LC_MESSAGES #usr/share/locale/en@piglatin/LC_MESSAGES/grub.mo -#usr/share/locale/en@quot -#usr/share/locale/en@quot/LC_MESSAGES #usr/share/locale/en@quot/LC_MESSAGES/grub.mo -#usr/share/locale/eo -#usr/share/locale/eo/LC_MESSAGES #usr/share/locale/eo/LC_MESSAGES/grub.mo -#usr/share/locale/es/LC_MESSAGES/grub.mo #usr/share/locale/fi/LC_MESSAGES/grub.mo #usr/share/locale/fr/LC_MESSAGES/grub.mo -#usr/share/locale/gl/LC_MESSAGES/grub.mo #usr/share/locale/hu/LC_MESSAGES/grub.mo #usr/share/locale/id/LC_MESSAGES/grub.mo #usr/share/locale/it/LC_MESSAGES/grub.mo #usr/share/locale/ja/LC_MESSAGES/grub.mo -#usr/share/locale/lt/LC_MESSAGES/grub.mo #usr/share/locale/nl/LC_MESSAGES/grub.mo #usr/share/locale/pa #usr/share/locale/pa/LC_MESSAGES #usr/share/locale/pa/LC_MESSAGES/grub.mo #usr/share/locale/pl/LC_MESSAGES/grub.mo -#usr/share/locale/pt_BR/LC_MESSAGES/grub.mo #usr/share/locale/ru/LC_MESSAGES/grub.mo -#usr/share/locale/sl/LC_MESSAGES/grub.mo #usr/share/locale/sv/LC_MESSAGES/grub.mo -#usr/share/locale/tr/LC_MESSAGES/grub.mo #usr/share/locale/uk/LC_MESSAGES/grub.mo #usr/share/locale/vi/LC_MESSAGES/grub.mo #usr/share/locale/zh_CN/LC_MESSAGES/grub.mo From 285f03c2e8dbae672f28c665d9031da25fbbdb9c Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 12:49:56 +0200 Subject: [PATCH 032/297] coreutils: Update to 8.23. --- config/rootfiles/common/coreutils | 234 +- lfs/coreutils | 50 +- src/patches/coreutils-5.96-futimes.patch | 56 - src/patches/coreutils-5.96-i18n-1.patch | 4052 ----------------- src/patches/coreutils-5.96-rename-tee.patch | 51 - ...utils-5.96-suppress_uptime_kill_su-1.patch | 272 -- src/patches/coreutils-5.96-uname-1.patch | 204 - 7 files changed, 232 insertions(+), 4687 deletions(-) delete mode 100644 src/patches/coreutils-5.96-futimes.patch delete mode 100644 src/patches/coreutils-5.96-i18n-1.patch delete mode 100644 src/patches/coreutils-5.96-rename-tee.patch delete mode 100644 src/patches/coreutils-5.96-suppress_uptime_kill_su-1.patch delete mode 100644 src/patches/coreutils-5.96-uname-1.patch diff --git a/config/rootfiles/common/coreutils b/config/rootfiles/common/coreutils index c08e228a9..d7f2c7676 100644 --- a/config/rootfiles/common/coreutils +++ b/config/rootfiles/common/coreutils @@ -1,4 +1,4 @@ -#bin/[ +bin/[ bin/chgrp bin/chmod bin/chown @@ -22,69 +22,244 @@ bin/true bin/uname etc/DIR_COLORS usr/bin/[ +usr/bin/arch +usr/bin/base64 usr/bin/basename -#usr/bin/cksum -#usr/bin/comm -#usr/bin/csplit +usr/bin/chcon +usr/bin/cksum +usr/bin/comm +usr/bin/csplit usr/bin/cut -#usr/bin/dir +usr/bin/dir usr/bin/dircolors usr/bin/dirname usr/bin/du usr/bin/env -#usr/bin/expand +usr/bin/expand usr/bin/expr -#usr/bin/factor -#usr/bin/fmt +usr/bin/factor +usr/bin/fmt usr/bin/fold usr/bin/groups usr/bin/hostid usr/bin/id usr/bin/install usr/bin/join -#usr/bin/link -#usr/bin/logname +usr/bin/link +usr/bin/logname usr/bin/md5sum usr/bin/mkfifo -#usr/bin/nl +usr/bin/mktemp +usr/bin/nl usr/bin/nohup -#usr/bin/od +usr/bin/nproc +usr/bin/numfmt +usr/bin/od usr/bin/paste -#usr/bin/pathchk -#usr/bin/pinky -#usr/bin/pr -#usr/bin/printenv +usr/bin/pathchk +usr/bin/pinky +usr/bin/pr +usr/bin/printenv usr/bin/printf -#usr/bin/ptx +usr/bin/ptx usr/bin/readlink +usr/bin/realpath +usr/bin/runcon usr/bin/seq usr/bin/sha1sum +usr/bin/sha224sum +usr/bin/sha256sum +usr/bin/sha384sum +usr/bin/sha512sum usr/bin/shred +usr/bin/shuf usr/bin/sort usr/bin/split usr/bin/stat -#usr/bin/sum -#usr/bin/tac +#usr/bin/stdbuf +usr/bin/sum +usr/bin/tac usr/bin/tail usr/bin/tee usr/bin/test +usr/bin/timeout usr/bin/touch usr/bin/tr -#usr/bin/tsort +usr/bin/truncate +usr/bin/tsort usr/bin/tty usr/bin/unexpand usr/bin/uniq usr/bin/unlink -#usr/bin/users -#usr/bin/vdir +usr/bin/uptime +usr/bin/users +usr/bin/vdir usr/bin/wc usr/bin/who usr/bin/whoami usr/bin/yes +#usr/libexec +#usr/libexec/coreutils +#usr/libexec/coreutils/libstdbuf.so usr/sbin/chroot #usr/share/info/coreutils.info +#usr/share/locale/af +#usr/share/locale/af/LC_MESSAGES +#usr/share/locale/af/LC_MESSAGES/coreutils.mo +#usr/share/locale/af/LC_TIME +#usr/share/locale/af/LC_TIME/coreutils.mo +#usr/share/locale/be/LC_MESSAGES/coreutils.mo +#usr/share/locale/be/LC_TIME +#usr/share/locale/be/LC_TIME/coreutils.mo +#usr/share/locale/bg/LC_MESSAGES/coreutils.mo +#usr/share/locale/bg/LC_TIME +#usr/share/locale/bg/LC_TIME/coreutils.mo +#usr/share/locale/ca/LC_MESSAGES/coreutils.mo +#usr/share/locale/ca/LC_TIME +#usr/share/locale/ca/LC_TIME/coreutils.mo +#usr/share/locale/cs/LC_MESSAGES/coreutils.mo +#usr/share/locale/cs/LC_TIME +#usr/share/locale/cs/LC_TIME/coreutils.mo +#usr/share/locale/da/LC_MESSAGES/coreutils.mo +#usr/share/locale/da/LC_TIME +#usr/share/locale/da/LC_TIME/coreutils.mo +#usr/share/locale/de/LC_MESSAGES/coreutils.mo +#usr/share/locale/de/LC_TIME +#usr/share/locale/de/LC_TIME/coreutils.mo +#usr/share/locale/el/LC_MESSAGES/coreutils.mo +#usr/share/locale/el/LC_TIME +#usr/share/locale/el/LC_TIME/coreutils.mo +#usr/share/locale/eo +#usr/share/locale/eo/LC_MESSAGES +#usr/share/locale/eo/LC_MESSAGES/coreutils.mo +#usr/share/locale/eo/LC_TIME +#usr/share/locale/eo/LC_TIME/coreutils.mo +#usr/share/locale/es/LC_MESSAGES/coreutils.mo +#usr/share/locale/es/LC_TIME +#usr/share/locale/es/LC_TIME/coreutils.mo +#usr/share/locale/et +#usr/share/locale/et/LC_MESSAGES +#usr/share/locale/et/LC_MESSAGES/coreutils.mo +#usr/share/locale/et/LC_TIME +#usr/share/locale/et/LC_TIME/coreutils.mo +#usr/share/locale/eu +#usr/share/locale/eu/LC_MESSAGES +#usr/share/locale/eu/LC_MESSAGES/coreutils.mo +#usr/share/locale/eu/LC_TIME +#usr/share/locale/eu/LC_TIME/coreutils.mo +#usr/share/locale/fi/LC_MESSAGES/coreutils.mo +#usr/share/locale/fi/LC_TIME +#usr/share/locale/fi/LC_TIME/coreutils.mo +#usr/share/locale/fr/LC_MESSAGES/coreutils.mo +#usr/share/locale/fr/LC_TIME +#usr/share/locale/fr/LC_TIME/coreutils.mo +#usr/share/locale/ga +#usr/share/locale/ga/LC_MESSAGES +#usr/share/locale/ga/LC_MESSAGES/coreutils.mo +#usr/share/locale/ga/LC_TIME +#usr/share/locale/ga/LC_TIME/coreutils.mo +#usr/share/locale/gl/LC_MESSAGES/coreutils.mo +#usr/share/locale/gl/LC_TIME +#usr/share/locale/gl/LC_TIME/coreutils.mo +#usr/share/locale/hr/LC_MESSAGES/coreutils.mo +#usr/share/locale/hr/LC_TIME +#usr/share/locale/hr/LC_TIME/coreutils.mo +#usr/share/locale/hu/LC_MESSAGES/coreutils.mo +#usr/share/locale/hu/LC_TIME +#usr/share/locale/hu/LC_TIME/coreutils.mo +#usr/share/locale/ia +#usr/share/locale/ia/LC_MESSAGES +#usr/share/locale/ia/LC_MESSAGES/coreutils.mo +#usr/share/locale/ia/LC_TIME +#usr/share/locale/ia/LC_TIME/coreutils.mo +#usr/share/locale/id/LC_MESSAGES/coreutils.mo +#usr/share/locale/id/LC_TIME +#usr/share/locale/id/LC_TIME/coreutils.mo +#usr/share/locale/it/LC_MESSAGES/coreutils.mo +#usr/share/locale/it/LC_TIME +#usr/share/locale/it/LC_TIME/coreutils.mo +#usr/share/locale/ja/LC_MESSAGES/coreutils.mo +#usr/share/locale/ja/LC_TIME +#usr/share/locale/ja/LC_TIME/coreutils.mo +#usr/share/locale/kk +#usr/share/locale/kk/LC_MESSAGES +#usr/share/locale/kk/LC_MESSAGES/coreutils.mo +#usr/share/locale/kk/LC_TIME +#usr/share/locale/kk/LC_TIME/coreutils.mo +#usr/share/locale/ko/LC_MESSAGES/coreutils.mo +#usr/share/locale/ko/LC_TIME +#usr/share/locale/ko/LC_TIME/coreutils.mo +#usr/share/locale/lg +#usr/share/locale/lg/LC_MESSAGES +#usr/share/locale/lg/LC_MESSAGES/coreutils.mo +#usr/share/locale/lg/LC_TIME +#usr/share/locale/lg/LC_TIME/coreutils.mo +#usr/share/locale/lt/LC_MESSAGES/coreutils.mo +#usr/share/locale/lt/LC_TIME +#usr/share/locale/lt/LC_TIME/coreutils.mo +#usr/share/locale/ms +#usr/share/locale/ms/LC_MESSAGES +#usr/share/locale/ms/LC_MESSAGES/coreutils.mo +#usr/share/locale/ms/LC_TIME +#usr/share/locale/ms/LC_TIME/coreutils.mo +#usr/share/locale/nb/LC_MESSAGES/coreutils.mo +#usr/share/locale/nb/LC_TIME +#usr/share/locale/nb/LC_TIME/coreutils.mo +#usr/share/locale/nl/LC_MESSAGES/coreutils.mo +#usr/share/locale/nl/LC_TIME +#usr/share/locale/nl/LC_TIME/coreutils.mo +#usr/share/locale/pl/LC_MESSAGES/coreutils.mo +#usr/share/locale/pl/LC_TIME +#usr/share/locale/pl/LC_TIME/coreutils.mo +#usr/share/locale/pt +#usr/share/locale/pt/LC_MESSAGES +#usr/share/locale/pt/LC_MESSAGES/coreutils.mo +#usr/share/locale/pt/LC_TIME +#usr/share/locale/pt/LC_TIME/coreutils.mo +#usr/share/locale/pt_BR/LC_MESSAGES/coreutils.mo +#usr/share/locale/pt_BR/LC_TIME +#usr/share/locale/pt_BR/LC_TIME/coreutils.mo +#usr/share/locale/ro +#usr/share/locale/ro/LC_MESSAGES +#usr/share/locale/ro/LC_MESSAGES/coreutils.mo +#usr/share/locale/ro/LC_TIME +#usr/share/locale/ro/LC_TIME/coreutils.mo +#usr/share/locale/ru/LC_MESSAGES/coreutils.mo +#usr/share/locale/ru/LC_TIME +#usr/share/locale/ru/LC_TIME/coreutils.mo +#usr/share/locale/sk/LC_MESSAGES/coreutils.mo +#usr/share/locale/sk/LC_TIME +#usr/share/locale/sk/LC_TIME/coreutils.mo +#usr/share/locale/sl +#usr/share/locale/sl/LC_MESSAGES +#usr/share/locale/sl/LC_MESSAGES/coreutils.mo +#usr/share/locale/sl/LC_TIME +#usr/share/locale/sl/LC_TIME/coreutils.mo +#usr/share/locale/sv/LC_MESSAGES/coreutils.mo +#usr/share/locale/sv/LC_TIME +#usr/share/locale/sv/LC_TIME/coreutils.mo +#usr/share/locale/tr/LC_MESSAGES/coreutils.mo +#usr/share/locale/tr/LC_TIME +#usr/share/locale/tr/LC_TIME/coreutils.mo +#usr/share/locale/uk +#usr/share/locale/uk/LC_MESSAGES +#usr/share/locale/uk/LC_MESSAGES/coreutils.mo +#usr/share/locale/uk/LC_TIME +#usr/share/locale/uk/LC_TIME/coreutils.mo +#usr/share/locale/vi/LC_MESSAGES/coreutils.mo +#usr/share/locale/vi/LC_TIME +#usr/share/locale/vi/LC_TIME/coreutils.mo +#usr/share/locale/zh_CN/LC_MESSAGES/coreutils.mo +#usr/share/locale/zh_CN/LC_TIME +#usr/share/locale/zh_CN/LC_TIME/coreutils.mo +#usr/share/locale/zh_TW/LC_MESSAGES/coreutils.mo +#usr/share/locale/zh_TW/LC_TIME +#usr/share/locale/zh_TW/LC_TIME/coreutils.mo +#usr/share/man/man1/arch.1 +#usr/share/man/man1/base64.1 #usr/share/man/man1/basename.1 #usr/share/man/man1/cat.1 +#usr/share/man/man1/chcon.1 #usr/share/man/man1/chroot.1 #usr/share/man/man1/cksum.1 #usr/share/man/man1/comm.1 @@ -103,15 +278,17 @@ usr/sbin/chroot #usr/share/man/man1/groups.1 #usr/share/man/man1/head.1 #usr/share/man/man1/hostid.1 -#usr/share/man/man1/hostname.1 #usr/share/man/man1/id.1 #usr/share/man/man1/join.1 #usr/share/man/man1/link.1 #usr/share/man/man1/logname.1 #usr/share/man/man1/md5sum.1 +#usr/share/man/man1/mktemp.1 #usr/share/man/man1/nice.1 #usr/share/man/man1/nl.1 #usr/share/man/man1/nohup.1 +#usr/share/man/man1/nproc.1 +#usr/share/man/man1/numfmt.1 #usr/share/man/man1/od.1 #usr/share/man/man1/paste.1 #usr/share/man/man1/pathchk.1 @@ -122,13 +299,21 @@ usr/sbin/chroot #usr/share/man/man1/ptx.1 #usr/share/man/man1/pwd.1 #usr/share/man/man1/readlink.1 +#usr/share/man/man1/realpath.1 +#usr/share/man/man1/runcon.1 #usr/share/man/man1/seq.1 #usr/share/man/man1/sha1sum.1 +#usr/share/man/man1/sha224sum.1 +#usr/share/man/man1/sha256sum.1 +#usr/share/man/man1/sha384sum.1 +#usr/share/man/man1/sha512sum.1 #usr/share/man/man1/shred.1 +#usr/share/man/man1/shuf.1 #usr/share/man/man1/sleep.1 #usr/share/man/man1/sort.1 #usr/share/man/man1/split.1 #usr/share/man/man1/stat.1 +#usr/share/man/man1/stdbuf.1 #usr/share/man/man1/stty.1 #usr/share/man/man1/sum.1 #usr/share/man/man1/sync.1 @@ -136,14 +321,17 @@ usr/sbin/chroot #usr/share/man/man1/tail.1 #usr/share/man/man1/tee.1 #usr/share/man/man1/test.1 +#usr/share/man/man1/timeout.1 #usr/share/man/man1/tr.1 #usr/share/man/man1/true.1 +#usr/share/man/man1/truncate.1 #usr/share/man/man1/tsort.1 #usr/share/man/man1/tty.1 #usr/share/man/man1/uname.1 #usr/share/man/man1/unexpand.1 #usr/share/man/man1/uniq.1 #usr/share/man/man1/unlink.1 +#usr/share/man/man1/uptime.1 #usr/share/man/man1/users.1 #usr/share/man/man1/wc.1 #usr/share/man/man1/who.1 diff --git a/lfs/coreutils b/lfs/coreutils index d0f35c205..63d0a8898 100644 --- a/lfs/coreutils +++ b/lfs/coreutils @@ -24,10 +24,10 @@ include Config -VER = 5.96 +VER = 8.23 THISAPP = coreutils-$(VER) -DL_FILE = $(THISAPP).tar.bz2 +DL_FILE = $(THISAPP).tar.xz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) @@ -35,17 +35,22 @@ DIR_APP = $(DIR_SRC)/$(THISAPP) # ifeq "$(ROOT)" "" TARGET = $(DIR_INFO)/$(THISAPP) - EXTRA_CONFIG = --prefix=/usr --disable-nls - EXTRA_MAKE = - EXTRA_INSTALL = + CONFIGURE_OPTIONS = --prefix=/usr else TARGET = $(DIR_INFO)/$(THISAPP)-tools - EXTRA_CONFIG = --prefix=/tools --disable-nls - EXTRA_MAKE = - EXTRA_INSTALL = + CONFIGURE_OPTIONS = --prefix=/tools endif -EXTRA_CONFIG += ac_cv_func_working_mktime=yes +CONFIGURE_OPTIONS += \ + --disable-selinux \ + --enable-largefile \ + --disable-rpath \ + --enable-install-program=arch \ + --enable-no-install-program=hostname,kill \ + --with-tty-group \ + gl_cv_func_mknod_works=yes + +CFLAGS += -fno-strict-aliasing ############################################################################### # Top-level Rules @@ -55,7 +60,7 @@ objects =$(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = bf55d069d82128fd754a090ce8b5acff +$(DL_FILE)_MD5 = abed135279f87ad6762ce57ff6d89c41 install : $(TARGET) @@ -84,24 +89,12 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/coreutils-5.96-rename-tee.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/coreutils-5.96-futimes.patch + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install + ifeq "$(ROOT)" "" -ifeq "$(MACHINE)" "i586" - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-uname-1.patch -endif - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-suppress_uptime_kill_su-1.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-i18n-1.patch - cd $(DIR_APP) && chmod +x tests/sort/sort-mb-tests - cd $(DIR_APP) && sed -i 's/_LEN 6/_LEN 20/' src/who.c -endif - cd $(DIR_APP) && ./configure $(EXTRA_CONFIG) - cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE) - cd $(DIR_APP) && make $(EXTRA_INSTALL) install - #use hostname from inet-tools -ifeq "$(ROOT)" "" - rm /usr/bin/hostname mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin @@ -110,8 +103,7 @@ ifeq "$(ROOT)" "" ln -sf test /bin/[ #ln -sf ../../bin/install /usr/bin dircolors -p > /etc/DIR_COLORS -else - rm /tools/bin/hostname endif + @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/patches/coreutils-5.96-futimes.patch b/src/patches/coreutils-5.96-futimes.patch deleted file mode 100644 index e91f1df02..000000000 --- a/src/patches/coreutils-5.96-futimes.patch +++ /dev/null @@ -1,56 +0,0 @@ ---- coreutils-6.0.orig/lib/utimens.c 2006-06-11 09:14:31.000000000 +0200 -+++ coreutils-6.0/lib/utimens.c 2007-07-17 00:41:08.000000000 +0200 -@@ -75,7 +75,7 @@ - Return 0 on success, -1 (setting errno) on failure. */ - - int --futimens (int fd ATTRIBUTE_UNUSED, -+cu_futimens (int fd ATTRIBUTE_UNUSED, - char const *file, struct timespec const timespec[2]) - { - /* There's currently no interface to set file timestamps with -@@ -168,5 +168,5 @@ - int - utimens (char const *file, struct timespec const timespec[2]) - { -- return futimens (-1, file, timespec); -+ return cu_futimens (-1, file, timespec); - } ---- coreutils-6.0.orig/lib/utimens.h 2004-11-23 21:41:51.000000000 +0100 -+++ coreutils-6.0/lib/utimens.h 2007-07-17 00:41:31.000000000 +0200 -@@ -1,3 +1,3 @@ - #include "timespec.h" --int futimens (int, char const *, struct timespec const [2]); -+int cu_futimens (int, char const *, struct timespec const [2]); - int utimens (char const *, struct timespec const [2]); ---- coreutils-6.0.orig/src/copy.c 2007-07-16 23:18:42.000000000 +0200 -+++ coreutils-6.0/src/copy.c 2007-07-17 00:43:10.000000000 +0200 -@@ -648,7 +648,7 @@ - timespec[0] = get_stat_atime (src_sb); - timespec[1] = get_stat_mtime (src_sb); - -- if (futimens (dest_desc, dst_name, timespec) != 0) -+ if (cu_futimens (dest_desc, dst_name, timespec) != 0) - { - error (0, errno, _("preserving times for %s"), quote (dst_name)); - if (x->require_preserve) ---- coreutils-6.0.orig/src/touch.c 2005-11-02 11:01:07.000000000 +0100 -+++ coreutils-6.0/src/touch.c 2007-07-17 00:43:51.000000000 +0200 -@@ -167,7 +167,7 @@ - - if (amtime_now) - { -- /* Pass NULL to futimens so it will not fail if we have -+ /* Pass NULL to cu_futimens so it will not fail if we have - write access to the file, but don't own it. */ - t = NULL; - } -@@ -182,7 +182,7 @@ - t = timespec; - } - -- ok = (futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0); -+ ok = (cu_futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0); - - if (fd == STDIN_FILENO) - { diff --git a/src/patches/coreutils-5.96-i18n-1.patch b/src/patches/coreutils-5.96-i18n-1.patch deleted file mode 100644 index d1c8cf044..000000000 --- a/src/patches/coreutils-5.96-i18n-1.patch +++ /dev/null @@ -1,4052 +0,0 @@ -Submitted by: Alexander E. Patrakov -Date: 2005-11-12 -Initial Package Version: 5.93 -Upstream Status: Not accepted, but planned for 6.0 -Origin: RedHat CVS, see below how to regenerate -http://cvs.fedora.redhat.com/viewcvs/*checkout*/devel/coreutils/coreutils-i18n.patch?rev=1.14 -Description: This patch fixes various problems with multibyte character support. -LSB >= 2.0 tests for features added by this patch, but only Coreutils-5.2.1 plus -http://www.linuxfromscratch.org/~alexander/patches/coreutils-5.2.1-i18n_fixes-1.patch -actually pass the Li18nux2000-level1 testsuite. - -To regenerate: -Get http://cvs.fedora.redhat.com/viewcvs/*checkout*/devel/coreutils/coreutils-i18n.patch?rev=1.14 -Replace the coreutils-5.93/tests/sort/Makefile.in hunk with that from rev 1.13 -Add this header. - ---- coreutils-5.93/lib/linebuffer.h.i18n 2005-05-14 08:58:06.000000000 +0100 -+++ coreutils-5.93/lib/linebuffer.h 2005-12-23 08:53:01.000000000 +0000 -@@ -22,6 +22,11 @@ - - # include - -+/* Get mbstate_t. */ -+# if HAVE_WCHAR_H -+# include -+# endif -+ - /* A `struct linebuffer' holds a line of text. */ - - struct linebuffer -@@ -29,6 +34,9 @@ - size_t size; /* Allocated. */ - size_t length; /* Used. */ - char *buffer; -+# if HAVE_WCHAR_H -+ mbstate_t state; -+# endif - }; - - /* Initialize linebuffer LINEBUFFER for use. */ ---- coreutils-5.93/src/cut.c.i18n 2005-08-12 08:16:25.000000000 +0100 -+++ coreutils-5.93/src/cut.c 2005-12-23 08:53:01.000000000 +0000 -@@ -29,6 +29,11 @@ - #include - #include - #include -+ -+/* Get mbstate_t, mbrtowc(). */ -+#if HAVE_WCHAR_H -+# include -+#endif - #include "system.h" - - #include "error.h" -@@ -37,6 +42,18 @@ - #include "quote.h" - #include "xstrndup.h" - -+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC -+ installation; work around this configuration error. */ -+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2 -+# undef MB_LEN_MAX -+# define MB_LEN_MAX 16 -+#endif -+ -+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ -+#if HAVE_MBRTOWC && defined mbstate_t -+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0) -+#endif -+ - /* The official name of this program (e.g., no `g' prefix). */ - #define PROGRAM_NAME "cut" - -@@ -67,6 +84,52 @@ - } \ - while (0) - -+/* Refill the buffer BUF to get a multibyte character. */ -+#define REFILL_BUFFER(BUF, BUFPOS, BUFLEN, STREAM) \ -+ do \ -+ { \ -+ if (BUFLEN < MB_LEN_MAX && !feof (STREAM) && !ferror (STREAM)) \ -+ { \ -+ memmove (BUF, BUFPOS, BUFLEN); \ -+ BUFLEN += fread (BUF + BUFLEN, sizeof(char), BUFSIZ, STREAM); \ -+ BUFPOS = BUF; \ -+ } \ -+ } \ -+ while (0) -+ -+/* Get wide character on BUFPOS. BUFPOS is not included after that. -+ If byte sequence is not valid as a character, CONVFAIL is 1. Otherwise 0. */ -+#define GET_NEXT_WC_FROM_BUFFER(WC, BUFPOS, BUFLEN, MBLENGTH, STATE, CONVFAIL) \ -+ do \ -+ { \ -+ mbstate_t state_bak; \ -+ \ -+ if (BUFLEN < 1) \ -+ { \ -+ WC = WEOF; \ -+ break; \ -+ } \ -+ \ -+ /* Get a wide character. */ \ -+ CONVFAIL = 0; \ -+ state_bak = STATE; \ -+ MBLENGTH = mbrtowc ((wchar_t *)&WC, BUFPOS, BUFLEN, &STATE); \ -+ \ -+ switch (MBLENGTH) \ -+ { \ -+ case (size_t)-1: \ -+ case (size_t)-2: \ -+ CONVFAIL++; \ -+ STATE = state_bak; \ -+ /* Fall througn. */ \ -+ \ -+ case 0: \ -+ MBLENGTH = 1; \ -+ break; \ -+ } \ -+ } \ -+ while (0) -+ - struct range_pair - { - size_t lo; -@@ -85,7 +148,7 @@ - /* The number of bytes allocated for FIELD_1_BUFFER. */ - static size_t field_1_bufsize; - --/* The largest field or byte index used as an endpoint of a closed -+/* The largest byte, character or field index used as an endpoint of a closed - or degenerate range specification; this doesn't include the starting - index of right-open-ended ranges. For example, with either range spec - `2-5,9-', `2-3,5,9-' this variable would be set to 5. */ -@@ -97,10 +160,11 @@ - - /* This is a bit vector. - In byte mode, which bytes to output. -+ In character mode, which characters to output. - In field mode, which DELIM-separated fields to output. -- Both bytes and fields are numbered starting with 1, -+ Bytes, characters and fields are numbered starting with 1, - so the zeroth bit of this array is unused. -- A field or byte K has been selected if -+ A byte, character or field K has been selected if - (K <= MAX_RANGE_ENDPOINT and is_printable_field(K)) - || (EOL_RANGE_START > 0 && K >= EOL_RANGE_START). */ - static unsigned char *printable_field; -@@ -109,9 +173,12 @@ - { - undefined_mode, - -- /* Output characters that are in the given bytes. */ -+ /* Output bytes that are at the given positions. */ - byte_mode, - -+ /* Output characters that are at the given positions. */ -+ character_mode, -+ - /* Output the given delimeter-separated fields. */ - field_mode - }; -@@ -121,6 +188,13 @@ - - static enum operating_mode operating_mode; - -+/* If nonzero, when in byte mode, don't split multibyte characters. */ -+static int byte_mode_character_aware; -+ -+/* If nonzero, the function for single byte locale is work -+ if this program runs on multibyte locale. */ -+static int force_singlebyte_mode; -+ - /* If true do not output lines containing no delimeter characters. - Otherwise, all such lines are printed. This option is valid only - with field mode. */ -@@ -132,6 +206,9 @@ - - /* The delimeter character for field mode. */ - static unsigned char delim; -+#if HAVE_WCHAR_H -+static wchar_t wcdelim; -+#endif - - /* True if the --output-delimiter=STRING option was specified. */ - static bool output_delimiter_specified; -@@ -205,7 +282,7 @@ - -f, --fields=LIST select only these fields; also print any line\n\ - that contains no delimiter character, unless\n\ - the -s option is specified\n\ -- -n (ignored)\n\ -+ -n with -b: don't split multibyte characters\n\ - "), stdout); - fputs (_("\ - --complement complement the set of selected bytes, characters\n\ -@@ -360,7 +437,7 @@ - in_digits = false; - /* Starting a range. */ - if (dash_found) -- FATAL_ERROR (_("invalid byte or field list")); -+ FATAL_ERROR (_("invalid byte, character or field list")); - dash_found = true; - fieldstr++; - -@@ -385,14 +462,16 @@ - if (value == 0) - { - /* `n-'. From `initial' to end of line. */ -- eol_range_start = initial; -+ if (eol_range_start == 0 || -+ (eol_range_start != 0 && eol_range_start > initial)) -+ eol_range_start = initial; - field_found = true; - } - else - { - /* `m-n' or `-n' (1-n). */ - if (value < initial) -- FATAL_ERROR (_("invalid byte or field list")); -+ FATAL_ERROR (_("invalid byte, character or field list")); - - /* Is there already a range going to end of line? */ - if (eol_range_start != 0) -@@ -465,6 +544,9 @@ - if (operating_mode == byte_mode) - error (0, 0, - _("byte offset %s is too large"), quote (bad_num)); -+ else if (operating_mode == character_mode) -+ error (0, 0, -+ _("character offset %s is too large"), quote (bad_num)); - else - error (0, 0, - _("field number %s is too large"), quote (bad_num)); -@@ -475,7 +557,7 @@ - fieldstr++; - } - else -- FATAL_ERROR (_("invalid byte or field list")); -+ FATAL_ERROR (_("invalid byte, character or field list")); - } - - max_range_endpoint = 0; -@@ -568,6 +650,63 @@ - } - } - -+#if HAVE_MBRTOWC -+/* This function is in use for the following case. -+ -+ 1. Read from the stream STREAM, printing to standard output any selected -+ characters. -+ -+ 2. Read from stream STREAM, printing to standard output any selected bytes, -+ without splitting multibyte characters. */ -+ -+static void -+cut_characters_or_cut_bytes_no_split (FILE *stream) -+{ -+ int idx; /* number of bytes or characters in the line so far. */ -+ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */ -+ char *bufpos; /* Next read position of BUF. */ -+ size_t buflen; /* The length of the byte sequence in buf. */ -+ wint_t wc; /* A gotten wide character. */ -+ size_t mblength; /* The byte size of a multibyte character which shows -+ as same character as WC. */ -+ mbstate_t state; /* State of the stream. */ -+ int convfail; /* 1, when conversion is failed. Otherwise 0. */ -+ -+ idx = 0; -+ buflen = 0; -+ bufpos = buf; -+ memset (&state, '\0', sizeof(mbstate_t)); -+ -+ while (1) -+ { -+ REFILL_BUFFER (buf, bufpos, buflen, stream); -+ -+ GET_NEXT_WC_FROM_BUFFER (wc, bufpos, buflen, mblength, state, convfail); -+ -+ if (wc == WEOF) -+ { -+ if (idx > 0) -+ putchar ('\n'); -+ break; -+ } -+ else if (wc == L'\n') -+ { -+ putchar ('\n'); -+ idx = 0; -+ } -+ else -+ { -+ idx += (operating_mode == byte_mode) ? mblength : 1; -+ if (print_kth (idx, NULL)) -+ fwrite (bufpos, mblength, sizeof(char), stdout); -+ } -+ -+ buflen -= mblength; -+ bufpos += mblength; -+ } -+} -+#endif -+ - /* Read from stream STREAM, printing to standard output any selected fields. */ - - static void -@@ -689,13 +828,192 @@ - } - } - -+#if HAVE_MBRTOWC -+static void -+cut_fields_mb (FILE *stream) -+{ -+ int c; -+ unsigned int field_idx; -+ int found_any_selected_field; -+ int buffer_first_field; -+ int empty_input; -+ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */ -+ char *bufpos; /* Next read position of BUF. */ -+ size_t buflen; /* The length of the byte sequence in buf. */ -+ wint_t wc = 0; /* A gotten wide character. */ -+ size_t mblength; /* The byte size of a multibyte character which shows -+ as same character as WC. */ -+ mbstate_t state; /* State of the stream. */ -+ int convfail; /* 1, when conversion is failed. Otherwise 0. */ -+ -+ found_any_selected_field = 0; -+ field_idx = 1; -+ bufpos = buf; -+ buflen = 0; -+ memset (&state, '\0', sizeof(mbstate_t)); -+ -+ c = getc (stream); -+ empty_input = (c == EOF); -+ if (c != EOF) -+ ungetc (c, stream); -+ else -+ wc = WEOF; -+ -+ /* To support the semantics of the -s flag, we may have to buffer -+ all of the first field to determine whether it is `delimited.' -+ But that is unnecessary if all non-delimited lines must be printed -+ and the first field has been selected, or if non-delimited lines -+ must be suppressed and the first field has *not* been selected. -+ That is because a non-delimited line has exactly one field. */ -+ buffer_first_field = (suppress_non_delimited ^ !print_kth (1, NULL)); -+ -+ while (1) -+ { -+ if (field_idx == 1 && buffer_first_field) -+ { -+ int len = 0; -+ -+ while (1) -+ { -+ REFILL_BUFFER (buf, bufpos, buflen, stream); -+ -+ GET_NEXT_WC_FROM_BUFFER -+ (wc, bufpos, buflen, mblength, state, convfail); -+ -+ if (wc == WEOF) -+ break; -+ -+ field_1_buffer = xrealloc (field_1_buffer, len + mblength); -+ memcpy (field_1_buffer + len, bufpos, mblength); -+ len += mblength; -+ buflen -= mblength; -+ bufpos += mblength; -+ -+ if (!convfail && (wc == L'\n' || wc == wcdelim)) -+ break; -+ } -+ -+ if (wc == WEOF) -+ break; -+ -+ /* If the first field extends to the end of line (it is not -+ delimited) and we are printing all non-delimited lines, -+ print this one. */ -+ if (convfail || (!convfail && wc != wcdelim)) -+ { -+ if (suppress_non_delimited) -+ { -+ /* Empty. */ -+ } -+ else -+ { -+ fwrite (field_1_buffer, sizeof (char), len, stdout); -+ /* Make sure the output line is newline terminated. */ -+ if (convfail || (!convfail && wc != L'\n')) -+ putchar ('\n'); -+ } -+ continue; -+ } -+ -+ if (print_kth (1, NULL)) -+ { -+ /* Print the field, but not the trailing delimiter. */ -+ fwrite (field_1_buffer, sizeof (char), len - 1, stdout); -+ found_any_selected_field = 1; -+ } -+ ++field_idx; -+ } -+ -+ if (wc != WEOF) -+ { -+ if (print_kth (field_idx, NULL)) -+ { -+ if (found_any_selected_field) -+ { -+ fwrite (output_delimiter_string, sizeof (char), -+ output_delimiter_length, stdout); -+ } -+ found_any_selected_field = 1; -+ } -+ -+ while (1) -+ { -+ REFILL_BUFFER (buf, bufpos, buflen, stream); -+ -+ GET_NEXT_WC_FROM_BUFFER -+ (wc, bufpos, buflen, mblength, state, convfail); -+ -+ if (wc == WEOF) -+ break; -+ else if (!convfail && (wc == wcdelim || wc == L'\n')) -+ { -+ buflen -= mblength; -+ bufpos += mblength; -+ break; -+ } -+ -+ if (print_kth (field_idx, NULL)) -+ fwrite (bufpos, mblength, sizeof(char), stdout); -+ -+ buflen -= mblength; -+ bufpos += mblength; -+ } -+ } -+ -+ if ((!convfail || wc == L'\n') && buflen < 1) -+ wc = WEOF; -+ -+ if (!convfail && wc == wcdelim) -+ ++field_idx; -+ else if (wc == WEOF || (!convfail && wc == L'\n')) -+ { -+ if (found_any_selected_field -+ || (!empty_input && !(suppress_non_delimited && field_idx == 1))) -+ putchar ('\n'); -+ if (wc == WEOF) -+ break; -+ field_idx = 1; -+ found_any_selected_field = 0; -+ } -+ } -+} -+#endif -+ - static void - cut_stream (FILE *stream) - { -- if (operating_mode == byte_mode) -- cut_bytes (stream); -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1 && !force_singlebyte_mode) -+ { -+ switch (operating_mode) -+ { -+ case byte_mode: -+ if (byte_mode_character_aware) -+ cut_characters_or_cut_bytes_no_split (stream); -+ else -+ cut_bytes (stream); -+ break; -+ -+ case character_mode: -+ cut_characters_or_cut_bytes_no_split (stream); -+ break; -+ -+ case field_mode: -+ cut_fields_mb (stream); -+ break; -+ -+ default: -+ abort (); -+ } -+ } - else -- cut_fields (stream); -+#endif -+ { -+ if (operating_mode == field_mode) -+ cut_fields (stream); -+ else -+ cut_bytes (stream); -+ } - } - - /* Process file FILE to standard output. -@@ -745,6 +1063,8 @@ - bool ok; - bool delim_specified = false; - char *spec_list_string IF_LINT(= NULL); -+ char mbdelim[MB_LEN_MAX + 1]; -+ size_t delimlen = 0; - - initialize_main (&argc, &argv); - program_name = argv[0]; -@@ -767,7 +1087,6 @@ - switch (optc) - { - case 'b': -- case 'c': - /* Build the byte list. */ - if (operating_mode != undefined_mode) - FATAL_ERROR (_("only one type of list may be specified")); -@@ -775,6 +1094,14 @@ - spec_list_string = optarg; - break; - -+ case 'c': -+ /* Build the character list. */ -+ if (operating_mode != undefined_mode) -+ FATAL_ERROR (_("only one type of list may be specified")); -+ operating_mode = character_mode; -+ spec_list_string = optarg; -+ break; -+ - case 'f': - /* Build the field list. */ - if (operating_mode != undefined_mode) -@@ -786,10 +1113,35 @@ - case 'd': - /* New delimiter. */ - /* Interpret -d '' to mean `use the NUL byte as the delimiter.' */ -- if (optarg[0] != '\0' && optarg[1] != '\0') -- FATAL_ERROR (_("the delimiter must be a single character")); -- delim = optarg[0]; -- delim_specified = true; -+#if HAVE_MBRTOWC -+ { -+ if(MB_CUR_MAX > 1) -+ { -+ mbstate_t state; -+ -+ memset (&state, '\0', sizeof(mbstate_t)); -+ delimlen = mbrtowc (&wcdelim, optarg, strnlen(optarg, MB_LEN_MAX), &state); -+ -+ if (delimlen == (size_t)-1 || delimlen == (size_t)-2) -+ ++force_singlebyte_mode; -+ else -+ { -+ delimlen = (delimlen < 1) ? 1 : delimlen; -+ if (wcdelim != L'\0' && *(optarg + delimlen) != '\0') -+ FATAL_ERROR (_("the delimiter must be a single character")); -+ memcpy (mbdelim, optarg, delimlen); -+ } -+ } -+ -+ if (MB_CUR_MAX <= 1 || force_singlebyte_mode) -+#endif -+ { -+ if (optarg[0] != '\0' && optarg[1] != '\0') -+ FATAL_ERROR (_("the delimiter must be a single character")); -+ delim = (unsigned char) optarg[0]; -+ } -+ delim_specified = true; -+ } - break; - - case OUTPUT_DELIMITER_OPTION: -@@ -802,6 +1154,7 @@ - break; - - case 'n': -+ byte_mode_character_aware = 1; - break; - - case 's': -@@ -824,7 +1177,7 @@ - if (operating_mode == undefined_mode) - FATAL_ERROR (_("you must specify a list of bytes, characters, or fields")); - -- if (delim != '\0' && operating_mode != field_mode) -+ if (delim_specified && operating_mode != field_mode) - FATAL_ERROR (_("an input delimiter may be specified only\ - when operating on fields")); - -@@ -851,15 +1204,34 @@ - } - - if (!delim_specified) -- delim = '\t'; -+ { -+ delim = '\t'; -+#ifdef HAVE_MBRTOWC -+ wcdelim = L'\t'; -+ mbdelim[0] = '\t'; -+ mbdelim[1] = '\0'; -+ delimlen = 1; -+#endif -+ } - - if (output_delimiter_string == NULL) - { -- static char dummy[2]; -- dummy[0] = delim; -- dummy[1] = '\0'; -- output_delimiter_string = dummy; -- output_delimiter_length = 1; -+#ifdef HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1 && !force_singlebyte_mode) -+ { -+ output_delimiter_string = xstrdup(mbdelim); -+ output_delimiter_length = delimlen; -+ } -+ -+ if (MB_CUR_MAX <= 1 || force_singlebyte_mode) -+#endif -+ { -+ static char dummy[2]; -+ dummy[0] = delim; -+ dummy[1] = '\0'; -+ output_delimiter_string = dummy; -+ output_delimiter_length = 1; -+ } - } - - if (optind == argc) ---- coreutils-5.93/src/pr.c.i18n 2005-09-16 08:50:33.000000000 +0100 -+++ coreutils-5.93/src/pr.c 2005-12-23 08:53:01.000000000 +0000 -@@ -313,6 +313,32 @@ - - #include - #include -+ -+/* Get MB_LEN_MAX. */ -+#include -+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC -+ installation; work around this configuration error. */ -+#if !defined MB_LEN_MAX || MB_LEN_MAX == 1 -+# define MB_LEN_MAX 16 -+#endif -+ -+/* Get MB_CUR_MAX. */ -+#include -+ -+/* Solaris 2.5 has a bug: must be included before . */ -+/* Get mbstate_t, mbrtowc(), wcwidth(). */ -+#if HAVE_WCHAR_H -+# include -+#endif -+ -+/* Get iswprint(). -- for wcwidth(). */ -+#if HAVE_WCTYPE_H -+# include -+#endif -+#if !defined iswprint && !HAVE_ISWPRINT -+# define iswprint(wc) 1 -+#endif -+ - #include "system.h" - #include "error.h" - #include "hard-locale.h" -@@ -324,6 +350,18 @@ - #include "strftime.h" - #include "xstrtol.h" - -+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ -+#if HAVE_MBRTOWC && defined mbstate_t -+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0) -+#endif -+ -+#ifndef HAVE_DECL_WCWIDTH -+"this configure-time declaration test was not run" -+#endif -+#if !HAVE_DECL_WCWIDTH -+extern int wcwidth (); -+#endif -+ - /* The official name of this program (e.g., no `g' prefix). */ - #define PROGRAM_NAME "pr" - -@@ -416,7 +454,20 @@ - - #define NULLCOL (COLUMN *)0 - --static int char_to_clump (char c); -+/* Funtion pointers to switch functions for single byte locale or for -+ multibyte locale. If multibyte functions do not exist in your sysytem, -+ these pointers always point the function for single byte locale. */ -+static void (*print_char) (char c); -+static int (*char_to_clump) (char c); -+ -+/* Functions for single byte locale. */ -+static void print_char_single (char c); -+static int char_to_clump_single (char c); -+ -+/* Functions for multibyte locale. */ -+static void print_char_multi (char c); -+static int char_to_clump_multi (char c); -+ - static bool read_line (COLUMN *p); - static bool print_page (void); - static bool print_stored (COLUMN *p); -@@ -426,6 +477,7 @@ - static void pad_across_to (int position); - static void add_line_number (COLUMN *p); - static void getoptarg (char *arg, char switch_char, char *character, -+ int *character_length, int *character_width, - int *number); - void usage (int status); - static void print_files (int number_of_files, char **av); -@@ -440,7 +492,6 @@ - static void pad_down (int lines); - static void read_rest_of_line (COLUMN *p); - static void skip_read (COLUMN *p, int column_number); --static void print_char (char c); - static void cleanup (void); - static void print_sep_string (void); - static void separator_string (const char *optarg_S); -@@ -455,7 +506,7 @@ - we store the leftmost columns contiguously in buff. - To print a line from buff, get the index of the first character - from line_vector[i], and print up to line_vector[i + 1]. */ --static char *buff; -+static unsigned char *buff; - - /* Index of the position in buff where the next character - will be stored. */ -@@ -559,7 +610,7 @@ - static bool untabify_input = false; - - /* (-e) The input tab character. */ --static char input_tab_char = '\t'; -+static char input_tab_char[MB_LEN_MAX] = "\t"; - - /* (-e) Tabstops are at chars_per_tab, 2*chars_per_tab, 3*chars_per_tab, ... - where the leftmost column is 1. */ -@@ -569,7 +620,10 @@ - static bool tabify_output = false; - - /* (-i) The output tab character. */ --static char output_tab_char = '\t'; -+static char output_tab_char[MB_LEN_MAX] = "\t"; -+ -+/* (-i) The byte length of output tab character. */ -+static int output_tab_char_length = 1; - - /* (-i) The width of the output tab. */ - static int chars_per_output_tab = 8; -@@ -643,7 +697,13 @@ - static bool numbered_lines = false; - - /* (-n) Character which follows each line number. */ --static char number_separator = '\t'; -+static char number_separator[MB_LEN_MAX] = "\t"; -+ -+/* (-n) The byte length of the character which follows each line number. */ -+static int number_separator_length = 1; -+ -+/* (-n) The character width of the character which follows each line number. */ -+static int number_separator_width = 0; - - /* (-n) line counting starts with 1st line of input file (not with 1st - line of 1st page printed). */ -@@ -696,6 +756,7 @@ - -a|COLUMN|-m is a `space' and with the -J option a `tab'. */ - static char *col_sep_string = ""; - static int col_sep_length = 0; -+static int col_sep_width = 0; - static char *column_separator = " "; - static char *line_separator = "\t"; - -@@ -852,6 +913,13 @@ - col_sep_length = (int) strlen (optarg_S); - col_sep_string = xmalloc (col_sep_length + 1); - strcpy (col_sep_string, optarg_S); -+ -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ col_sep_width = mbswidth (col_sep_string, 0); -+ else -+#endif -+ col_sep_width = col_sep_length; - } - - int -@@ -877,6 +945,21 @@ - - atexit (close_stdout); - -+/* Define which functions are used, the ones for single byte locale or the ones -+ for multibyte locale. */ -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ { -+ print_char = print_char_multi; -+ char_to_clump = char_to_clump_multi; -+ } -+ else -+#endif -+ { -+ print_char = print_char_single; -+ char_to_clump = char_to_clump_single; -+ } -+ - n_files = 0; - file_names = (argc > 1 - ? xmalloc ((argc - 1) * sizeof (char *)) -@@ -949,8 +1032,12 @@ - break; - case 'e': - if (optarg) -- getoptarg (optarg, 'e', &input_tab_char, -- &chars_per_input_tab); -+ { -+ int dummy_length, dummy_width; -+ -+ getoptarg (optarg, 'e', input_tab_char, &dummy_length, -+ &dummy_width, &chars_per_input_tab); -+ } - /* Could check tab width > 0. */ - untabify_input = true; - break; -@@ -963,8 +1050,12 @@ - break; - case 'i': - if (optarg) -- getoptarg (optarg, 'i', &output_tab_char, -- &chars_per_output_tab); -+ { -+ int dummy_width; -+ -+ getoptarg (optarg, 'i', output_tab_char, &output_tab_char_length, -+ &dummy_width, &chars_per_output_tab); -+ } - /* Could check tab width > 0. */ - tabify_output = true; - break; -@@ -991,8 +1082,8 @@ - case 'n': - numbered_lines = true; - if (optarg) -- getoptarg (optarg, 'n', &number_separator, -- &chars_per_number); -+ getoptarg (optarg, 'n', number_separator, &number_separator_length, -+ &number_separator_width, &chars_per_number); - break; - case 'N': - skip_count = false; -@@ -1031,7 +1122,7 @@ - old_s = false; - /* Reset an additional input of -s, -S dominates -s */ - col_sep_string = ""; -- col_sep_length = 0; -+ col_sep_length = col_sep_width = 0; - use_col_separator = true; - if (optarg) - separator_string (optarg); -@@ -1188,10 +1279,45 @@ - a number. */ - - static void --getoptarg (char *arg, char switch_char, char *character, int *number) -+getoptarg (char *arg, char switch_char, char *character, int *character_length, -+ int *character_width, int *number) - { - if (!ISDIGIT (*arg)) -- *character = *arg++; -+ { -+#ifdef HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) /* for multibyte locale. */ -+ { -+ wchar_t wc; -+ size_t mblength; -+ int width; -+ mbstate_t state = {'\0'}; -+ -+ mblength = mbrtowc (&wc, arg, strnlen(arg, MB_LEN_MAX), &state); -+ -+ if (mblength == (size_t)-1 || mblength == (size_t)-2) -+ { -+ *character_length = 1; -+ *character_width = 1; -+ } -+ else -+ { -+ *character_length = (mblength < 1) ? 1 : mblength; -+ width = wcwidth (wc); -+ *character_width = (width < 0) ? 0 : width; -+ } -+ -+ strncpy (character, arg, *character_length); -+ arg += *character_length; -+ } -+ else /* for single byte locale. */ -+#endif -+ { -+ *character = *arg++; -+ *character_length = 1; -+ *character_width = 1; -+ } -+ } -+ - if (*arg) - { - long int tmp_long; -@@ -1256,7 +1382,7 @@ - else - col_sep_string = column_separator; - -- col_sep_length = 1; -+ col_sep_length = col_sep_width = 1; - use_col_separator = true; - } - /* It's rather pointless to define a TAB separator with column -@@ -1288,11 +1414,11 @@ - TAB_WIDTH (chars_per_input_tab, chars_per_number); */ - - /* Estimate chars_per_text without any margin and keep it constant. */ -- if (number_separator == '\t') -+ if (number_separator[0] == '\t') - number_width = chars_per_number + - TAB_WIDTH (chars_per_default_tab, chars_per_number); - else -- number_width = chars_per_number + 1; -+ number_width = chars_per_number + number_separator_width; - - /* The number is part of the column width unless we are - printing files in parallel. */ -@@ -1307,7 +1433,7 @@ - } - - chars_per_column = (chars_per_line - chars_used_by_number - -- (columns - 1) * col_sep_length) / columns; -+ (columns - 1) * col_sep_width) / columns; - - if (chars_per_column < 1) - error (EXIT_FAILURE, 0, _("page width too narrow")); -@@ -1432,7 +1558,7 @@ - - /* Enlarge p->start_position of first column to use the same form of - padding_not_printed with all columns. */ -- h = h + col_sep_length; -+ h = h + col_sep_width; - - /* This loop takes care of all but the rightmost column. */ - -@@ -1466,7 +1592,7 @@ - } - else - { -- h = h_next + col_sep_length; -+ h = h_next + col_sep_width; - h_next = h + chars_per_column; - } - } -@@ -1756,9 +1882,9 @@ - align_column (COLUMN *p) - { - padding_not_printed = p->start_position; -- if (padding_not_printed - col_sep_length > 0) -+ if (padding_not_printed - col_sep_width > 0) - { -- pad_across_to (padding_not_printed - col_sep_length); -+ pad_across_to (padding_not_printed - col_sep_width); - padding_not_printed = ANYWHERE; - } - -@@ -2029,13 +2155,13 @@ - /* May be too generous. */ - buff = X2REALLOC (buff, &buff_allocated); - } -- buff[buff_current++] = c; -+ buff[buff_current++] = (unsigned char) c; - } - - static void - add_line_number (COLUMN *p) - { -- int i; -+ int i, j; - char *s; - int left_cut; - -@@ -2058,22 +2184,24 @@ - /* Tabification is assumed for multiple columns, also for n-separators, - but `default n-separator = TAB' hasn't been given priority over - equal column_width also specified by POSIX. */ -- if (number_separator == '\t') -+ if (number_separator[0] == '\t') - { - i = number_width - chars_per_number; - while (i-- > 0) - (p->char_func) (' '); - } - else -- (p->char_func) (number_separator); -+ for (j = 0; j < number_separator_length; j++) -+ (p->char_func) (number_separator[j]); - } - else - /* To comply with POSIX, we avoid any expansion of default TAB - separator with a single column output. No column_width requirement - has to be considered. */ - { -- (p->char_func) (number_separator); -- if (number_separator == '\t') -+ for (j = 0; j < number_separator_length; j++) -+ (p->char_func) (number_separator[j]); -+ if (number_separator[0] == '\t') - output_position = POS_AFTER_TAB (chars_per_output_tab, - output_position); - } -@@ -2234,7 +2362,7 @@ - while (goal - h_old > 1 - && (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal) - { -- putchar (output_tab_char); -+ fwrite (output_tab_char, sizeof(char), output_tab_char_length, stdout); - h_old = h_new; - } - while (++h_old <= goal) -@@ -2254,6 +2382,7 @@ - { - char *s; - int l = col_sep_length; -+ int not_space_flag; - - s = col_sep_string; - -@@ -2267,6 +2396,7 @@ - { - for (; separators_not_printed > 0; --separators_not_printed) - { -+ not_space_flag = 0; - while (l-- > 0) - { - /* 3 types of sep_strings: spaces only, spaces and chars, -@@ -2280,12 +2410,15 @@ - } - else - { -+ not_space_flag = 1; - if (spaces_not_printed > 0) - print_white_space (); - putchar (*s++); -- ++output_position; - } - } -+ if (not_space_flag) -+ output_position += col_sep_width; -+ - /* sep_string ends with some spaces */ - if (spaces_not_printed > 0) - print_white_space (); -@@ -2313,7 +2446,7 @@ - required number of tabs and spaces. */ - - static void --print_char (char c) -+print_char_single (char c) - { - if (tabify_output) - { -@@ -2337,6 +2470,74 @@ - putchar (c); - } - -+#ifdef HAVE_MBRTOWC -+static void -+print_char_multi (char c) -+{ -+ static size_t mbc_pos = 0; -+ static unsigned char mbc[MB_LEN_MAX] = {'\0'}; -+ static mbstate_t state = {'\0'}; -+ mbstate_t state_bak; -+ wchar_t wc; -+ size_t mblength; -+ int width; -+ -+ if (tabify_output) -+ { -+ state_bak = state; -+ mbc[mbc_pos++] = (unsigned char)c; -+ mblength = mbrtowc (&wc, mbc, mbc_pos, &state); -+ -+ while (mbc_pos > 0) -+ { -+ switch (mblength) -+ { -+ case (size_t)-2: -+ state = state_bak; -+ return; -+ -+ case (size_t)-1: -+ state = state_bak; -+ ++output_position; -+ putchar (mbc[0]); -+ memmove (mbc, mbc + 1, MB_CUR_MAX - 1); -+ --mbc_pos; -+ break; -+ -+ case 0: -+ mblength = 1; -+ -+ default: -+ if (wc == L' ') -+ { -+ memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength); -+ --mbc_pos; -+ ++spaces_not_printed; -+ return; -+ } -+ else if (spaces_not_printed > 0) -+ print_white_space (); -+ -+ /* Nonprintables are assumed to have width 0, except L'\b'. */ -+ if ((width = wcwidth (wc)) < 1) -+ { -+ if (wc == L'\b') -+ --output_position; -+ } -+ else -+ output_position += width; -+ -+ fwrite (mbc, sizeof(char), mblength, stdout); -+ memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength); -+ mbc_pos -= mblength; -+ } -+ } -+ return; -+ } -+ putchar (c); -+} -+#endif -+ - /* Skip to page PAGE before printing. - PAGE may be larger than total number of pages. */ - -@@ -2517,9 +2718,9 @@ - align_empty_cols = false; - } - -- if (padding_not_printed - col_sep_length > 0) -+ if (padding_not_printed - col_sep_width > 0) - { -- pad_across_to (padding_not_printed - col_sep_length); -+ pad_across_to (padding_not_printed - col_sep_width); - padding_not_printed = ANYWHERE; - } - -@@ -2620,9 +2821,9 @@ - } - } - -- if (padding_not_printed - col_sep_length > 0) -+ if (padding_not_printed - col_sep_width > 0) - { -- pad_across_to (padding_not_printed - col_sep_length); -+ pad_across_to (padding_not_printed - col_sep_width); - padding_not_printed = ANYWHERE; - } - -@@ -2635,8 +2836,8 @@ - if (spaces_not_printed == 0) - { - output_position = p->start_position + end_vector[line]; -- if (p->start_position - col_sep_length == chars_per_margin) -- output_position -= col_sep_length; -+ if (p->start_position - col_sep_width == chars_per_margin) -+ output_position -= col_sep_width; - } - - return true; -@@ -2655,7 +2856,7 @@ - number of characters is 1.) */ - - static int --char_to_clump (char c) -+char_to_clump_single (char c) - { - unsigned char uc = c; - char *s = clump_buff; -@@ -2665,10 +2866,10 @@ - int chars; - int chars_per_c = 8; - -- if (c == input_tab_char) -+ if (c == input_tab_char[0]) - chars_per_c = chars_per_input_tab; - -- if (c == input_tab_char || c == '\t') -+ if (c == input_tab_char[0] || c == '\t') - { - width = TAB_WIDTH (chars_per_c, input_position); - -@@ -2739,6 +2940,154 @@ - return chars; - } - -+#ifdef HAVE_MBRTOWC -+static int -+char_to_clump_multi (char c) -+{ -+ static size_t mbc_pos = 0; -+ static char mbc[MB_LEN_MAX] = {'\0'}; -+ static mbstate_t state = {'\0'}; -+ mbstate_t state_bak; -+ wchar_t wc; -+ size_t mblength; -+ int wc_width; -+ register int *s = clump_buff; -+ register int i, j; -+ char esc_buff[4]; -+ int width; -+ int chars; -+ int chars_per_c = 8; -+ -+ state_bak = state; -+ mbc[mbc_pos++] = c; -+ mblength = mbrtowc (&wc, mbc, mbc_pos, &state); -+ -+ width = 0; -+ chars = 0; -+ while (mbc_pos > 0) -+ { -+ switch (mblength) -+ { -+ case (size_t)-2: -+ state = state_bak; -+ return 0; -+ -+ case (size_t)-1: -+ state = state_bak; -+ mblength = 1; -+ -+ if (use_esc_sequence || use_cntrl_prefix) -+ { -+ width = +4; -+ chars = +4; -+ *s++ = '\\'; -+ sprintf (esc_buff, "%03o", mbc[0]); -+ for (i = 0; i <= 2; ++i) -+ *s++ = (int) esc_buff[i]; -+ } -+ else -+ { -+ width += 1; -+ chars += 1; -+ *s++ = mbc[0]; -+ } -+ break; -+ -+ case 0: -+ mblength = 1; -+ /* Fall through */ -+ -+ default: -+ if (memcmp (mbc, input_tab_char, mblength) == 0) -+ chars_per_c = chars_per_input_tab; -+ -+ if (memcmp (mbc, input_tab_char, mblength) == 0 || c == '\t') -+ { -+ int width_inc; -+ -+ width_inc = TAB_WIDTH (chars_per_c, input_position); -+ width += width_inc; -+ -+ if (untabify_input) -+ { -+ for (i = width_inc; i; --i) -+ *s++ = ' '; -+ chars += width_inc; -+ } -+ else -+ { -+ for (i = 0; i < mblength; i++) -+ *s++ = mbc[i]; -+ chars += mblength; -+ } -+ } -+ else if ((wc_width = wcwidth (wc)) < 1) -+ { -+ if (use_esc_sequence) -+ { -+ for (i = 0; i < mblength; i++) -+ { -+ width += 4; -+ chars += 4; -+ *s++ = '\\'; -+ sprintf (esc_buff, "%03o", c); -+ for (j = 0; j <= 2; ++j) -+ *s++ = (int) esc_buff[j]; -+ } -+ } -+ else if (use_cntrl_prefix) -+ { -+ if (wc < 0200) -+ { -+ width += 2; -+ chars += 2; -+ *s++ = '^'; -+ *s++ = wc ^ 0100; -+ } -+ else -+ { -+ for (i = 0; i < mblength; i++) -+ { -+ width += 4; -+ chars += 4; -+ *s++ = '\\'; -+ sprintf (esc_buff, "%03o", c); -+ for (j = 0; j <= 2; ++j) -+ *s++ = (int) esc_buff[j]; -+ } -+ } -+ } -+ else if (wc == L'\b') -+ { -+ width += -1; -+ chars += 1; -+ *s++ = c; -+ } -+ else -+ { -+ width += 0; -+ chars += mblength; -+ for (i = 0; i < mblength; i++) -+ *s++ = mbc[i]; -+ } -+ } -+ else -+ { -+ width += wc_width; -+ chars += mblength; -+ for (i = 0; i < mblength; i++) -+ *s++ = mbc[i]; -+ } -+ } -+ memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength); -+ mbc_pos -= mblength; -+ } -+ -+ input_position += width; -+ return chars; -+} -+#endif -+ - /* We've just printed some files and need to clean up things before - looking for more options and printing the next batch of files. - ---- coreutils-5.93/src/uniq.c.i18n 2005-07-05 07:32:54.000000000 +0100 -+++ coreutils-5.93/src/uniq.c 2005-12-23 08:53:01.000000000 +0000 -@@ -23,6 +23,16 @@ - #include - #include - -+/* Get mbstate_t, mbrtowc(). */ -+#if HAVE_WCHAR_H -+# include -+#endif -+ -+/* Get isw* functions. */ -+#if HAVE_WCTYPE_H -+# include -+#endif -+ - #include "system.h" - #include "argmatch.h" - #include "linebuffer.h" -@@ -32,7 +42,19 @@ - #include "quote.h" - #include "xmemcoll.h" - #include "xstrtol.h" --#include "memcasecmp.h" -+#include "xmemcoll.h" -+ -+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC -+ installation; work around this configuration error. */ -+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2 -+# define MB_LEN_MAX 16 -+#endif -+ -+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ -+#if HAVE_MBRTOWC && defined mbstate_t -+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0) -+#endif -+ - - /* The official name of this program (e.g., no `g' prefix). */ - #define PROGRAM_NAME "uniq" -@@ -109,6 +131,10 @@ - /* Select whether/how to delimit groups of duplicate lines. */ - static enum delimit_method delimit_groups; - -+/* Function pointers. */ -+static char * -+(*find_field) (struct linebuffer *line); -+ - static struct option const longopts[] = - { - {"count", no_argument, NULL, 'c'}, -@@ -189,7 +215,7 @@ - return a pointer to the beginning of the line's field to be compared. */ - - static char * --find_field (const struct linebuffer *line) -+find_field_uni (struct linebuffer *line) - { - size_t count; - char *lp = line->buffer; -@@ -210,6 +236,83 @@ - return lp + i; - } - -+#if HAVE_MBRTOWC -+ -+# define MBCHAR_TO_WCHAR(WC, MBLENGTH, LP, POS, SIZE, STATEP, CONVFAIL) \ -+ do \ -+ { \ -+ mbstate_t state_bak; \ -+ \ -+ CONVFAIL = 0; \ -+ state_bak = *STATEP; \ -+ \ -+ MBLENGTH = mbrtowc (&WC, LP + POS, SIZE - POS, STATEP); \ -+ \ -+ switch (MBLENGTH) \ -+ { \ -+ case (size_t)-2: \ -+ case (size_t)-1: \ -+ *STATEP = state_bak; \ -+ CONVFAIL++; \ -+ /* Fall through */ \ -+ case 0: \ -+ MBLENGTH = 1; \ -+ } \ -+ } \ -+ while (0) -+ -+static char * -+find_field_multi (struct linebuffer *line) -+{ -+ size_t count; -+ char *lp = line->buffer; -+ size_t size = line->length - 1; -+ size_t pos; -+ size_t mblength; -+ wchar_t wc; -+ mbstate_t *statep; -+ int convfail; -+ -+ pos = 0; -+ statep = &(line->state); -+ -+ /* skip fields. */ -+ for (count = 0; count < skip_fields && pos < size; count++) -+ { -+ while (pos < size) -+ { -+ MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail); -+ -+ if (convfail || !iswblank (wc)) -+ { -+ pos += mblength; -+ break; -+ } -+ pos += mblength; -+ } -+ -+ while (pos < size) -+ { -+ MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail); -+ -+ if (!convfail && iswblank (wc)) -+ break; -+ -+ pos += mblength; -+ } -+ } -+ -+ /* skip fields. */ -+ for (count = 0; count < skip_chars && pos < size; count++) -+ { -+ MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail); -+ pos += mblength; -+ } -+ -+ return lp + pos; -+} -+#endif -+ - /* Return false if two strings OLD and NEW match, true if not. - OLD and NEW point not to the beginnings of the lines - but rather to the beginnings of the fields to compare. -@@ -218,6 +321,8 @@ - static bool - different (char *old, char *new, size_t oldlen, size_t newlen) - { -+ char *copy_old, *copy_new; -+ - if (check_chars < oldlen) - oldlen = check_chars; - if (check_chars < newlen) -@@ -225,14 +330,92 @@ - - if (ignore_case) - { -- /* FIXME: This should invoke strcoll somehow. */ -- return oldlen != newlen || memcasecmp (old, new, oldlen); -+ size_t i; -+ -+ copy_old = alloca (oldlen + 1); -+ copy_new = alloca (oldlen + 1); -+ -+ for (i = 0; i < oldlen; i++) -+ { -+ copy_old[i] = toupper (old[i]); -+ copy_new[i] = toupper (new[i]); -+ } - } -- else if (hard_LC_COLLATE) -- return xmemcoll (old, oldlen, new, newlen) != 0; - else -- return oldlen != newlen || memcmp (old, new, oldlen); -+ { -+ copy_old = (char *)old; -+ copy_new = (char *)new; -+ } -+ -+ return xmemcoll (copy_old, oldlen, copy_new, newlen); -+} -+ -+#if HAVE_MBRTOWC -+static int -+different_multi (const char *old, const char *new, size_t oldlen, size_t newlen, mbstate_t oldstate, mbstate_t newstate) -+{ -+ size_t i, j, chars; -+ const char *str[2]; -+ char *copy[2]; -+ size_t len[2]; -+ mbstate_t state[2]; -+ size_t mblength; -+ wchar_t wc, uwc; -+ mbstate_t state_bak; -+ -+ str[0] = old; -+ str[1] = new; -+ len[0] = oldlen; -+ len[1] = newlen; -+ state[0] = oldstate; -+ state[1] = newstate; -+ -+ for (i = 0; i < 2; i++) -+ { -+ copy[i] = alloca (len[i] + 1); -+ -+ for (j = 0, chars = 0; j < len[i] && chars < check_chars; chars++) -+ { -+ state_bak = state[i]; -+ mblength = mbrtowc (&wc, str[i] + j, len[i] - j, &(state[i])); -+ -+ switch (mblength) -+ { -+ case (size_t)-1: -+ case (size_t)-2: -+ state[i] = state_bak; -+ /* Fall through */ -+ case 0: -+ mblength = 1; -+ break; -+ -+ default: -+ if (ignore_case) -+ { -+ uwc = towupper (wc); -+ -+ if (uwc != wc) -+ { -+ mbstate_t state_wc; -+ -+ memset (&state_wc, '\0', sizeof(mbstate_t)); -+ wcrtomb (copy[i] + j, uwc, &state_wc); -+ } -+ else -+ memcpy (copy[i] + j, str[i] + j, mblength); -+ } -+ else -+ memcpy (copy[i] + j, str[i] + j, mblength); -+ } -+ j += mblength; -+ } -+ copy[i][j] = '\0'; -+ len[i] = j; -+ } -+ -+ return xmemcoll (copy[0], len[0], copy[1], len[1]); - } -+#endif - - /* Output the line in linebuffer LINE to standard output - provided that the switches say it should be output. -@@ -286,15 +469,43 @@ - { - char *prevfield IF_LINT (= NULL); - size_t prevlen IF_LINT (= 0); -+#if HAVE_MBRTOWC -+ mbstate_t prevstate; -+ -+ memset (&prevstate, '\0', sizeof (mbstate_t)); -+#endif - - while (!feof (stdin)) - { - char *thisfield; - size_t thislen; -+#if HAVE_MBRTOWC -+ mbstate_t thisstate; -+#endif -+ - if (readlinebuffer (thisline, stdin) == 0) - break; - thisfield = find_field (thisline); - thislen = thisline->length - 1 - (thisfield - thisline->buffer); -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ { -+ thisstate = thisline->state; -+ -+ if (prevline->length == 0 || different_multi -+ (thisfield, prevfield, thislen, prevlen, thisstate, prevstate)) -+ { -+ fwrite (thisline->buffer, sizeof (char), -+ thisline->length, stdout); -+ -+ SWAP_LINES (prevline, thisline); -+ prevfield = thisfield; -+ prevlen = thislen; -+ prevstate = thisstate; -+ } -+ } -+ else -+#endif - if (prevline->length == 0 - || different (thisfield, prevfield, thislen, prevlen)) - { -@@ -313,17 +524,26 @@ - size_t prevlen; - uintmax_t match_count = 0; - bool first_delimiter = true; -+#if HAVE_MBRTOWC -+ mbstate_t prevstate; -+#endif - - if (readlinebuffer (prevline, stdin) == 0) - goto closefiles; - prevfield = find_field (prevline); - prevlen = prevline->length - 1 - (prevfield - prevline->buffer); -+#if HAVE_MBRTOWC -+ prevstate = prevline->state; -+#endif - - while (!feof (stdin)) - { - bool match; - char *thisfield; - size_t thislen; -+#if HAVE_MBRTOWC -+ mbstate_t thisstate; -+#endif - if (readlinebuffer (thisline, stdin) == 0) - { - if (ferror (stdin)) -@@ -332,6 +552,15 @@ - } - thisfield = find_field (thisline); - thislen = thisline->length - 1 - (thisfield - thisline->buffer); -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ { -+ thisstate = thisline->state; -+ match = !different_multi (thisfield, prevfield, -+ thislen, prevlen, thisstate, prevstate); -+ } -+ else -+#endif - match = !different (thisfield, prevfield, thislen, prevlen); - match_count += match; - -@@ -364,6 +593,9 @@ - SWAP_LINES (prevline, thisline); - prevfield = thisfield; - prevlen = thislen; -+#if HAVE_MBRTOWC -+ prevstate = thisstate; -+#endif - if (!match) - match_count = 0; - } -@@ -408,6 +640,19 @@ - - atexit (close_stdout); - -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ { -+ find_field = find_field_multi; -+ } -+ else -+#endif -+ { -+ find_field = find_field_uni; -+ } -+ -+ -+ - skip_chars = 0; - skip_fields = 0; - check_chars = SIZE_MAX; ---- coreutils-5.93/src/expand.c.i18n 2005-08-12 08:16:25.000000000 +0100 -+++ coreutils-5.93/src/expand.c 2005-12-23 08:53:01.000000000 +0000 -@@ -38,11 +38,28 @@ - #include - #include - #include -+ -+/* Get mbstate_t, mbrtowc(), wcwidth(). */ -+#if HAVE_WCHAR_H -+# include -+#endif -+ - #include "system.h" - #include "error.h" - #include "quote.h" - #include "xstrndup.h" - -+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC -+ installation; work around this configuration error. */ -+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2 -+# define MB_LEN_MAX 16 -+#endif -+ -+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ -+#if HAVE_MBRTOWC && defined mbstate_t -+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0) -+#endif -+ - /* The official name of this program (e.g., no `g' prefix). */ - #define PROGRAM_NAME "expand" - -@@ -182,6 +199,7 @@ - stops = num_start + len - 1; - } - } -+ - else - { - error (0, 0, _("tab size contains invalid character(s): %s"), -@@ -364,6 +382,142 @@ - } - } - -+#if HAVE_MBRTOWC -+static void -+expand_multibyte (void) -+{ -+ FILE *fp; /* Input strem. */ -+ mbstate_t i_state; /* Current shift state of the input stream. */ -+ mbstate_t i_state_bak; /* Back up the I_STATE. */ -+ mbstate_t o_state; /* Current shift state of the output stream. */ -+ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */ -+ char *bufpos; /* Next read position of BUF. */ -+ size_t buflen = 0; /* The length of the byte sequence in buf. */ -+ wchar_t wc; /* A gotten wide character. */ -+ size_t mblength; /* The byte size of a multibyte character -+ which shows as same character as WC. */ -+ int tab_index = 0; /* Index in `tab_list' of next tabstop. */ -+ int column = 0; /* Column on screen of the next char. */ -+ int next_tab_column; /* Column the next tab stop is on. */ -+ int convert = 1; /* If nonzero, perform translations. */ -+ -+ fp = next_file ((FILE *) NULL); -+ if (fp == NULL) -+ return; -+ -+ memset (&o_state, '\0', sizeof(mbstate_t)); -+ memset (&i_state, '\0', sizeof(mbstate_t)); -+ -+ for (;;) -+ { -+ /* Refill the buffer BUF. */ -+ if (buflen < MB_LEN_MAX && !feof(fp) && !ferror(fp)) -+ { -+ memmove (buf, bufpos, buflen); -+ buflen += fread (buf + buflen, sizeof(char), BUFSIZ, fp); -+ bufpos = buf; -+ } -+ -+ /* No character is left in BUF. */ -+ if (buflen < 1) -+ { -+ fp = next_file (fp); -+ -+ if (fp == NULL) -+ break; /* No more files. */ -+ else -+ { -+ memset (&i_state, '\0', sizeof(mbstate_t)); -+ continue; -+ } -+ } -+ -+ /* Get a wide character. */ -+ i_state_bak = i_state; -+ mblength = mbrtowc (&wc, bufpos, buflen, &i_state); -+ -+ switch (mblength) -+ { -+ case (size_t)-1: /* illegal byte sequence. */ -+ case (size_t)-2: -+ mblength = 1; -+ i_state = i_state_bak; -+ if (convert) -+ { -+ ++column; -+ if (convert_entire_line == 0) -+ convert = 0; -+ } -+ putchar (*bufpos); -+ break; -+ -+ case 0: /* null. */ -+ mblength = 1; -+ if (convert && convert_entire_line == 0) -+ convert = 0; -+ putchar ('\0'); -+ break; -+ -+ default: -+ if (wc == L'\n') /* LF. */ -+ { -+ tab_index = 0; -+ column = 0; -+ convert = 1; -+ putchar ('\n'); -+ } -+ else if (wc == L'\t' && convert) /* Tab. */ -+ { -+ if (tab_size == 0) -+ { -+ /* Do not let tab_index == first_free_tab; -+ stop when it is 1 less. */ -+ while (tab_index < first_free_tab - 1 -+ && column >= tab_list[tab_index]) -+ tab_index++; -+ next_tab_column = tab_list[tab_index]; -+ if (tab_index < first_free_tab - 1) -+ tab_index++; -+ if (column >= next_tab_column) -+ next_tab_column = column + 1; -+ } -+ else -+ next_tab_column = column + tab_size - column % tab_size; -+ -+ while (column < next_tab_column) -+ { -+ putchar (' '); -+ ++column; -+ } -+ } -+ else /* Others. */ -+ { -+ if (convert) -+ { -+ if (wc == L'\b') -+ { -+ if (column > 0) -+ --column; -+ } -+ else -+ { -+ int width; /* The width of WC. */ -+ -+ width = wcwidth (wc); -+ column += (width > 0) ? width : 0; -+ if (convert_entire_line == 0) -+ convert = 0; -+ } -+ } -+ fwrite (bufpos, sizeof(char), mblength, stdout); -+ } -+ } -+ buflen -= mblength; -+ bufpos += mblength; -+ } -+} -+#endif -+ - int - main (int argc, char **argv) - { -@@ -428,7 +582,12 @@ - - file_list = (optind < argc ? &argv[optind] : stdin_argv); - -- expand (); -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ expand_multibyte (); -+ else -+#endif -+ expand (); - - if (have_read_stdin && fclose (stdin) != 0) - error (EXIT_FAILURE, errno, "-"); ---- coreutils-5.93/src/fold.c.i18n 2005-08-12 08:29:38.000000000 +0100 -+++ coreutils-5.93/src/fold.c 2005-12-23 08:53:01.000000000 +0000 -@@ -23,11 +23,33 @@ - #include - #include - -+/* Get mbstate_t, mbrtowc(), wcwidth(). */ -+#if HAVE_WCHAR_H -+# include -+#endif -+ -+/* Get iswprint(), iswblank(), wcwidth(). */ -+#if HAVE_WCTYPE_H -+# include -+#endif -+ - #include "system.h" - #include "error.h" - #include "quote.h" - #include "xstrtol.h" - -+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC -+ installation; work around this configuration error. */ -+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2 -+# undef MB_LEN_MAX -+# define MB_LEN_MAX 16 -+#endif -+ -+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ -+#if HAVE_MBRTOWC && defined mbstate_t -+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0) -+#endif -+ - #define TAB_WIDTH 8 - - /* The official name of this program (e.g., no `g' prefix). */ -@@ -35,23 +57,44 @@ - - #define AUTHORS "David MacKenzie" - -+#define FATAL_ERROR(Message) \ -+ do \ -+ { \ -+ error (0, 0, (Message)); \ -+ usage (2); \ -+ } \ -+ while (0) -+ -+enum operating_mode -+{ -+ /* Fold texts by columns that are at the given positions. */ -+ column_mode, -+ -+ /* Fold texts by bytes that are at the given positions. */ -+ byte_mode, -+ -+ /* Fold texts by characters that are at the given positions. */ -+ character_mode, -+}; -+ - /* The name this program was run with. */ - char *program_name; - -+/* The argument shows current mode. (Default: column_mode) */ -+static enum operating_mode operating_mode; -+ - /* If nonzero, try to break on whitespace. */ - static bool break_spaces; - --/* If nonzero, count bytes, not column positions. */ --static bool count_bytes; -- - /* If nonzero, at least one of the files we read was standard input. */ - static bool have_read_stdin; - --static char const shortopts[] = "bsw:0::1::2::3::4::5::6::7::8::9::"; -+static char const shortopts[] = "bcsw:0::1::2::3::4::5::6::7::8::9::"; - - static struct option const longopts[] = - { - {"bytes", no_argument, NULL, 'b'}, -+ {"characters", no_argument, NULL, 'c'}, - {"spaces", no_argument, NULL, 's'}, - {"width", required_argument, NULL, 'w'}, - {GETOPT_HELP_OPTION_DECL}, -@@ -81,6 +124,7 @@ - "), stdout); - fputs (_("\ - -b, --bytes count bytes rather than columns\n\ -+ -c, --characters count characters rather than columns\n\ - -s, --spaces break at spaces\n\ - -w, --width=WIDTH use WIDTH columns instead of 80\n\ - "), stdout); -@@ -98,7 +142,7 @@ - static size_t - adjust_column (size_t column, char c) - { -- if (!count_bytes) -+ if (operating_mode != byte_mode) - { - if (c == '\b') - { -@@ -117,35 +161,14 @@ - return column; - } - --/* Fold file FILENAME, or standard input if FILENAME is "-", -- to stdout, with maximum line length WIDTH. -- Return true if successful. */ -- --static bool --fold_file (char *filename, size_t width) -+static void -+fold_text (FILE *istream, size_t width, int *saved_errno) - { -- FILE *istream; - int c; - size_t column = 0; /* Screen column where next char will go. */ - size_t offset_out = 0; /* Index in `line_out' for next char. */ - static char *line_out = NULL; - static size_t allocated_out = 0; -- int saved_errno; -- -- if (STREQ (filename, "-")) -- { -- istream = stdin; -- have_read_stdin = true; -- } -- else -- istream = fopen (filename, "r"); -- -- if (istream == NULL) -- { -- error (0, errno, "%s", filename); -- return false; -- } -- - while ((c = getc (istream)) != EOF) - { - if (offset_out + 1 >= allocated_out) -@@ -172,6 +195,15 @@ - bool found_blank = false; - size_t logical_end = offset_out; - -+ /* If LINE_OUT has no wide character, -+ put a new wide character in LINE_OUT -+ if column is bigger than width. */ -+ if (offset_out == 0) -+ { -+ line_out[offset_out++] = c; -+ continue; -+ } -+ - /* Look for the last blank. */ - while (logical_end) - { -@@ -218,11 +250,225 @@ - line_out[offset_out++] = c; - } - -- saved_errno = errno; -+ *saved_errno = errno; -+ -+ if (offset_out) -+ fwrite (line_out, sizeof (char), (size_t) offset_out, stdout); -+ -+ free(line_out); -+} -+ -+#if HAVE_MBRTOWC -+static void -+fold_multibyte_text (FILE *istream, int width, int *saved_errno) -+{ -+ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */ -+ size_t buflen = 0; /* The length of the byte sequence in buf. */ -+ char *bufpos; /* Next read position of BUF. */ -+ wint_t wc; /* A gotten wide character. */ -+ size_t mblength; /* The byte size of a multibyte character which shows -+ as same character as WC. */ -+ mbstate_t state, state_bak; /* State of the stream. */ -+ int convfail; /* 1, when conversion is failed. Otherwise 0. */ -+ -+ char *line_out = NULL; -+ size_t offset_out = 0; /* Index in `line_out' for next char. */ -+ size_t allocated_out = 0; -+ -+ int increment; -+ size_t column = 0; -+ -+ size_t last_blank_pos; -+ size_t last_blank_column; -+ int is_blank_seen; -+ int last_blank_increment; -+ int is_bs_following_last_blank; -+ size_t bs_following_last_blank_num; -+ int is_cr_after_last_blank; -+ -+#define CLEAR_FLAGS \ -+ do \ -+ { \ -+ last_blank_pos = 0; \ -+ last_blank_column = 0; \ -+ is_blank_seen = 0; \ -+ is_bs_following_last_blank = 0; \ -+ bs_following_last_blank_num = 0; \ -+ is_cr_after_last_blank = 0; \ -+ } \ -+ while (0) -+ -+#define START_NEW_LINE \ -+ do \ -+ { \ -+ putchar ('\n'); \ -+ column = 0; \ -+ offset_out = 0; \ -+ CLEAR_FLAGS; \ -+ } \ -+ while (0) -+ -+ CLEAR_FLAGS; -+ memset (&state, '\0', sizeof(mbstate_t)); -+ -+ for (;; bufpos += mblength, buflen -= mblength) -+ { -+ if (buflen < MB_LEN_MAX && !feof (istream) && !ferror (istream)) -+ { -+ memmove (buf, bufpos, buflen); -+ buflen += fread (buf + buflen, sizeof(char), BUFSIZ, istream); -+ bufpos = buf; -+ } -+ -+ if (buflen < 1) -+ break; -+ -+ /* Get a wide character. */ -+ convfail = 0; -+ state_bak = state; -+ mblength = mbrtowc ((wchar_t *)&wc, bufpos, buflen, &state); -+ -+ switch (mblength) -+ { -+ case (size_t)-1: -+ case (size_t)-2: -+ convfail++; -+ state = state_bak; -+ /* Fall through. */ -+ -+ case 0: -+ mblength = 1; -+ break; -+ } -+ -+rescan: -+ if (operating_mode == byte_mode) /* byte mode */ -+ increment = mblength; -+ else if (operating_mode == character_mode) /* character mode */ -+ increment = 1; -+ else /* column mode */ -+ { -+ if (convfail) -+ increment = 1; -+ else -+ { -+ switch (wc) -+ { -+ case L'\n': -+ fwrite (line_out, sizeof(char), offset_out, stdout); -+ START_NEW_LINE; -+ continue; -+ -+ case L'\b': -+ increment = (column > 0) ? -1 : 0; -+ break; -+ -+ case L'\r': -+ increment = -1 * column; -+ break; -+ -+ case L'\t': -+ increment = 8 - column % 8; -+ break; -+ -+ default: -+ increment = wcwidth (wc); -+ increment = (increment < 0) ? 0 : increment; -+ } -+ } -+ } -+ -+ if (column + increment > width && break_spaces && last_blank_pos) -+ { -+ fwrite (line_out, sizeof(char), last_blank_pos, stdout); -+ putchar ('\n'); -+ -+ offset_out = offset_out - last_blank_pos; -+ column = column - last_blank_column + ((is_cr_after_last_blank) -+ ? last_blank_increment : bs_following_last_blank_num); -+ memmove (line_out, line_out + last_blank_pos, offset_out); -+ CLEAR_FLAGS; -+ goto rescan; -+ } -+ -+ if (column + increment > width && column != 0) -+ { -+ fwrite (line_out, sizeof(char), offset_out, stdout); -+ START_NEW_LINE; -+ goto rescan; -+ } -+ -+ if (allocated_out < offset_out + mblength) -+ { -+ allocated_out += 1024; -+ line_out = xrealloc (line_out, allocated_out); -+ } -+ -+ memcpy (line_out + offset_out, bufpos, mblength); -+ offset_out += mblength; -+ column += increment; -+ -+ if (is_blank_seen && !convfail && wc == L'\r') -+ is_cr_after_last_blank = 1; -+ -+ if (is_bs_following_last_blank && !convfail && wc == L'\b') -+ ++bs_following_last_blank_num; -+ else -+ is_bs_following_last_blank = 0; -+ -+ if (break_spaces && !convfail && iswblank (wc)) -+ { -+ last_blank_pos = offset_out; -+ last_blank_column = column; -+ is_blank_seen = 1; -+ last_blank_increment = increment; -+ is_bs_following_last_blank = 1; -+ bs_following_last_blank_num = 0; -+ is_cr_after_last_blank = 0; -+ } -+ } -+ -+ *saved_errno = errno; - - if (offset_out) - fwrite (line_out, sizeof (char), (size_t) offset_out, stdout); - -+ free(line_out); -+} -+#endif -+ -+/* Fold file FILENAME, or standard input if FILENAME is "-", -+ to stdout, with maximum line length WIDTH. -+ Return 0 if successful, 1 if an error occurs. */ -+ -+static int -+fold_file (char *filename, int width) -+{ -+ FILE *istream; -+ int saved_errno; -+ -+ if (STREQ (filename, "-")) -+ { -+ istream = stdin; -+ have_read_stdin = 1; -+ } -+ else -+ istream = fopen (filename, "r"); -+ -+ if (istream == NULL) -+ { -+ error (0, errno, "%s", filename); -+ return 1; -+ } -+ -+ /* Define how ISTREAM is being folded. */ -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ fold_multibyte_text (istream, width, &saved_errno); -+ else -+#endif -+ fold_text (istream, width, &saved_errno); -+ - if (ferror (istream)) - { - error (0, saved_errno, "%s", filename); -@@ -255,7 +501,8 @@ - - atexit (close_stdout); - -- break_spaces = count_bytes = have_read_stdin = false; -+ operating_mode = column_mode; -+ break_spaces = have_read_stdin = false; - - while ((optc = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1) - { -@@ -264,7 +511,15 @@ - switch (optc) - { - case 'b': /* Count bytes rather than columns. */ -- count_bytes = true; -+ if (operating_mode != column_mode) -+ FATAL_ERROR (_("only one way of folding may be specified")); -+ operating_mode = byte_mode; -+ break; -+ -+ case 'c': -+ if (operating_mode != column_mode) -+ FATAL_ERROR (_("only one way of folding may be specified")); -+ operating_mode = character_mode; - break; - - case 's': /* Break at word boundaries. */ ---- coreutils-5.93/src/join.c.i18n 2005-08-12 08:16:25.000000000 +0100 -+++ coreutils-5.93/src/join.c 2005-12-23 08:53:01.000000000 +0000 -@@ -23,16 +23,30 @@ - #include - #include - -+/* Get mbstate_t, mbrtowc(), mbrtowc(), wcwidth(). */ -+#if HAVE_WCHAR_H -+# include -+#endif -+ -+/* Get iswblank(), towupper. */ -+#if HAVE_WCTYPE_H -+# include -+#endif -+ - #include "system.h" - #include "error.h" - #include "hard-locale.h" - #include "linebuffer.h" --#include "memcasecmp.h" - #include "quote.h" - #include "stdio--.h" - #include "xmemcoll.h" - #include "xstrtol.h" - -+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ -+#if HAVE_MBRTOWC && defined mbstate_t -+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0) -+#endif -+ - /* The official name of this program (e.g., no `g' prefix). */ - #define PROGRAM_NAME "join" - -@@ -104,10 +118,12 @@ - /* Last element in `outlist', where a new element can be added. */ - static struct outlist *outlist_end = &outlist_head; - --/* Tab character separating fields. If negative, fields are separated -- by any nonempty string of blanks, otherwise by exactly one -- tab character whose value (when cast to unsigned char) equals TAB. */ --static int tab = -1; -+/* Tab character separating fields. If NULL, fields are separated -+ by any nonempty string of blanks. */ -+static char *tab = NULL; -+ -+/* The number of bytes used for tab. */ -+static size_t tablen = 0; - - static struct option const longopts[] = - { -@@ -197,6 +213,8 @@ - - /* Fill in the `fields' structure in LINE. */ - -+/* Fill in the `fields' structure in LINE. */ -+ - static void - xfields (struct line *line) - { -@@ -206,10 +224,11 @@ - if (ptr == lim) - return; - -- if (0 <= tab) -+ if (tab != NULL) - { -+ unsigned char t = tab[0]; - char *sep; -- for (; (sep = memchr (ptr, tab, lim - ptr)) != NULL; ptr = sep + 1) -+ for (; (sep = memchr (ptr, t, lim - ptr)) != NULL; ptr = sep + 1) - extract_field (line, ptr, sep - ptr); - } - else -@@ -236,6 +255,148 @@ - extract_field (line, ptr, lim - ptr); - } - -+#if HAVE_MBRTOWC -+static void -+xfields_multibyte (struct line *line) -+{ -+ char *ptr = line->buf.buffer; -+ char const *lim = ptr + line->buf.length - 1; -+ wchar_t wc = 0; -+ size_t mblength = 1; -+ mbstate_t state, state_bak; -+ -+ memset (&state, 0, sizeof (mbstate_t)); -+ -+ if (ptr == lim) -+ return; -+ -+ if (tab != NULL) -+ { -+ unsigned char t = tab[0]; -+ char *sep = ptr; -+ for (; ptr < lim; ptr = sep + mblength) -+ { -+ sep = ptr; -+ while (sep < lim) -+ { -+ state_bak = state; -+ mblength = mbrtowc (&wc, sep, lim - sep + 1, &state); -+ -+ if (mblength == (size_t)-1 || mblength == (size_t)-2) -+ { -+ mblength = 1; -+ state = state_bak; -+ } -+ mblength = (mblength < 1) ? 1 : mblength; -+ -+ if (mblength == tablen && !memcmp (sep, tab, mblength)) -+ break; -+ else -+ { -+ sep += mblength; -+ continue; -+ } -+ } -+ -+ if (sep == lim) -+ break; -+ -+ extract_field (line, ptr, sep - ptr); -+ } -+ } -+ else -+ { -+ /* Skip leading blanks before the first field. */ -+ while(ptr < lim) -+ { -+ state_bak = state; -+ mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state); -+ -+ if (mblength == (size_t)-1 || mblength == (size_t)-2) -+ { -+ mblength = 1; -+ state = state_bak; -+ break; -+ } -+ mblength = (mblength < 1) ? 1 : mblength; -+ -+ if (!iswblank(wc)) -+ break; -+ ptr += mblength; -+ } -+ -+ do -+ { -+ char *sep; -+ state_bak = state; -+ mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state); -+ if (mblength == (size_t)-1 || mblength == (size_t)-2) -+ { -+ mblength = 1; -+ state = state_bak; -+ break; -+ } -+ mblength = (mblength < 1) ? 1 : mblength; -+ -+ sep = ptr + mblength; -+ while (sep != lim) -+ { -+ state_bak = state; -+ mblength = mbrtowc (&wc, sep, lim - sep + 1, &state); -+ if (mblength == (size_t)-1 || mblength == (size_t)-2) -+ { -+ mblength = 1; -+ state = state_bak; -+ break; -+ } -+ mblength = (mblength < 1) ? 1 : mblength; -+ -+ if (iswblank (wc)) -+ break; -+ -+ sep += mblength; -+ } -+ -+ extract_field (line, ptr, sep - ptr); -+ if (sep == lim) -+ return; -+ -+ state_bak = state; -+ mblength = mbrtowc (&wc, sep, lim - sep + 1, &state); -+ if (mblength == (size_t)-1 || mblength == (size_t)-2) -+ { -+ mblength = 1; -+ state = state_bak; -+ break; -+ } -+ mblength = (mblength < 1) ? 1 : mblength; -+ -+ ptr = sep + mblength; -+ while (ptr != lim) -+ { -+ state_bak = state; -+ mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state); -+ if (mblength == (size_t)-1 || mblength == (size_t)-2) -+ { -+ mblength = 1; -+ state = state_bak; -+ break; -+ } -+ mblength = (mblength < 1) ? 1 : mblength; -+ -+ if (!iswblank (wc)) -+ break; -+ -+ ptr += mblength; -+ } -+ } -+ while (ptr != lim); -+ } -+ -+ extract_field (line, ptr, lim - ptr); -+} -+#endif -+ - /* Read a line from FP into LINE and split it into fields. - Return true if successful. */ - -@@ -256,6 +417,11 @@ - line->nfields_allocated = 0; - line->nfields = 0; - line->fields = NULL; -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ xfields_multibyte (line); -+ else -+#endif - xfields (line); - return true; - } -@@ -310,56 +476,114 @@ - keycmp (struct line const *line1, struct line const *line2) - { - /* Start of field to compare in each file. */ -- char *beg1; -- char *beg2; -- -- size_t len1; -- size_t len2; /* Length of fields to compare. */ -+ char *beg[2]; -+ char *copy[2]; -+ size_t len[2]; /* Length of fields to compare. */ - int diff; -+ int i, j; - - if (join_field_1 < line1->nfields) - { -- beg1 = line1->fields[join_field_1].beg; -- len1 = line1->fields[join_field_1].len; -+ beg[0] = line1->fields[join_field_1].beg; -+ len[0] = line1->fields[join_field_1].len; - } - else - { -- beg1 = NULL; -- len1 = 0; -+ beg[0] = NULL; -+ len[0] = 0; - } - - if (join_field_2 < line2->nfields) - { -- beg2 = line2->fields[join_field_2].beg; -- len2 = line2->fields[join_field_2].len; -+ beg[1] = line2->fields[join_field_2].beg; -+ len[1] = line2->fields[join_field_2].len; - } - else - { -- beg2 = NULL; -- len2 = 0; -+ beg[1] = NULL; -+ len[1] = 0; - } - -- if (len1 == 0) -- return len2 == 0 ? 0 : -1; -- if (len2 == 0) -+ if (len[0] == 0) -+ return len[1] == 0 ? 0 : -1; -+ if (len[1] == 0) - return 1; - - if (ignore_case) - { -- /* FIXME: ignore_case does not work with NLS (in particular, -- with multibyte chars). */ -- diff = memcasecmp (beg1, beg2, MIN (len1, len2)); -+#ifdef HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ { -+ size_t mblength; -+ wchar_t wc, uwc; -+ mbstate_t state, state_bak; -+ -+ memset (&state, '\0', sizeof (mbstate_t)); -+ -+ for (i = 0; i < 2; i++) -+ { -+ copy[i] = alloca (len[i] + 1); -+ -+ for (j = 0; j < MIN (len[0], len[1]);) -+ { -+ state_bak = state; -+ mblength = mbrtowc (&wc, beg[i] + j, len[i] - j, &state); -+ -+ switch (mblength) -+ { -+ case (size_t) -1: -+ case (size_t) -2: -+ state = state_bak; -+ /* Fall through */ -+ case 0: -+ mblength = 1; -+ break; -+ -+ default: -+ uwc = towupper (wc); -+ -+ if (uwc != wc) -+ { -+ mbstate_t state_wc; -+ -+ memset (&state_wc, '\0', sizeof (mbstate_t)); -+ wcrtomb (copy[i] + j, uwc, &state_wc); -+ } -+ else -+ memcpy (copy[i] + j, beg[i] + j, mblength); -+ } -+ j += mblength; -+ } -+ copy[i][j] = '\0'; -+ } -+ } -+ else -+#endif -+ { -+ for (i = 0; i < 2; i++) -+ { -+ copy[i] = alloca (len[i] + 1); -+ -+ for (j = 0; j < MIN (len[0], len[1]); j++) -+ copy[i][j] = toupper (beg[i][j]); -+ -+ copy[i][j] = '\0'; -+ } -+ } - } - else - { -- if (hard_LC_COLLATE) -- return xmemcoll (beg1, len1, beg2, len2); -- diff = memcmp (beg1, beg2, MIN (len1, len2)); -+ copy[0] = (unsigned char *) beg[0]; -+ copy[1] = (unsigned char *) beg[1]; - } - -+ if (HAVE_SETLOCALE && hard_LC_COLLATE) -+ return xmemcoll ((char *) copy[0], len[0], (char *) copy[1], len[1]); -+ diff = memcmp (copy[0], copy[1], MIN (len[0], len[1])); -+ - if (diff) - return diff; -- return len1 < len2 ? -1 : len1 != len2; -+ return len[0] - len[1]; - } - - /* Print field N of LINE if it exists and is nonempty, otherwise -@@ -384,11 +608,18 @@ - - /* Print the join of LINE1 and LINE2. */ - -+#define PUT_TAB_CHAR \ -+ do \ -+ { \ -+ (tab != NULL) ? \ -+ fwrite(tab, sizeof(char), tablen, stdout) : putchar (' '); \ -+ } \ -+ while (0) -+ - static void - prjoin (struct line const *line1, struct line const *line2) - { - const struct outlist *outlist; -- char output_separator = tab < 0 ? ' ' : tab; - - outlist = outlist_head.next; - if (outlist) -@@ -404,12 +635,12 @@ - if (o->file == 0) - { - if (line1 == &uni_blank) -- { -+ { - line = line2; - field = join_field_2; - } - else -- { -+ { - line = line1; - field = join_field_1; - } -@@ -423,7 +654,7 @@ - o = o->next; - if (o == NULL) - break; -- putchar (output_separator); -+ PUT_TAB_CHAR; - } - putchar ('\n'); - } -@@ -441,23 +672,23 @@ - prfield (join_field_1, line1); - for (i = 0; i < join_field_1 && i < line1->nfields; ++i) - { -- putchar (output_separator); -+ PUT_TAB_CHAR; - prfield (i, line1); - } - for (i = join_field_1 + 1; i < line1->nfields; ++i) - { -- putchar (output_separator); -+ PUT_TAB_CHAR; - prfield (i, line1); - } - - for (i = 0; i < join_field_2 && i < line2->nfields; ++i) - { -- putchar (output_separator); -+ PUT_TAB_CHAR; - prfield (i, line2); - } - for (i = join_field_2 + 1; i < line2->nfields; ++i) - { -- putchar (output_separator); -+ PUT_TAB_CHAR; - prfield (i, line2); - } - putchar ('\n'); -@@ -869,20 +1100,41 @@ - - case 't': - { -- unsigned char newtab = optarg[0]; -- if (! newtab) -+ char *newtab; -+ size_t newtablen; -+ if (! optarg[0]) - error (EXIT_FAILURE, 0, _("empty tab")); -- if (optarg[1]) -+ newtab = xstrdup (optarg); -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ { -+ mbstate_t state; -+ -+ memset (&state, 0, sizeof (mbstate_t)); -+ newtablen = mbrtowc (NULL, newtab, -+ strnlen (newtab, MB_LEN_MAX), -+ &state); -+ if (newtablen == (size_t) 0 -+ || newtablen == (size_t) -1 -+ || newtablen == (size_t) -2) -+ newtablen = 1; -+ } -+ else -+#endif -+ newtablen = 1; -+ -+ if (newtablen == 1 && newtab[1]) -+ { -+ if (STREQ (newtab, "\\0")) -+ newtab[0] = '\0'; -+ } -+ if (tab != NULL && strcmp (tab, newtab)) - { -- if (STREQ (optarg, "\\0")) -- newtab = '\0'; -- else -- error (EXIT_FAILURE, 0, _("multi-character tab %s"), -- quote (optarg)); -+ free (newtab); -+ error (EXIT_FAILURE, 0, _("incompatible tabs")); - } -- if (0 <= tab && tab != newtab) -- error (EXIT_FAILURE, 0, _("incompatible tabs")); - tab = newtab; -+ tablen = newtablen; - } - break; - ---- coreutils-5.93/src/unexpand.c.i18n 2005-08-12 08:16:25.000000000 +0100 -+++ coreutils-5.93/src/unexpand.c 2005-12-23 08:53:01.000000000 +0000 -@@ -39,11 +39,28 @@ - #include - #include - #include -+ -+/* Get mbstate_t, mbrtowc(), wcwidth(). */ -+#if HAVE_WCHAR_H -+# include -+#endif -+ - #include "system.h" - #include "error.h" - #include "quote.h" - #include "xstrndup.h" - -+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC -+ installation; work around this configuration error. */ -+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2 -+# define MB_LEN_MAX 16 -+#endif -+ -+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ -+#if HAVE_MBRTOWC && defined mbstate_t -+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0) -+#endif -+ - /* The official name of this program (e.g., no `g' prefix). */ - #define PROGRAM_NAME "unexpand" - -@@ -110,6 +127,208 @@ - {NULL, 0, NULL, 0} - }; - -+static FILE *next_file (FILE *fp); -+ -+#if HAVE_MBRTOWC -+static void -+unexpand_multibyte (void) -+{ -+ FILE *fp; /* Input stream. */ -+ mbstate_t i_state; /* Current shift state of the input stream. */ -+ mbstate_t i_state_bak; /* Back up the I_STATE. */ -+ mbstate_t o_state; /* Current shift state of the output stream. */ -+ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */ -+ char *bufpos; /* Next read position of BUF. */ -+ size_t buflen = 0; /* The length of the byte sequence in buf. */ -+ wint_t wc; /* A gotten wide character. */ -+ size_t mblength; /* The byte size of a multibyte character -+ which shows as same character as WC. */ -+ -+ /* Index in `tab_list' of next tabstop: */ -+ int tab_index = 0; /* For calculating width of pending tabs. */ -+ int print_tab_index = 0; /* For printing as many tabs as possible. */ -+ unsigned int column = 0; /* Column on screen of next char. */ -+ int next_tab_column; /* Column the next tab stop is on. */ -+ int convert = 1; /* If nonzero, perform translations. */ -+ unsigned int pending = 0; /* Pending columns of blanks. */ -+ -+ fp = next_file ((FILE *) NULL); -+ if (fp == NULL) -+ return; -+ -+ memset (&o_state, '\0', sizeof(mbstate_t)); -+ memset (&i_state, '\0', sizeof(mbstate_t)); -+ -+ for (;;) -+ { -+ if (buflen < MB_LEN_MAX && !feof(fp) && !ferror(fp)) -+ { -+ memmove (buf, bufpos, buflen); -+ buflen += fread (buf + buflen, sizeof(char), BUFSIZ, fp); -+ bufpos = buf; -+ } -+ -+ /* Get a wide character. */ -+ if (buflen < 1) -+ { -+ mblength = 1; -+ wc = WEOF; -+ } -+ else -+ { -+ i_state_bak = i_state; -+ mblength = mbrtowc ((wchar_t *)&wc, bufpos, buflen, &i_state); -+ } -+ -+ if (mblength == (size_t)-1 || mblength == (size_t)-2) -+ { -+ i_state = i_state_bak; -+ wc = L'\0'; -+ } -+ -+ if (wc == L' ' && convert && column < INT_MAX) -+ { -+ ++pending; -+ ++column; -+ } -+ else if (wc == L'\t' && convert) -+ { -+ if (tab_size == 0) -+ { -+ /* Do not let tab_index == first_free_tab; -+ stop when it is 1 less. */ -+ while (tab_index < first_free_tab - 1 -+ && column >= tab_list[tab_index]) -+ tab_index++; -+ next_tab_column = tab_list[tab_index]; -+ if (tab_index < first_free_tab - 1) -+ tab_index++; -+ if (column >= next_tab_column) -+ { -+ convert = 0; /* Ran out of tab stops. */ -+ goto flush_pend_mb; -+ } -+ } -+ else -+ { -+ next_tab_column = column + tab_size - column % tab_size; -+ } -+ pending += next_tab_column - column; -+ column = next_tab_column; -+ } -+ else -+ { -+flush_pend_mb: -+ /* Flush pending spaces. Print as many tabs as possible, -+ then print the rest as spaces. */ -+ if (pending == 1) -+ { -+ putchar (' '); -+ pending = 0; -+ } -+ column -= pending; -+ while (pending > 0) -+ { -+ if (tab_size == 0) -+ { -+ /* Do not let print_tab_index == first_free_tab; -+ stop when it is 1 less. */ -+ while (print_tab_index < first_free_tab - 1 -+ && column >= tab_list[print_tab_index]) -+ print_tab_index++; -+ next_tab_column = tab_list[print_tab_index]; -+ if (print_tab_index < first_free_tab - 1) -+ print_tab_index++; -+ } -+ else -+ { -+ next_tab_column = -+ column + tab_size - column % tab_size; -+ } -+ if (next_tab_column - column <= pending) -+ { -+ putchar ('\t'); -+ pending -= next_tab_column - column; -+ column = next_tab_column; -+ } -+ else -+ { -+ --print_tab_index; -+ column += pending; -+ while (pending != 0) -+ { -+ putchar (' '); -+ pending--; -+ } -+ } -+ } -+ -+ if (wc == WEOF) -+ { -+ fp = next_file (fp); -+ if (fp == NULL) -+ break; /* No more files. */ -+ else -+ { -+ memset (&i_state, '\0', sizeof(mbstate_t)); -+ continue; -+ } -+ } -+ -+ if (mblength == (size_t)-1 || mblength == (size_t)-2) -+ { -+ if (convert) -+ { -+ ++column; -+ if (convert_entire_line == 0) -+ convert = 0; -+ } -+ mblength = 1; -+ putchar (buf[0]); -+ } -+ else if (mblength == 0) -+ { -+ if (convert && convert_entire_line == 0) -+ convert = 0; -+ mblength = 1; -+ putchar ('\0'); -+ } -+ else -+ { -+ if (convert) -+ { -+ if (wc == L'\b') -+ { -+ if (column > 0) -+ --column; -+ } -+ else -+ { -+ int width; /* The width of WC. */ -+ -+ width = wcwidth (wc); -+ column += (width > 0) ? width : 0; -+ if (convert_entire_line == 0) -+ convert = 0; -+ } -+ } -+ -+ if (wc == L'\n') -+ { -+ tab_index = print_tab_index = 0; -+ column = pending = 0; -+ convert = 1; -+ } -+ fwrite (bufpos, sizeof(char), mblength, stdout); -+ } -+ } -+ buflen -= mblength; -+ bufpos += mblength; -+ } -+} -+#endif -+ -+ - void - usage (int status) - { -@@ -532,7 +751,12 @@ - - file_list = (optind < argc ? &argv[optind] : stdin_argv); - -- unexpand (); -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ unexpand_multibyte (); -+ else -+#endif -+ unexpand (); - - if (have_read_stdin && fclose (stdin) != 0) - error (EXIT_FAILURE, errno, "-"); ---- coreutils-5.93/src/sort.c.i18n 2005-10-07 19:48:28.000000000 +0100 -+++ coreutils-5.93/src/sort.c 2005-12-23 10:38:44.000000000 +0000 -@@ -23,9 +23,18 @@ - - #include - -+#include - #include - #include - #include -+#if HAVE_WCHAR_H -+# include -+#endif -+/* Get isw* functions. */ -+#if HAVE_WCTYPE_H -+# include -+#endif -+ - #include "system.h" - #include "error.h" - #include "hard-locale.h" -@@ -95,14 +104,38 @@ - /* Thousands separator; if -1, then there isn't one. */ - static int thousands_sep; - -+static int force_general_numcompare = 0; -+ - /* Nonzero if the corresponding locales are hard. */ - static bool hard_LC_COLLATE; --#if HAVE_NL_LANGINFO -+#if HAVE_LANGINFO_CODESET - static bool hard_LC_TIME; - #endif - - #define NONZERO(x) ((x) != 0) - -+/* get a multibyte character's byte length. */ -+#define GET_BYTELEN_OF_CHAR(LIM, PTR, MBLENGTH, STATE) \ -+ do \ -+ { \ -+ wchar_t wc; \ -+ mbstate_t state_bak; \ -+ \ -+ state_bak = STATE; \ -+ mblength = mbrtowc (&wc, PTR, LIM - PTR, &STATE); \ -+ \ -+ switch (MBLENGTH) \ -+ { \ -+ case (size_t)-1: \ -+ case (size_t)-2: \ -+ STATE = state_bak; \ -+ /* Fall through. */ \ -+ case 0: \ -+ MBLENGTH = 1; \ -+ } \ -+ } \ -+ while (0) -+ - /* The kind of blanks for '-b' to skip in various options. */ - enum blanktype { bl_start, bl_end, bl_both }; - -@@ -239,13 +272,11 @@ - they were read if all keys compare equal. */ - static bool stable; - --/* If TAB has this value, blanks separate fields. */ --enum { TAB_DEFAULT = CHAR_MAX + 1 }; -- --/* Tab character separating fields. If TAB_DEFAULT, then fields are -+/* Tab character separating fields. If tab_length is 0, then fields are - separated by the empty string between a non-blank character and a blank - character. */ --static int tab = TAB_DEFAULT; -+static char tab[MB_LEN_MAX + 1]; -+static size_t tab_length = 0; - - /* Flag to remove consecutive duplicate lines from the output. - Only the last of a sequence of equal lines will be output. */ -@@ -392,6 +423,44 @@ - static struct tempnode *volatile temphead; - static struct tempnode *volatile *temptail = &temphead; - -+/* Function pointers. */ -+static void -+(*inittables) (void); -+static char * -+(*begfield) (const struct line*, const struct keyfield *); -+static char * -+(*limfield) (const struct line*, const struct keyfield *); -+static int -+(*getmonth) (char const *, size_t); -+static int -+(*keycompare) (const struct line *, const struct line *); -+static int -+(*numcompare) (const char *, const char *); -+ -+/* Test for white space multibyte character. -+ Set LENGTH the byte length of investigated multibyte character. */ -+#if HAVE_MBRTOWC -+static int -+ismbblank (const char *str, size_t len, size_t *length) -+{ -+ size_t mblength; -+ wchar_t wc; -+ mbstate_t state; -+ -+ memset (&state, '\0', sizeof(mbstate_t)); -+ mblength = mbrtowc (&wc, str, len, &state); -+ -+ if (mblength == (size_t)-1 || mblength == (size_t)-2) -+ { -+ *length = 1; -+ return 0; -+ } -+ -+ *length = (mblength < 1) ? 1 : mblength; -+ return iswblank (wc); -+} -+#endif -+ - /* Clean up any remaining temporary files. */ - - static void -@@ -545,7 +614,7 @@ - free (node); - } - --#if HAVE_NL_LANGINFO -+#if HAVE_LANGINFO_CODESET - - static int - struct_month_cmp (const void *m1, const void *m2) -@@ -560,7 +629,7 @@ - /* Initialize the character class tables. */ - - static void --inittables (void) -+inittables_uni (void) - { - size_t i; - -@@ -572,7 +641,7 @@ - fold_toupper[i] = (ISLOWER (i) ? toupper (i) : i); - } - --#if HAVE_NL_LANGINFO -+#if HAVE_LANGINFO_CODESET - /* If we're not in the "C" locale, read different names for months. */ - if (hard_LC_TIME) - { -@@ -598,6 +667,64 @@ - #endif - } - -+#if HAVE_MBRTOWC -+static void -+inittables_mb (void) -+{ -+ int i, j, k, l; -+ char *name, *s; -+ size_t s_len, mblength; -+ char mbc[MB_LEN_MAX]; -+ wchar_t wc, pwc; -+ mbstate_t state_mb, state_wc; -+ -+ for (i = 0; i < MONTHS_PER_YEAR; i++) -+ { -+ s = (char *) nl_langinfo (ABMON_1 + i); -+ s_len = strlen (s); -+ monthtab[i].name = name = (char *) xmalloc (s_len + 1); -+ monthtab[i].val = i + 1; -+ -+ memset (&state_mb, '\0', sizeof (mbstate_t)); -+ memset (&state_wc, '\0', sizeof (mbstate_t)); -+ -+ for (j = 0; j < s_len;) -+ { -+ if (!ismbblank (s + j, s_len - j, &mblength)) -+ break; -+ j += mblength; -+ } -+ -+ for (k = 0; j < s_len;) -+ { -+ mblength = mbrtowc (&wc, (s + j), (s_len - j), &state_mb); -+ assert (mblength != (size_t)-1 && mblength != (size_t)-2); -+ if (mblength == 0) -+ break; -+ -+ pwc = towupper (wc); -+ if (pwc == wc) -+ { -+ memcpy (mbc, s + j, mblength); -+ j += mblength; -+ } -+ else -+ { -+ j += mblength; -+ mblength = wcrtomb (mbc, pwc, &state_wc); -+ assert (mblength != (size_t)0 && mblength != (size_t)-1); -+ } -+ -+ for (l = 0; l < mblength; l++) -+ name[k++] = mbc[l]; -+ } -+ name[k] = '\0'; -+ } -+ qsort ((void *) monthtab, MONTHS_PER_YEAR, -+ sizeof (struct month), struct_month_cmp); -+} -+#endif -+ - /* Specify the amount of main memory to use when sorting. */ - static void - specify_sort_size (char const *s) -@@ -808,7 +935,7 @@ - by KEY in LINE. */ - - static char * --begfield (const struct line *line, const struct keyfield *key) -+begfield_uni (const struct line *line, const struct keyfield *key) - { - char *ptr = line->text, *lim = ptr + line->length - 1; - size_t sword = key->sword; -@@ -818,10 +945,10 @@ - /* The leading field separator itself is included in a field when -t - is absent. */ - -- if (tab != TAB_DEFAULT) -+ if (tab_length) - while (ptr < lim && sword--) - { -- while (ptr < lim && *ptr != tab) -+ while (ptr < lim && *ptr != tab[0]) - ++ptr; - if (ptr < lim) - ++ptr; -@@ -849,11 +976,70 @@ - return ptr; - } - -+#if HAVE_MBRTOWC -+static char * -+begfield_mb (const struct line *line, const struct keyfield *key) -+{ -+ int i; -+ char *ptr = line->text, *lim = ptr + line->length - 1; -+ size_t sword = key->sword; -+ size_t schar = key->schar; -+ size_t mblength; -+ mbstate_t state; -+ -+ memset (&state, '\0', sizeof(mbstate_t)); -+ -+ if (tab_length) -+ while (ptr < lim && sword--) -+ { -+ while (ptr < lim && memcmp (ptr, tab, tab_length) != 0) -+ { -+ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state); -+ ptr += mblength; -+ } -+ if (ptr < lim) -+ { -+ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state); -+ ptr += mblength; -+ } -+ } -+ else -+ while (ptr < lim && sword--) -+ { -+ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength)) -+ ptr += mblength; -+ if (ptr < lim) -+ { -+ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state); -+ ptr += mblength; -+ } -+ while (ptr < lim && !ismbblank (ptr, lim - ptr, &mblength)) -+ ptr += mblength; -+ } -+ -+ if (key->skipsblanks) -+ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength)) -+ ptr += mblength; -+ -+ for (i = 0; i < schar; i++) -+ { -+ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state); -+ -+ if (ptr + mblength > lim) -+ break; -+ else -+ ptr += mblength; -+ } -+ -+ return ptr; -+} -+#endif -+ - /* Return the limit of (a pointer to the first character after) the field - in LINE specified by KEY. */ - - static char * --limfield (const struct line *line, const struct keyfield *key) -+limfield_uni (const struct line *line, const struct keyfield *key) - { - char *ptr = line->text, *lim = ptr + line->length - 1; - size_t eword = key->eword, echar = key->echar; -@@ -866,10 +1052,10 @@ - `beginning' is the first character following the delimiting TAB. - Otherwise, leave PTR pointing at the first `blank' character after - the preceding field. */ -- if (tab != TAB_DEFAULT) -+ if (tab_length) - while (ptr < lim && eword--) - { -- while (ptr < lim && *ptr != tab) -+ while (ptr < lim && *ptr != tab[0]) - ++ptr; - if (ptr < lim && (eword | echar)) - ++ptr; -@@ -915,10 +1101,10 @@ - */ - - /* Make LIM point to the end of (one byte past) the current field. */ -- if (tab != TAB_DEFAULT) -+ if (tab_length) - { - char *newlim; -- newlim = memchr (ptr, tab, lim - ptr); -+ newlim = memchr (ptr, tab[0], lim - ptr); - if (newlim) - lim = newlim; - } -@@ -951,6 +1137,107 @@ - return ptr; - } - -+#if HAVE_MBRTOWC -+static char * -+limfield_mb (const struct line *line, const struct keyfield *key) -+{ -+ char *ptr = line->text, *lim = ptr + line->length - 1; -+ size_t eword = key->eword, echar = key->echar; -+ int i; -+ size_t mblength; -+ mbstate_t state; -+ -+ memset (&state, '\0', sizeof(mbstate_t)); -+ -+ if (tab_length) -+ while (ptr < lim && eword--) -+ { -+ while (ptr < lim && memcmp (ptr, tab, tab_length) != 0) -+ { -+ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state); -+ ptr += mblength; -+ } -+ if (ptr < lim && (eword | echar)) -+ { -+ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state); -+ ptr += mblength; -+ } -+ } -+ else -+ while (ptr < lim && eword--) -+ { -+ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength)) -+ ptr += mblength; -+ if (ptr < lim) -+ { -+ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state); -+ ptr += mblength; -+ } -+ while (ptr < lim && !ismbblank (ptr, lim - ptr, &mblength)) -+ ptr += mblength; -+ } -+ -+ -+# ifdef POSIX_UNSPECIFIED -+ /* Make LIM point to the end of (one byte past) the current field. */ -+ if (tab_length) -+ { -+ char *newlim, *p; -+ -+ newlim = NULL; -+ for (p = ptr; p < lim;) -+ { -+ if (memcmp (p, tab, tab_length) == 0) -+ { -+ newlim = p; -+ break; -+ } -+ -+ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state); -+ p += mblength; -+ } -+ } -+ else -+ { -+ char *newlim; -+ newlim = ptr; -+ -+ while (newlim < lim && ismbblank (newlim, lim - newlim, &mblength)) -+ newlim += mblength; -+ if (ptr < lim) -+ { -+ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state); -+ ptr += mblength; -+ } -+ while (newlim < lim && !ismbblank (newlim, lim - newlim, &mblength)) -+ newlim += mblength; -+ lim = newlim; -+ } -+# endif -+ -+ /* If we're skipping leading blanks, don't start counting characters -+ * until after skipping past any leading blanks. */ -+ if (key->skipsblanks) -+ while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength)) -+ ptr += mblength; -+ -+ memset (&state, '\0', sizeof(mbstate_t)); -+ -+ /* Advance PTR by ECHAR (if possible), but no further than LIM. */ -+ for (i = 0; i < echar; i++) -+ { -+ GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state); -+ -+ if (ptr + mblength > lim) -+ break; -+ else -+ ptr += mblength; -+ } -+ -+ return ptr; -+} -+#endif -+ - /* Fill BUF reading from FP, moving buf->left bytes from the end - of buf->buf to the beginning first. If EOF is reached and the - file wasn't terminated by a newline, supply one. Set up BUF's line -@@ -1067,7 +1354,7 @@ - hideously fast. */ - - static int --numcompare (const char *a, const char *b) -+numcompare_uni (const char *a, const char *b) - { - while (blanks[to_uchar (*a)]) - a++; -@@ -1077,6 +1364,25 @@ - return strnumcmp (a, b, decimal_point, thousands_sep); - } - -+#if HAVE_MBRTOWC -+static int -+numcompare_mb (const char *a, const char *b) -+{ -+ size_t mblength, len; -+ len = strlen (a); /* okay for UTF-8 */ -+ while (*a && ismbblank (a, len > MB_CUR_MAX ? MB_CUR_MAX : len, &mblength)) -+ { -+ a += mblength; -+ len -= mblength; -+ } -+ len = strlen (b); /* okay for UTF-8 */ -+ while (*b && ismbblank (b, len > MB_CUR_MAX ? MB_CUR_MAX : len, &mblength)) -+ b += mblength; -+ -+ return strnumcmp (a, b, decimal_point, thousands_sep); -+} -+#endif /* HAV_EMBRTOWC */ -+ - static int - general_numcompare (const char *sa, const char *sb) - { -@@ -1110,7 +1416,7 @@ - Return 0 if the name in S is not recognized. */ - - static int --getmonth (char const *month, size_t len) -+getmonth_uni (char const *month, size_t len) - { - size_t lo = 0; - size_t hi = MONTHS_PER_YEAR; -@@ -1152,11 +1458,79 @@ - return 0; - } - -+#if HAVE_MBRTOWC -+static int -+getmonth_mb (const char *s, size_t len) -+{ -+ char *month; -+ register size_t i; -+ register int lo = 0, hi = MONTHS_PER_YEAR, result; -+ char *tmp; -+ size_t wclength, mblength; -+ const char **pp; -+ const wchar_t **wpp; -+ wchar_t *month_wcs; -+ mbstate_t state; -+ -+ while (len > 0 && ismbblank (s, len, &mblength)) -+ { -+ s += mblength; -+ len -= mblength; -+ } -+ -+ if (len == 0) -+ return 0; -+ -+ month = (char *) alloca (len + 1); -+ -+ tmp = (char *) alloca (len + 1); -+ memcpy (tmp, s, len); -+ tmp[len] = '\0'; -+ pp = (const char **)&tmp; -+ month_wcs = (wchar_t *) alloca ((len + 1) * sizeof (wchar_t)); -+ memset (&state, '\0', sizeof(mbstate_t)); -+ -+ wclength = mbsrtowcs (month_wcs, pp, len + 1, &state); -+ assert (wclength != (size_t)-1 && *pp == NULL); -+ -+ for (i = 0; i < wclength; i++) -+ { -+ month_wcs[i] = towupper(month_wcs[i]); -+ if (iswblank (month_wcs[i])) -+ { -+ month_wcs[i] = L'\0'; -+ break; -+ } -+ } -+ -+ wpp = (const wchar_t **)&month_wcs; -+ -+ mblength = wcsrtombs (month, wpp, len + 1, &state); -+ assert (mblength != (-1) && *wpp == NULL); -+ -+ do -+ { -+ int ix = (lo + hi) / 2; -+ -+ if (strncmp (month, monthtab[ix].name, strlen (monthtab[ix].name)) < 0) -+ hi = ix; -+ else -+ lo = ix; -+ } -+ while (hi - lo > 1); -+ -+ result = (!strncmp (month, monthtab[lo].name, strlen (monthtab[lo].name)) -+ ? monthtab[lo].val : 0); -+ -+ return result; -+} -+#endif -+ - /* Compare two lines A and B trying every key in sequence until there - are no more keys or a difference is found. */ - - static int --keycompare (const struct line *a, const struct line *b) -+keycompare_uni (const struct line *a, const struct line *b) - { - struct keyfield const *key = keylist; - -@@ -1326,6 +1700,177 @@ - return key->reverse ? -diff : diff; - } - -+#if HAVE_MBRTOWC -+static int -+keycompare_mb (const struct line *a, const struct line *b) -+{ -+ struct keyfield *key = keylist; -+ -+ /* For the first iteration only, the key positions have been -+ precomputed for us. */ -+ char *texta = a->keybeg; -+ char *textb = b->keybeg; -+ char *lima = a->keylim; -+ char *limb = b->keylim; -+ -+ size_t mblength_a, mblength_b; -+ wchar_t wc_a, wc_b; -+ mbstate_t state_a, state_b; -+ -+ int diff; -+ -+ memset (&state_a, '\0', sizeof(mbstate_t)); -+ memset (&state_b, '\0', sizeof(mbstate_t)); -+ -+ for (;;) -+ { -+ unsigned char *translate = (unsigned char *) key->translate; -+ bool const *ignore = key->ignore; -+ -+ /* Find the lengths. */ -+ size_t lena = lima <= texta ? 0 : lima - texta; -+ size_t lenb = limb <= textb ? 0 : limb - textb; -+ -+ /* Actually compare the fields. */ -+ if (key->numeric | key->general_numeric) -+ { -+ char savea = *lima, saveb = *limb; -+ -+ *lima = *limb = '\0'; -+ if (force_general_numcompare) -+ diff = general_numcompare (texta, textb); -+ else -+ diff = ((key->numeric ? numcompare : general_numcompare) -+ (texta, textb)); -+ *lima = savea, *limb = saveb; -+ } -+ else if (key->month) -+ diff = getmonth (texta, lena) - getmonth (textb, lenb); -+ else -+ { -+ if (ignore || translate) -+ { -+ char *copy_a = (char *) alloca (lena + 1 + lenb + 1); -+ char *copy_b = copy_a + lena + 1; -+ size_t new_len_a, new_len_b; -+ size_t i, j; -+ -+ /* Ignore and/or translate chars before comparing. */ -+# define IGNORE_CHARS(NEW_LEN, LEN, TEXT, COPY, WC, MBLENGTH, STATE) \ -+ do \ -+ { \ -+ wchar_t uwc; \ -+ char mbc[MB_LEN_MAX]; \ -+ mbstate_t state_wc; \ -+ \ -+ for (NEW_LEN = i = 0; i < LEN;) \ -+ { \ -+ mbstate_t state_bak; \ -+ \ -+ state_bak = STATE; \ -+ MBLENGTH = mbrtowc (&WC, TEXT + i, LEN - i, &STATE); \ -+ \ -+ if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1 \ -+ || MBLENGTH == 0) \ -+ { \ -+ if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1) \ -+ STATE = state_bak; \ -+ if (!ignore) \ -+ COPY[NEW_LEN++] = TEXT[i++]; \ -+ continue; \ -+ } \ -+ \ -+ if (ignore) \ -+ { \ -+ if ((ignore == nonprinting && !iswprint (WC)) \ -+ || (ignore == nondictionary \ -+ && !iswalnum (WC) && !iswblank (WC))) \ -+ { \ -+ i += MBLENGTH; \ -+ continue; \ -+ } \ -+ } \ -+ \ -+ if (translate) \ -+ { \ -+ \ -+ uwc = towupper(WC); \ -+ if (WC == uwc) \ -+ { \ -+ memcpy (mbc, TEXT + i, MBLENGTH); \ -+ i += MBLENGTH; \ -+ } \ -+ else \ -+ { \ -+ i += MBLENGTH; \ -+ WC = uwc; \ -+ memset (&state_wc, '\0', sizeof (mbstate_t)); \ -+ \ -+ MBLENGTH = wcrtomb (mbc, WC, &state_wc); \ -+ assert (MBLENGTH != (size_t)-1 && MBLENGTH != 0); \ -+ } \ -+ \ -+ for (j = 0; j < MBLENGTH; j++) \ -+ COPY[NEW_LEN++] = mbc[j]; \ -+ } \ -+ else \ -+ for (j = 0; j < MBLENGTH; j++) \ -+ COPY[NEW_LEN++] = TEXT[i++]; \ -+ } \ -+ COPY[NEW_LEN] = '\0'; \ -+ } \ -+ while (0) -+ IGNORE_CHARS (new_len_a, lena, texta, copy_a, -+ wc_a, mblength_a, state_a); -+ IGNORE_CHARS (new_len_b, lenb, textb, copy_b, -+ wc_b, mblength_b, state_b); -+ diff = xmemcoll (copy_a, new_len_a, copy_b, new_len_b); -+ } -+ else if (lena == 0) -+ diff = - NONZERO (lenb); -+ else if (lenb == 0) -+ goto greater; -+ else -+ diff = xmemcoll (texta, lena, textb, lenb); -+ } -+ -+ if (diff) -+ goto not_equal; -+ -+ key = key->next; -+ if (! key) -+ break; -+ -+ /* Find the beginning and limit of the next field. */ -+ if (key->eword != -1) -+ lima = limfield (a, key), limb = limfield (b, key); -+ else -+ lima = a->text + a->length - 1, limb = b->text + b->length - 1; -+ -+ if (key->sword != -1) -+ texta = begfield (a, key), textb = begfield (b, key); -+ else -+ { -+ texta = a->text, textb = b->text; -+ if (key->skipsblanks) -+ { -+ while (texta < lima && ismbblank (texta, lima - texta, &mblength_a)) -+ texta += mblength_a; -+ while (textb < limb && ismbblank (textb, limb - textb, &mblength_b)) -+ textb += mblength_b; -+ } -+ } -+ } -+ -+ return 0; -+ -+greater: -+ diff = 1; -+not_equal: -+ return key->reverse ? -diff : diff; -+} -+#endif -+ - /* Compare two lines A and B, returning negative, zero, or positive - depending on whether A compares less than, equal to, or greater than B. */ - -@@ -2127,7 +2672,7 @@ - atexit (close_stdout); - - hard_LC_COLLATE = hard_locale (LC_COLLATE); --#if HAVE_NL_LANGINFO -+#if HAVE_LANGINFO_CODESET - hard_LC_TIME = hard_locale (LC_TIME); - #endif - -@@ -2148,6 +2693,27 @@ - thousands_sep = -1; - } - -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ { -+ inittables = inittables_mb; -+ begfield = begfield_mb; -+ limfield = limfield_mb; -+ getmonth = getmonth_mb; -+ keycompare = keycompare_mb; -+ numcompare = numcompare_mb; -+ } -+ else -+#endif -+ { -+ inittables = inittables_uni; -+ begfield = begfield_uni; -+ limfield = limfield_uni; -+ getmonth = getmonth_uni; -+ keycompare = keycompare_uni; -+ numcompare = numcompare_uni; -+ } -+ - have_read_stdin = false; - inittables (); - -@@ -2349,13 +2915,35 @@ - - case 't': - { -- char newtab = optarg[0]; -- if (! newtab) -+ char newtab[MB_LEN_MAX + 1]; -+ size_t newtab_length = 1; -+ strncpy (newtab, optarg, MB_LEN_MAX); -+ if (! newtab[0]) - error (SORT_FAILURE, 0, _("empty tab")); -- if (optarg[1]) -+#if HAVE_MBRTOWC -+ if (MB_CUR_MAX > 1) -+ { -+ wchar_t wc; -+ mbstate_t state; -+ size_t i; -+ -+ memset (&state, '\0', sizeof (mbstate_t)); -+ newtab_length = mbrtowc (&wc, newtab, strnlen (newtab, -+ MB_LEN_MAX), -+ &state); -+ switch (newtab_length) -+ { -+ case (size_t) -1: -+ case (size_t) -2: -+ case 0: -+ newtab_length = 1; -+ } -+ } -+#endif -+ if (newtab_length == 1 && optarg[1]) - { - if (STREQ (optarg, "\\0")) -- newtab = '\0'; -+ newtab[0] = '\0'; - else - { - /* Provoke with `sort -txx'. Complain about -@@ -2366,9 +2954,12 @@ - quote (optarg)); - } - } -- if (tab != TAB_DEFAULT && tab != newtab) -+ if (tab_length -+ && (tab_length != newtab_length -+ || memcmp (tab, newtab, tab_length) != 0)) - error (SORT_FAILURE, 0, _("incompatible tabs")); -- tab = newtab; -+ memcpy (tab, newtab, newtab_length); -+ tab_length = newtab_length; - } - break; - ---- /dev/null 2005-10-10 09:36:06.437701000 +0100 -+++ coreutils-5.93/tests/sort/sort-mb-tests 2005-12-23 08:53:01.000000000 +0000 -@@ -0,0 +1,58 @@ -+#! /bin/sh -+case $# in -+ 0) xx='../../src/sort';; -+ *) xx="$1";; -+esac -+test "$VERBOSE" && echo=echo || echo=: -+$echo testing program: $xx -+errors=0 -+test "$srcdir" || srcdir=. -+test "$VERBOSE" && $xx --version 2> /dev/null -+ -+export LC_ALL=en_US.UTF-8 -+locale -k LC_CTYPE 2>&1 | grep -q charmap.*UTF-8 || exit 77 -+errors=0 -+ -+$xx -t @ -k2 -n mb1.I > mb1.O -+code=$? -+if test $code != 0; then -+ $echo "Test mb1 failed: $xx return code $code differs from expected value 0" 1>&2 -+ errors=`expr $errors + 1` -+else -+ cmp mb1.O $srcdir/mb1.X > /dev/null 2>&1 -+ case $? in -+ 0) if test "$VERBOSE"; then $echo "passed mb1"; fi;; -+ 1) $echo "Test mb1 failed: files mb1.O and $srcdir/mb1.X differ" 1>&2 -+ (diff -c mb1.O $srcdir/mb1.X) 2> /dev/null -+ errors=`expr $errors + 1`;; -+ 2) $echo "Test mb1 may have failed." 1>&2 -+ $echo The command "cmp mb1.O $srcdir/mb1.X" failed. 1>&2 -+ errors=`expr $errors + 1`;; -+ esac -+fi -+ -+$xx -t @ -k4 -n mb2.I > mb2.O -+code=$? -+if test $code != 0; then -+ $echo "Test mb2 failed: $xx return code $code differs from expected value 0" 1>&2 -+ errors=`expr $errors + 1` -+else -+ cmp mb2.O $srcdir/mb2.X > /dev/null 2>&1 -+ case $? in -+ 0) if test "$VERBOSE"; then $echo "passed mb2"; fi;; -+ 1) $echo "Test mb2 failed: files mb2.O and $srcdir/mb2.X differ" 1>&2 -+ (diff -c mb2.O $srcdir/mb2.X) 2> /dev/null -+ errors=`expr $errors + 1`;; -+ 2) $echo "Test mb2 may have failed." 1>&2 -+ $echo The command "cmp mb2.O $srcdir/mb2.X" failed. 1>&2 -+ errors=`expr $errors + 1`;; -+ esac -+fi -+ -+if test $errors = 0; then -+ $echo Passed all 113 tests. 1>&2 -+else -+ $echo Failed $errors tests. 1>&2 -+fi -+test $errors = 0 || errors=1 -+exit $errors ---- /dev/null 2005-10-10 09:36:06.437701000 +0100 -+++ coreutils-5.93/tests/sort/mb1.I 2005-12-23 08:53:01.000000000 +0000 -@@ -0,0 +1,4 @@ -+Apple@10 -+Banana@5 -+Citrus@20 -+Cherry@30 ---- /dev/null 2005-10-10 09:36:06.437701000 +0100 -+++ coreutils-5.93/tests/sort/mb2.I 2005-12-23 08:53:01.000000000 +0000 -@@ -0,0 +1,4 @@ -+Apple@AA10@@20 -+Banana@AA5@@30 -+Citrus@AA20@@5 -+Cherry@AA30@@10 ---- /dev/null 2005-10-10 09:36:06.437701000 +0100 -+++ coreutils-5.93/tests/sort/mb1.X 2005-12-23 08:53:01.000000000 +0000 -@@ -0,0 +1,4 @@ -+Banana@5 -+Apple@10 -+Citrus@20 -+Cherry@30 ---- /dev/null 2005-10-10 09:36:06.437701000 +0100 -+++ coreutils-5.93/tests/sort/mb2.X 2005-12-23 08:53:01.000000000 +0000 -@@ -0,0 +1,4 @@ -+Citrus@AA20@@5 -+Cherry@AA30@@10 -+Apple@AA10@@20 -+Banana@AA5@@30 ---- coreutils-5.93/tests/sort/Makefile.am.i18n 2005-10-24 22:02:25.000000000 +0100 -+++ coreutils-5.93/tests/sort/Makefile.am 2005-12-23 08:53:01.000000000 +0000 -@@ -43,14 +43,16 @@ - nul-nls.E use-nl.O use-nl.E o2.O o2.E nul-tab.O nul-tab.E - ##test-files-end - --EXTRA_DIST = Test.pm $x-tests $(explicit) $(maint_gen) --noinst_SCRIPTS = $x-tests -+run_gen += mb1.O mb2.O -+ -+EXTRA_DIST = Test.pm $x-tests $(explicit) $(maint_gen) mb1.I mb1.X mb2.I mb2.X -+noinst_SCRIPTS = $x-tests # $x-mb-tests - TESTS_ENVIRONMENT = \ - PATH="`pwd`/../../src$(PATH_SEPARATOR)$$PATH" - - editpl = sed -e 's,@''PERL''@,$(PERL),g' -e 's,@''srcdir''@,$(srcdir),g' - --TESTS = $x-tests -+TESTS = $x-tests $x-mb-tests - - mk_script = $(srcdir)/../mk-script - $(srcdir)/$x-tests: $(mk_script) Test.pm Makefile.am ---- coreutils-5.93/tests/sort/Makefile.in.i18n 2005-10-22 19:13:23.000000000 +0100 -+++ coreutils-5.93/tests/sort/Makefile.in 2005-10-26 22:17:04.000000000 +0100 -@@ -338,13 +338,15 @@ - o-no-file1.E create-empty.O create-empty.E neg-nls.O neg-nls.E nul-nls.O \ - nul-nls.E use-nl.O use-nl.E o2.O o2.E nul-tab.O nul-tab.E - --EXTRA_DIST = Test.pm $x-tests $(explicit) $(maint_gen) --noinst_SCRIPTS = $x-tests -+run_gen += mb1.O mb2.O -+ -+EXTRA_DIST = Test.pm $x-tests $(explicit) $(maint_gen) mb1.I mb1.X mb2.I mb2.X -+noinst_SCRIPTS = $x-tests # $x-mb-tests - TESTS_ENVIRONMENT = \ - PATH="`pwd`/../../src$(PATH_SEPARATOR)$$PATH" - - editpl = sed -e 's,@''PERL''@,$(PERL),g' -e 's,@''srcdir''@,$(srcdir),g' --TESTS = $x-tests -+TESTS = $x-tests $x-mb-tests - mk_script = $(srcdir)/../mk-script - MAINTAINERCLEANFILES = $x-tests $(maint_gen) - CLEANFILES = $(run_gen) diff --git a/src/patches/coreutils-5.96-rename-tee.patch b/src/patches/coreutils-5.96-rename-tee.patch deleted file mode 100644 index 60afab441..000000000 --- a/src/patches/coreutils-5.96-rename-tee.patch +++ /dev/null @@ -1,51 +0,0 @@ -From b50508742035812f8ae8671eedc6623fac53f51d Mon Sep 17 00:00:00 2001 -From: Jim Meyering -Date: Thu, 22 Jun 2006 12:50:32 +0000 -Subject: [PATCH] * src/tee.c (tee_files): Rename from tee, to avoid conflict with - the function in glibc's . Reported by Andreas Schwab. - ---- - src/tee.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/tee.c b/src/tee.c -index f99642d..f612181 100644 ---- a/src/tee.c -+++ b/src/tee.c -@@ -1,5 +1,5 @@ - /* tee - read from standard input and write to standard output and files. -- Copyright (C) 85,1990-2005 Free Software Foundation, Inc. -+ Copyright (C) 85,1990-2006 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by -@@ -31,7 +31,7 @@ - - #define AUTHORS "Mike Parker", "Richard M. Stallman", "David MacKenzie" - --static bool tee (int nfiles, const char **files); -+static bool tee_files (int nfiles, const char **files); - - /* If true, append to output files rather than truncating them. */ - static bool append; -@@ -121,7 +121,7 @@ main (int argc, char **argv) - /* Do *not* warn if tee is given no file arguments. - POSIX requires that it work when given no arguments. */ - -- ok = tee (argc - optind, (const char **) &argv[optind]); -+ ok = tee_files (argc - optind, (const char **) &argv[optind]); - if (close (STDIN_FILENO) != 0) - error (EXIT_FAILURE, errno, _("standard input")); - -@@ -133,7 +133,7 @@ main (int argc, char **argv) - Return true if successful. */ - - static bool --tee (int nfiles, const char **files) -+tee_files (int nfiles, const char **files) - { - FILE **descriptors; - char buffer[BUFSIZ]; --- -1.7.2.5 - diff --git a/src/patches/coreutils-5.96-suppress_uptime_kill_su-1.patch b/src/patches/coreutils-5.96-suppress_uptime_kill_su-1.patch deleted file mode 100644 index 6a089092d..000000000 --- a/src/patches/coreutils-5.96-suppress_uptime_kill_su-1.patch +++ /dev/null @@ -1,272 +0,0 @@ -Submitted By: Matthew Burgess -Date: 2006-03-15 -Initial Package Version: 5.94 -Origin: original suppress_hotname_uptame_kill_su patch (Robert Connolly) -Upstream Status: N/A -Description: This patch supresses the building of uptime, and kill. The su -command is built so the testsuite can run, use './src/su', but it will not -be installed. Also see: - http://www.linuxfromscratch.org/patches/downloads/coreutils/ - coreutils-5.0-dupes-2.patch - -diff -Naur coreutils-5.94.orig/AUTHORS coreutils-5.94/AUTHORS ---- coreutils-5.94.orig/AUTHORS 2004-11-03 23:10:50.000000000 +0000 -+++ coreutils-5.94/AUTHORS 2006-03-15 22:20:49.000000000 +0000 -@@ -34,7 +34,6 @@ - hostname: Jim Meyering - id: Arnold Robbins, David MacKenzie - join: Mike Haertel --kill: Paul Eggert - link: Michael Stone - ln: Mike Parker, David MacKenzie - logname: FIXME: unknown -@@ -83,7 +82,6 @@ - unexpand: David MacKenzie - uniq: Richard Stallman, David MacKenzie - unlink: Michael Stone --uptime: Joseph Arceneaux, David MacKenzie, Kaveh Ghazi - users: Joseph Arceneaux, David MacKenzie - vdir: Richard Stallman, David MacKenzie - wc: Paul Rubin, David MacKenzie -diff -Naur coreutils-5.94.orig/Makefile.in coreutils-5.94/Makefile.in ---- coreutils-5.94.orig/Makefile.in 2006-02-13 12:52:03.000000000 +0000 -+++ coreutils-5.94/Makefile.in 2006-03-15 22:20:49.000000000 +0000 -@@ -148,7 +148,7 @@ - $(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \ - $(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \ - $(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \ -- $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \ -+ $(top_srcdir)/m4/unlocked-io.m4 \ - $(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \ - $(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \ - $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \ -diff -Naur coreutils-5.94.orig/README coreutils-5.94/README ---- coreutils-5.94.orig/README 2005-09-28 18:34:26.000000000 +0000 -+++ coreutils-5.94/README 2006-03-15 22:20:49.000000000 +0000 -@@ -9,11 +9,11 @@ - - [ basename cat chgrp chmod chown chroot cksum comm cp csplit cut date dd - df dir dircolors dirname du echo env expand expr factor false fmt fold -- ginstall groups head hostid hostname id join kill link ln logname ls -+ ginstall groups head hostid hostname id join link ln logname ls - md5sum mkdir mkfifo mknod mv nice nl nohup od paste pathchk pinky pr - printenv printf ptx pwd readlink rm rmdir seq sha1sum shred sleep sort - split stat stty su sum sync tac tail tee test touch tr true tsort tty -- uname unexpand uniq unlink uptime users vdir wc who whoami yes -+ uname unexpand uniq unlink users vdir wc who whoami yes - - See the file NEWS for a list of major changes in the current release. - -diff -Naur coreutils-5.94.orig/configure coreutils-5.94/configure ---- coreutils-5.94.orig/configure 2006-02-13 12:52:04.000000000 +0000 -+++ coreutils-5.94/configure 2006-03-15 22:20:49.000000000 +0000 -@@ -50418,8 +50418,7 @@ - { echo "$as_me:$LINENO: result: $gnulib_cv_have_boot_time" >&5 - echo "${ECHO_T}$gnulib_cv_have_boot_time" >&6; } - if test $gnulib_cv_have_boot_time = yes; then -- OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS uptime\$(EXEEXT)" -- MAN="$MAN uptime.1" -+echo "uptime is suppressed" - fi - - -diff -Naur coreutils-5.94.orig/man/Makefile.in coreutils-5.94/man/Makefile.in ---- coreutils-5.94.orig/man/Makefile.in 2006-02-13 12:51:58.000000000 +0000 -+++ coreutils-5.94/man/Makefile.in 2006-03-15 22:20:50.000000000 +0000 -@@ -142,7 +142,7 @@ - $(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \ - $(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \ - $(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \ -- $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \ -+ $(top_srcdir)/m4/unlocked-io.m4 \ - $(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \ - $(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \ - $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \ -@@ -303,13 +303,13 @@ - basename.1 cat.1 chgrp.1 chmod.1 chown.1 chroot.1 cksum.1 comm.1 \ - cp.1 csplit.1 cut.1 date.1 dd.1 df.1 dir.1 dircolors.1 dirname.1 du.1 \ - echo.1 env.1 expand.1 expr.1 factor.1 false.1 fmt.1 fold.1 groups.1 \ -- head.1 hostid.1 hostname.1 id.1 install.1 join.1 kill.1 \ -+ head.1 hostid.1 hostname.1 id.1 install.1 join.1 \ - link.1 ln.1 logname.1 \ - ls.1 md5sum.1 mkdir.1 mkfifo.1 mknod.1 mv.1 nice.1 nl.1 nohup.1 od.1 \ - paste.1 pathchk.1 pinky.1 pr.1 printenv.1 printf.1 ptx.1 pwd.1 readlink.1 \ - rm.1 rmdir.1 seq.1 sha1sum.1 shred.1 sleep.1 sort.1 split.1 stat.1 stty.1 \ -- su.1 sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \ -- tty.1 uname.1 unexpand.1 uniq.1 unlink.1 uptime.1 users.1 vdir.1 wc.1 \ -+ sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \ -+ tty.1 uname.1 unexpand.1 uniq.1 unlink.1 users.1 vdir.1 wc.1 \ - who.1 whoami.1 yes.1 - - man_aux = $(dist_man_MANS:.1=.x) -@@ -575,7 +575,6 @@ - id.1: $(common_dep) $(srcdir)/id.x ../src/id.c - install.1: $(common_dep) $(srcdir)/install.x ../src/install.c - join.1: $(common_dep) $(srcdir)/join.x ../src/join.c --kill.1: $(common_dep) $(srcdir)/kill.x ../src/kill.c - link.1: $(common_dep) $(srcdir)/link.x ../src/link.c - ln.1: $(common_dep) $(srcdir)/ln.x ../src/ln.c - logname.1: $(common_dep) $(srcdir)/logname.x ../src/logname.c -@@ -608,7 +607,6 @@ - split.1: $(common_dep) $(srcdir)/split.x ../src/split.c - stat.1: $(common_dep) $(srcdir)/stat.x ../src/stat.c - stty.1: $(common_dep) $(srcdir)/stty.x ../src/stty.c --su.1: $(common_dep) $(srcdir)/su.x ../src/su.c - sum.1: $(common_dep) $(srcdir)/sum.x ../src/sum.c - sync.1: $(common_dep) $(srcdir)/sync.x ../src/sync.c - tac.1: $(common_dep) $(srcdir)/tac.x ../src/tac.c -@@ -624,7 +622,6 @@ - unexpand.1: $(common_dep) $(srcdir)/unexpand.x ../src/unexpand.c - uniq.1: $(common_dep) $(srcdir)/uniq.x ../src/uniq.c - unlink.1: $(common_dep) $(srcdir)/unlink.x ../src/unlink.c --uptime.1: $(common_dep) $(srcdir)/uptime.x ../src/uptime.c - users.1: $(common_dep) $(srcdir)/users.x ../src/users.c - vdir.1: $(common_dep) $(srcdir)/vdir.x ../src/ls.c - wc.1: $(common_dep) $(srcdir)/wc.x ../src/wc.c -@@ -656,7 +653,7 @@ - check-x-vs-1: - PATH=../src$(PATH_SEPARATOR)$$PATH; export PATH; \ - t=ls-files.$$$$; \ -- (cd $(srcdir) && ls -1 *.x) | sed 's/\.x$$//' | $(ASSORT) > $$t;\ -+ (cd $(srcdir) && ls -1 *.x) | grep -v -e 'kill.x' -e 'su.x' -e 'uptime.x' | sed 's/\.x$$//' | $(ASSORT) > $$t;\ - echo $(dist_man_MANS) | tr -s ' ' '\n' | sed 's/\.1$$//' \ - | $(ASSORT) | diff - $$t || { rm $$t; exit 1; }; \ - rm $$t -diff -Naur coreutils-5.94.orig/src/Makefile.in coreutils-5.94/src/Makefile.in ---- coreutils-5.94.orig/src/Makefile.in 2006-02-13 13:08:11.000000000 +0000 -+++ coreutils-5.94/src/Makefile.in 2006-03-15 22:20:50.000000000 +0000 -@@ -39,7 +39,7 @@ - host_triplet = @host@ - EXTRA_PROGRAMS = chroot$(EXEEXT) df$(EXEEXT) hostid$(EXEEXT) \ - nice$(EXEEXT) pinky$(EXEEXT) stty$(EXEEXT) su$(EXEEXT) \ -- uname$(EXEEXT) uptime$(EXEEXT) users$(EXEEXT) who$(EXEEXT) -+ uname$(EXEEXT) users$(EXEEXT) who$(EXEEXT) - bin_PROGRAMS = [$(EXEEXT) chgrp$(EXEEXT) chown$(EXEEXT) chmod$(EXEEXT) \ - cp$(EXEEXT) dd$(EXEEXT) dircolors$(EXEEXT) du$(EXEEXT) \ - ginstall$(EXEEXT) link$(EXEEXT) ln$(EXEEXT) dir$(EXEEXT) \ -@@ -56,7 +56,7 @@ - uniq$(EXEEXT) wc$(EXEEXT) basename$(EXEEXT) date$(EXEEXT) \ - dirname$(EXEEXT) echo$(EXEEXT) env$(EXEEXT) expr$(EXEEXT) \ - factor$(EXEEXT) false$(EXEEXT) hostname$(EXEEXT) id$(EXEEXT) \ -- kill$(EXEEXT) logname$(EXEEXT) pathchk$(EXEEXT) \ -+ logname$(EXEEXT) pathchk$(EXEEXT) \ - printenv$(EXEEXT) printf$(EXEEXT) pwd$(EXEEXT) seq$(EXEEXT) \ - sleep$(EXEEXT) tee$(EXEEXT) test$(EXEEXT) true$(EXEEXT) \ - tty$(EXEEXT) whoami$(EXEEXT) yes$(EXEEXT) $(am__EXEEXT_1) \ -@@ -169,7 +169,7 @@ - $(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \ - $(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \ - $(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \ -- $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \ -+ $(top_srcdir)/m4/unlocked-io.m4 \ - $(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \ - $(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \ - $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \ -@@ -350,11 +350,6 @@ - join_LDADD = $(LDADD) - join_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \ - ../lib/libcoreutils.a --kill_SOURCES = kill.c --kill_OBJECTS = kill.$(OBJEXT) --kill_LDADD = $(LDADD) --kill_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \ -- ../lib/libcoreutils.a - link_SOURCES = link.c - link_OBJECTS = link.$(OBJEXT) - link_LDADD = $(LDADD) -@@ -577,9 +572,6 @@ - unlink_LDADD = $(LDADD) - unlink_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \ - ../lib/libcoreutils.a --uptime_SOURCES = uptime.c --uptime_OBJECTS = uptime.$(OBJEXT) --uptime_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) - users_SOURCES = users.c - users_OBJECTS = users.$(OBJEXT) - users_LDADD = $(LDADD) -@@ -622,28 +614,28 @@ - csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \ - dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \ - fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \ -- id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \ -+ id.c join.c link.c ln.c logname.c $(ls_SOURCES) \ - $(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \ - nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \ - printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \ - rmdir.c seq.c setuidgid.c $(sha1sum_SOURCES) shred.c sleep.c \ - sort.c split.c stat.c stty.c su.c sum.c sync.c tac.c tail.c \ - tee.c test.c touch.c tr.c true.c tsort.c tty.c uname.c \ -- unexpand.c uniq.c unlink.c uptime.c users.c $(vdir_SOURCES) \ -+ unexpand.c uniq.c unlink.c users.c $(vdir_SOURCES) \ - wc.c who.c whoami.c yes.c - DIST_SOURCES = $(__SOURCES) basename.c cat.c $(chgrp_SOURCES) chmod.c \ - $(chown_SOURCES) chroot.c cksum.c comm.c $(cp_SOURCES) \ - csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \ - dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \ - fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \ -- id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \ -+ id.c join.c link.c ln.c logname.c $(ls_SOURCES) \ - $(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \ - nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \ - printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \ - rmdir.c seq.c setuidgid.c $(sha1sum_SOURCES) shred.c sleep.c \ - sort.c split.c stat.c stty.c su.c sum.c sync.c tac.c tail.c \ - tee.c test.c touch.c tr.c true.c tsort.c tty.c uname.c \ -- unexpand.c uniq.c unlink.c uptime.c users.c $(vdir_SOURCES) \ -+ unexpand.c uniq.c unlink.c users.c $(vdir_SOURCES) \ - wc.c who.c whoami.c yes.c - HEADERS = $(noinst_HEADERS) - ETAGS = etags -@@ -840,7 +832,6 @@ - nanosec_libs = $(LDADD) $(POW_LIB) $(LIB_NANOSLEEP) - sleep_LDADD = $(nanosec_libs) - tail_LDADD = $(nanosec_libs) --uptime_LDADD = $(LDADD) $(GETLOADAVG_LIBS) - su_LDADD = $(LDADD) $(LIB_CRYPT) - SUFFIXES = .sh - installed_su = $(DESTDIR)$(bindir)/`echo su|sed '$(transform)'` -@@ -1076,9 +1067,6 @@ - join$(EXEEXT): $(join_OBJECTS) $(join_DEPENDENCIES) - @rm -f join$(EXEEXT) - $(LINK) $(join_LDFLAGS) $(join_OBJECTS) $(join_LDADD) $(LIBS) --kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) -- @rm -f kill$(EXEEXT) -- $(LINK) $(kill_LDFLAGS) $(kill_OBJECTS) $(kill_LDADD) $(LIBS) - link$(EXEEXT): $(link_OBJECTS) $(link_DEPENDENCIES) - @rm -f link$(EXEEXT) - $(LINK) $(link_LDFLAGS) $(link_OBJECTS) $(link_LDADD) $(LIBS) -@@ -1226,9 +1214,6 @@ - unlink$(EXEEXT): $(unlink_OBJECTS) $(unlink_DEPENDENCIES) - @rm -f unlink$(EXEEXT) - $(LINK) $(unlink_LDFLAGS) $(unlink_OBJECTS) $(unlink_LDADD) $(LIBS) --uptime$(EXEEXT): $(uptime_OBJECTS) $(uptime_DEPENDENCIES) -- @rm -f uptime$(EXEEXT) -- $(LINK) $(uptime_LDFLAGS) $(uptime_OBJECTS) $(uptime_LDADD) $(LIBS) - users$(EXEEXT): $(users_OBJECTS) $(users_DEPENDENCIES) - @rm -f users$(EXEEXT) - $(LINK) $(users_LDFLAGS) $(users_OBJECTS) $(users_LDADD) $(LIBS) -@@ -1322,7 +1307,6 @@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/install.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/join.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lbracket.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ln.Po@am__quote@ -@@ -1378,7 +1362,6 @@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unexpand.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uniq.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uptime.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/users.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wc.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/who.Po@am__quote@ -@@ -1606,7 +1589,7 @@ - && can_create_suid_root_executable=yes; \ - rm -f $$TMPFILE; \ - if test $$can_create_suid_root_executable = yes; then \ -- $(INSTALL_SU); \ -+ echo "Installation of su is suppressed"; \ - else \ - echo "WARNING: insufficient access; not installing su"; \ - echo "NOTE: to install su, run 'make install-root' as root"; \ diff --git a/src/patches/coreutils-5.96-uname-1.patch b/src/patches/coreutils-5.96-uname-1.patch deleted file mode 100644 index 0ae413fb1..000000000 --- a/src/patches/coreutils-5.96-uname-1.patch +++ /dev/null @@ -1,204 +0,0 @@ -Submitted By: Robert Connolly (ashes) -Date: 2005-11-13 -Initial Package Version: 5.93 -Upstream Status: pending -Origin: Scot McPherson and Zack Winkles -Description: Fix the output of uname once and for all. This is the position independent -version. - - $ uname -m # This always worked. - i686 - $ uname -i # Used to report 'unknown'. - i386 - $ uname -p # Likewise. - athlon-4 - -Now 'uname -p' can be used by GCC's mtune/mcpu and march options. For example: - - CFLAGS="-march=$(uname -m) -mtune=$(uname -p)" - -diff -Naur coreutils-5.93.orig/src/uname.c coreutils-5.93/src/uname.c ---- coreutils-5.93.orig/src/uname.c 2005-09-15 19:57:04.000000000 +0000 -+++ coreutils-5.93/src/uname.c 2005-11-13 19:18:35.000000000 +0000 -@@ -29,6 +29,26 @@ - # include - #endif - -+#ifdef linux -+/* Thanks to the ffmpeg team for this PIC version of cpuid() */ -+#ifdef ARCH_X86_64 -+# define REG_b "rbx" -+# define REG_S "rsi" -+#else -+# define REG_b "ebx" -+# define REG_S "esi" -+#endif -+#define cpuid(index,eax,ebx,ecx,edx)\ -+ __asm __volatile\ -+ ("mov %%"REG_b", %%"REG_S"\n\t"\ -+ "cpuid\n\t"\ -+ "xchg %%"REG_b", %%"REG_S\ -+ : "=a" (eax), "=S" (ebx),\ -+ "=c" (ecx), "=d" (edx)\ -+ : "0" (index)); -+int has_sse( void ); -+#endif -+ - #if HAVE_SYS_SYSCTL_H - # if HAVE_SYS_PARAM_H - # include /* needed for OpenBSD 3.0 */ -@@ -256,6 +276,99 @@ - if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor)) - element = processor; - } -+#else -+ { -+ struct utsname u; -+ uname (&u); -+ element = u.machine; -+#ifdef linux -+/****************************************************************************** -+ * -+ * Hello, major hack. I shouldn't have to do this. struct utsname should -+ * have another element with this info in it. There's probably a struct -+ * somewhere that has this info, I just don't know where it is. -+ * -+ *****************************************************************************/ -+ -+ if( !strcmp( element, "i586" ) || !strcmp( element, "i686" ) ) { -+ int eax, ebx, ecx, edx, unused; -+ int model, family, sse; -+ -+ cpuid(0,unused,ebx,ecx,edx); -+ cpuid(1,eax,unused,unused,unused); -+ model = (eax >> 4) & 0xf; -+ family = (eax >> 8) & 0xf; -+ -+ switch(ebx) { -+ case 0x756e6547: // Intel -+ switch( family ) { -+ case 5: // Pentium -+ if( model <= 3 ) -+ element="pentium"; -+ if( model > 3 ) -+ element="pentium-mmx"; -+ break; -+ case 6: // PentiumPro - Pentium III -+ if( model == 1 ) // Pentium Pro -+ element="pentiumpro"; -+ if( ( model == 3 ) || ( model == 5 ) || -+ ( model == 6 ) ) // Pentium II -+ element="pentium2"; -+ if( ( model == 7 ) || ( model == 8 ) || -+ ( model == 10 ) || ( model == 11 ) ) // These are all Pentium III -+ element="pentium3"; -+ break; -+ case 15: // Pentium4 -+ if( model == 3 ) // Prescott -+ element="prescott"; -+ else -+ element="pentium4"; -+ break; -+ default: -+ break; -+ } // end switch( family ) -+ break; -+ case 0x68747541: // AMD -+ switch(family) { -+ case 5: -+ if( ( model == 0 ) || ( model == 1 ) || -+ ( model == 2 ) || ( model == 3 ) ) // K5 -+ element="i586"; -+ if( ( model == 6 ) || ( model == 7 ) ) // K6 -+ element="k6"; -+ if( model == 8 ) // K6-2 -+ element="k6-2"; -+ if( model == 9 ) // K6-3 -+ element="k6-3"; -+ break; -+ case 6: -+ if( model <= 4 ) -+ element="athlon"; -+ if( model > 4 ) { -+ sse = has_sse(); -+ if( sse == 0 ) -+ element="athlon"; -+ if( sse == 1 ) -+ element="athlon-4"; -+ } -+ break; -+ case 15: -+ element="athlon-4"; -+ break; -+ default: -+ break; -+ } // end switch( family ) -+ break; -+ case 0x69727943: // Cyrix -+ element="i386"; // who knows what cyrix supports, lets be safe -+ break; -+ default: -+ break; -+ } // end switch(ebx) -+ } -+ -+#endif -+ } - #endif - #ifdef UNAME_PROCESSOR - if (element == unknown) -@@ -293,7 +406,7 @@ - - if (toprint & PRINT_HARDWARE_PLATFORM) - { -- char const *element = unknown; -+ char *element = unknown; - #if HAVE_SYSINFO && defined SI_PLATFORM - { - static char hardware_platform[257]; -@@ -301,6 +414,15 @@ - hardware_platform, sizeof hardware_platform)) - element = hardware_platform; - } -+#else -+ { -+ struct utsname u; -+ uname (&u); -+ element = u.machine; -+ if (strlen (element) == 4 && element[0] == 'i' && element[2] == '8' -+ && element[3] == '6') -+ element[1] = '3'; -+ } - #endif - #ifdef UNAME_HARDWARE_PLATFORM - if (element == unknown) -@@ -323,3 +445,29 @@ - - exit (EXIT_SUCCESS); - } -+ -+#ifdef linux -+ -+/****************************************************************************** -+ * -+ * int has_sse( void ) -+ * Checks Athlon CPU's to see if they support SSE. -+ * -+ *****************************************************************************/ -+ -+int has_sse( void ) -+{ -+ unsigned long edx, unused; -+ int sse; -+ cpuid(1,unused,unused,unused,edx); -+ // I think, I need this tested on a Duron with SSE -+ // and one without it. -+ sse = edx & 0x2000000; -+ if( sse == 0 ) { -+ return 0; -+ } else { -+ return 1; -+ } -+ -+} -+#endif From 48d6a112cf7e3ee1d30a896507b8c679f9418aa4 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 12:52:06 +0200 Subject: [PATCH 033/297] installer: Add bootldr partition for GRUB2 on GPT. --- src/install+setup/install/hw.c | 71 +++++++++++++++++++++++--------- src/install+setup/install/hw.h | 2 + src/install+setup/install/main.c | 9 ++-- 3 files changed, 58 insertions(+), 24 deletions(-) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index a88e5567d..2c5ae522f 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -337,6 +337,12 @@ static unsigned long long hw_boot_size(struct hw_destination* dest) { } static int hw_calculate_partition_table(struct hw_destination* dest) { + char path[DEV_SIZE]; + int part_idx = 1; + + snprintf(path, sizeof(path), "%s%s", dest->path, (dest->is_raid) ? "p" : ""); + dest->part_boot_idx = 0; + // Determine the size of the target block device if (dest->is_raid) { dest->size = (dest->disk1->size >= dest->disk2->size) ? @@ -349,12 +355,38 @@ static int hw_calculate_partition_table(struct hw_destination* dest) { dest->size = dest->disk1->size; } + // Determine partition table + dest->part_table = HW_PART_TABLE_MSDOS; + + // Disks over 2TB need to use GPT + if (dest->size >= MB2BYTES(2047 * 1024)) + dest->part_table = HW_PART_TABLE_GPT; + + // We also use GPT on raid disks by default + else if (dest->is_raid) + dest->part_table = HW_PART_TABLE_GPT; + + // When using GPT, GRUB2 needs a little bit of space to put + // itself in. + if (dest->part_table = HW_PART_TABLE_GPT) { + snprintf(dest->part_bootldr, sizeof(dest->part_bootldr), + "%s%d", path, part_idx); + + dest->size_bootldr = MB2BYTES(4); + + dest->part_boot_idx = part_idx++; + } else { + *dest->part_bootldr = '\0'; + dest->size_bootldr = 0; + } + dest->size_boot = hw_boot_size(dest); dest->size_swap = hw_swap_size(dest); dest->size_root = hw_root_size(dest); // Determine the size of the data partition. - unsigned long long used_space = dest->size_boot + dest->size_swap + dest->size_root; + unsigned long long used_space = dest->size_bootldr + dest->size_boot + + dest->size_swap + dest->size_root; // Disk is way too small if (used_space >= dest->size) @@ -369,13 +401,9 @@ static int hw_calculate_partition_table(struct hw_destination* dest) { } // Set partition names - char path[DEV_SIZE]; - int part_idx = 1; - - snprintf(path, sizeof(path), "%s%s", dest->path, (dest->is_raid) ? "p" : ""); - if (dest->size_boot > 0) { - dest->part_boot_idx = part_idx; + if (dest->part_boot_idx == 0) + dest->part_boot_idx = part_idx; snprintf(dest->part_boot, sizeof(dest->part_boot), "%s%d", path, part_idx++); } else @@ -387,7 +415,7 @@ static int hw_calculate_partition_table(struct hw_destination* dest) { *dest->part_swap = '\0'; // There is always a root partition - if (!*dest->part_boot) + if (dest->part_boot_idx == 0) dest->part_boot_idx = part_idx; snprintf(dest->part_root, sizeof(dest->part_root), "%s%d", path, part_idx++); @@ -397,17 +425,6 @@ static int hw_calculate_partition_table(struct hw_destination* dest) { else *dest->part_data = '\0'; - // Determine partition table - dest->part_table = HW_PART_TABLE_MSDOS; - - // Disks over 2TB need to use GPT - if (dest->size >= MB2BYTES(2047 * 1024)) - dest->part_table = HW_PART_TABLE_GPT; - - // We also use GPT on raid disks by default - else if (dest->is_raid) - dest->part_table = HW_PART_TABLE_GPT; - return 0; } @@ -474,6 +491,14 @@ int hw_create_partitions(struct hw_destination* dest) { unsigned long long part_start = 1 * 1024 * 1024; // 1MB + if (*dest->part_bootldr) { + asprintf(&cmd, "%s mkpart %s ext2 %lluMB %lluMB", cmd, + (dest->part_table == HW_PART_TABLE_GPT) ? "BOOTLDR" : "primary", + BYTES2MB(part_start), BYTES2MB(part_start + dest->size_bootldr)); + + part_start += dest->size_bootldr; + } + if (*dest->part_boot) { asprintf(&cmd, "%s mkpart %s ext2 %lluMB %lluMB", cmd, (dest->part_table == HW_PART_TABLE_GPT) ? "BOOT" : "primary", @@ -510,6 +535,9 @@ int hw_create_partitions(struct hw_destination* dest) { asprintf(&cmd, "%s set %d boot on", cmd, dest->part_boot_idx); } else if (dest->part_table == HW_PART_TABLE_GPT) { + if (*dest->part_bootldr) { + asprintf(&cmd, "%s set %d bios_grub on", cmd, dest->part_boot_idx); + } asprintf(&cmd, "%s disk_set pmbr_boot on", cmd); } @@ -522,6 +550,9 @@ int hw_create_partitions(struct hw_destination* dest) { while (counter-- > 0) { sleep(1); + if (*dest->part_bootldr && (access(dest->part_bootldr, R_OK) != 0)) + continue; + if (*dest->part_boot && (access(dest->part_boot, R_OK) != 0)) continue; @@ -778,7 +809,7 @@ int hw_install_bootloader(struct hw_destination* dest) { char cmd_grub[STRING_SIZE]; snprintf(cmd_grub, sizeof(cmd_grub), "/usr/sbin/grub-install --no-floppy --recheck"); - if (dest->is_raid) { + if (dest->is_raid && (dest->part_table == HW_PART_TABLE_MSDOS)) { snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->disk1->path); r = system_chroot(DESTINATION_MOUNT_PATH, cmd); if (r) diff --git a/src/install+setup/install/hw.h b/src/install+setup/install/hw.h index 5cd4fe026..28b28dfdd 100644 --- a/src/install+setup/install/hw.h +++ b/src/install+setup/install/hw.h @@ -75,6 +75,7 @@ struct hw_destination { const struct hw_disk* disk2; int part_table; + char part_bootldr[DEV_SIZE]; char part_boot[DEV_SIZE]; char part_swap[DEV_SIZE]; char part_root[DEV_SIZE]; @@ -84,6 +85,7 @@ struct hw_destination { int filesystem; unsigned long long size; + unsigned long long size_bootldr; unsigned long long size_boot; unsigned long long size_swap; unsigned long long size_root; diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index cc886bf2d..7667dfeff 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -410,10 +410,11 @@ int main(int argc, char *argv[]) { } fprintf(flog, "Destination drive: %s\n", destination->path); - fprintf(flog, " boot: %s (%lluMB)\n", destination->part_boot, BYTES2MB(destination->size_boot)); - fprintf(flog, " swap: %s (%lluMB)\n", destination->part_swap, BYTES2MB(destination->size_swap)); - fprintf(flog, " root: %s (%lluMB)\n", destination->part_root, BYTES2MB(destination->size_root)); - fprintf(flog, " data: %s (%lluMB)\n", destination->part_data, BYTES2MB(destination->size_data)); + fprintf(flog, " bootldr: %s (%lluMB)\n", destination->part_bootldr, BYTES2MB(destination->size_bootldr)); + fprintf(flog, " boot : %s (%lluMB)\n", destination->part_boot, BYTES2MB(destination->size_boot)); + fprintf(flog, " swap : %s (%lluMB)\n", destination->part_swap, BYTES2MB(destination->size_swap)); + fprintf(flog, " root : %s (%lluMB)\n", destination->part_root, BYTES2MB(destination->size_root)); + fprintf(flog, " data : %s (%lluMB)\n", destination->part_data, BYTES2MB(destination->size_data)); // Warn the user if there is not enough space to create a swap partition if (!unattended && !*destination->part_swap) { From 85f2892b2a0ea2a2d0f6ab44ffcbe72ae91c41a2 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 15:16:33 +0200 Subject: [PATCH 034/297] installer: Create target directory when mounting something --- src/install+setup/install/hw.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index 2c5ae522f..36d881b0c 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -81,6 +81,10 @@ static int strstartswith(const char* a, const char* b) { } int hw_mount(const char* source, const char* target, const char* fs, int flags) { + // Create target if it does not exist + if (access(target, X_OK) != 0) + mkdir(target, S_IRWXU|S_IRWXG|S_IRWXO); + return mount(source, target, fs, flags, NULL); } From e43d0fe67288cbb9cadf3552903da470f8043efd Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 27 Jul 2014 16:05:25 +0200 Subject: [PATCH 035/297] kernel: enable bcma support. some broadcom wlan adapter need this. --- config/kernel/kernel.config.i586-ipfire | 16 ++++++++++++++-- config/kernel/kernel.config.i586-ipfire-pae | 16 ++++++++++++++-- config/rootfiles/common/i586/linux | 5 +++++ config/rootfiles/packages/linux-pae | 5 +++++ 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/config/kernel/kernel.config.i586-ipfire b/config/kernel/kernel.config.i586-ipfire index 329d96d5f..74ee01397 100644 --- a/config/kernel/kernel.config.i586-ipfire +++ b/config/kernel/kernel.config.i586-ipfire @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.10.40-ipfire Kernel Configuration +# Linux/x86 3.10.44-ipfire Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -2164,14 +2164,18 @@ CONFIG_AR5523=m CONFIG_WIL6210=m CONFIG_WIL6210_ISR_COR=y CONFIG_B43=m +CONFIG_B43_BCMA=y +CONFIG_B43_BCMA_EXTRA=y CONFIG_B43_SSB=y CONFIG_B43_PCI_AUTOSELECT=y CONFIG_B43_PCICORE_AUTOSELECT=y # CONFIG_B43_PCMCIA is not set CONFIG_B43_SDIO=y +CONFIG_B43_BCMA_PIO=y CONFIG_B43_PIO=y CONFIG_B43_PHY_N=y CONFIG_B43_PHY_LP=y +CONFIG_B43_PHY_HT=y CONFIG_B43_LEDS=y CONFIG_B43_HWRNG=y # CONFIG_B43_DEBUG is not set @@ -2187,6 +2191,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y # CONFIG_B43LEGACY_DMA_MODE is not set # CONFIG_B43LEGACY_PIO_MODE is not set CONFIG_BRCMUTIL=m +CONFIG_BRCMSMAC=m CONFIG_BRCMFMAC=m CONFIG_BRCMFMAC_SDIO=y # CONFIG_BRCMFMAC_USB is not set @@ -3135,7 +3140,13 @@ CONFIG_BCMA_POSSIBLE=y # # Broadcom specific AMBA # -# CONFIG_BCMA is not set +CONFIG_BCMA=m +CONFIG_BCMA_BLOCKIO=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_PCI=y +CONFIG_BCMA_DRIVER_GMAC_CMN=y +CONFIG_BCMA_DRIVER_GPIO=y +# CONFIG_BCMA_DEBUG is not set # # Multifunction device drivers @@ -4279,6 +4290,7 @@ CONFIG_USB_SL811_HCD_ISO=y # CONFIG_USB_R8A66597_HCD is not set CONFIG_USB_WHCI_HCD=m CONFIG_USB_HWA_HCD=m +CONFIG_USB_HCD_BCMA=m CONFIG_USB_HCD_SSB=m # diff --git a/config/kernel/kernel.config.i586-ipfire-pae b/config/kernel/kernel.config.i586-ipfire-pae index f395f3116..8ab80816b 100644 --- a/config/kernel/kernel.config.i586-ipfire-pae +++ b/config/kernel/kernel.config.i586-ipfire-pae @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.10.40-ipfire Kernel Configuration +# Linux/x86 3.10.44-ipfire Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -2178,14 +2178,18 @@ CONFIG_AR5523=m CONFIG_WIL6210=m CONFIG_WIL6210_ISR_COR=y CONFIG_B43=m +CONFIG_B43_BCMA=y +CONFIG_B43_BCMA_EXTRA=y CONFIG_B43_SSB=y CONFIG_B43_PCI_AUTOSELECT=y CONFIG_B43_PCICORE_AUTOSELECT=y # CONFIG_B43_PCMCIA is not set CONFIG_B43_SDIO=y +CONFIG_B43_BCMA_PIO=y CONFIG_B43_PIO=y CONFIG_B43_PHY_N=y CONFIG_B43_PHY_LP=y +CONFIG_B43_PHY_HT=y CONFIG_B43_LEDS=y CONFIG_B43_HWRNG=y # CONFIG_B43_DEBUG is not set @@ -2201,6 +2205,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y # CONFIG_B43LEGACY_DMA_MODE is not set # CONFIG_B43LEGACY_PIO_MODE is not set CONFIG_BRCMUTIL=m +CONFIG_BRCMSMAC=m CONFIG_BRCMFMAC=m CONFIG_BRCMFMAC_SDIO=y # CONFIG_BRCMFMAC_USB is not set @@ -3154,7 +3159,13 @@ CONFIG_BCMA_POSSIBLE=y # # Broadcom specific AMBA # -# CONFIG_BCMA is not set +CONFIG_BCMA=m +CONFIG_BCMA_BLOCKIO=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_PCI=y +CONFIG_BCMA_DRIVER_GMAC_CMN=y +CONFIG_BCMA_DRIVER_GPIO=y +# CONFIG_BCMA_DEBUG is not set # # Multifunction device drivers @@ -4298,6 +4309,7 @@ CONFIG_USB_SL811_HCD_ISO=y # CONFIG_USB_R8A66597_HCD is not set CONFIG_USB_WHCI_HCD=m CONFIG_USB_HWA_HCD=m +CONFIG_USB_HCD_BCMA=m CONFIG_USB_HCD_SSB=m # diff --git a/config/rootfiles/common/i586/linux b/config/rootfiles/common/i586/linux index 3f364aed5..a6e285189 100644 --- a/config/rootfiles/common/i586/linux +++ b/config/rootfiles/common/i586/linux @@ -182,6 +182,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/base #lib/modules/KVER-ipfire/kernel/drivers/base/regmap #lib/modules/KVER-ipfire/kernel/drivers/base/regmap/regmap-i2c.ko +#lib/modules/KVER-ipfire/kernel/drivers/bcma +#lib/modules/KVER-ipfire/kernel/drivers/bcma/bcma.ko #lib/modules/KVER-ipfire/kernel/drivers/block #lib/modules/KVER-ipfire/kernel/drivers/block/DAC960.ko #lib/modules/KVER-ipfire/kernel/drivers/block/cciss.ko @@ -1634,6 +1636,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmfmac #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmsmac +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmsmac/brcmsmac.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmutil #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/hostap @@ -2032,6 +2036,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3-pci.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/host +#lib/modules/KVER-ipfire/kernel/drivers/usb/host/bcma-hcd.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/host/hwa-hc.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/host/isp1362-hcd.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/host/sl811-hcd.ko diff --git a/config/rootfiles/packages/linux-pae b/config/rootfiles/packages/linux-pae index 9b198c2bd..510e0f81d 100644 --- a/config/rootfiles/packages/linux-pae +++ b/config/rootfiles/packages/linux-pae @@ -178,6 +178,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/base #lib/modules/KVER-ipfire-pae/kernel/drivers/base/regmap #lib/modules/KVER-ipfire-pae/kernel/drivers/base/regmap/regmap-i2c.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/bcma +#lib/modules/KVER-ipfire-pae/kernel/drivers/bcma/bcma.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/block #lib/modules/KVER-ipfire-pae/kernel/drivers/block/DAC960.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/block/cciss.ko @@ -1630,6 +1632,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmfmac #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmsmac +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmsmac/brcmsmac.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmutil #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/hostap @@ -2032,6 +2036,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3-pci.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host +#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/bcma-hcd.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/hwa-hc.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/isp1362-hcd.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/sl811-hcd.ko From f0a61a0aa7cc2751389568646354b4270746396e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 16:06:18 +0200 Subject: [PATCH 036/297] installer: Just exit with a return code. --- src/install+setup/install/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 7667dfeff..8d0935e5d 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -615,8 +615,8 @@ EXIT: fcloseall(); - if (!(allok)) - system("/etc/halt"); + if (allok == 1) + return 0; - return 0; + return 1; } From 819f72f2637184b8c662b59992d5468402663059 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 16:39:56 +0200 Subject: [PATCH 037/297] dracut: Update to 038 --- config/rootfiles/common/i586/dracut | 441 +++++++++++++++--- lfs/dracut | 31 +- src/patches/dracut-006_add_run_dir.patch | 13 - src/patches/dracut-006_lzma.patch | 14 - .../dracut-006_remove_cdrom_wait.patch | 21 - src/patches/dracut-006_remove_scsi_wait.patch | 12 - .../dracut-init_start_ipfireinstaller.patch | 33 -- 7 files changed, 381 insertions(+), 184 deletions(-) delete mode 100644 src/patches/dracut-006_add_run_dir.patch delete mode 100644 src/patches/dracut-006_lzma.patch delete mode 100644 src/patches/dracut-006_remove_cdrom_wait.patch delete mode 100644 src/patches/dracut-006_remove_scsi_wait.patch delete mode 100644 src/patches/dracut-init_start_ipfireinstaller.patch diff --git a/config/rootfiles/common/i586/dracut b/config/rootfiles/common/i586/dracut index 53818d26b..3250e0129 100644 --- a/config/rootfiles/common/i586/dracut +++ b/config/rootfiles/common/i586/dracut @@ -2,75 +2,378 @@ etc/dracut.conf etc/dracut.conf.d #etc/dracut.conf.d/dracut.conf -sbin/dracut -sbin/dracut-catimages -sbin/dracut-gencmdline -sbin/lsinitrd -sbin/mkinitrd -usr/share/dracut -usr/share/dracut/dracut-functions -usr/share/dracut/modules.d -usr/share/dracut/modules.d/60xen -usr/share/dracut/modules.d/60xen/check -usr/share/dracut/modules.d/60xen/install -usr/share/dracut/modules.d/60xen/installkernel -usr/share/dracut/modules.d/60xen/xen-pre-udev.sh -usr/share/dracut/modules.d/90kernel-modules -usr/share/dracut/modules.d/90kernel-modules/install -usr/share/dracut/modules.d/90kernel-modules/installkernel -usr/share/dracut/modules.d/90kernel-modules/parse-kernel.sh -usr/share/dracut/modules.d/90mdraid -usr/share/dracut/modules.d/90mdraid/65-md-incremental-imsm.rules -usr/share/dracut/modules.d/90mdraid/check -usr/share/dracut/modules.d/90mdraid/install -usr/share/dracut/modules.d/90mdraid/installkernel -usr/share/dracut/modules.d/90mdraid/md-noimsm.sh -usr/share/dracut/modules.d/90mdraid/md_finished.sh -usr/share/dracut/modules.d/90mdraid/mdadm_auto.sh -usr/share/dracut/modules.d/90mdraid/mdcontainer_start.sh -usr/share/dracut/modules.d/90mdraid/mdmon-pre-udev.sh -usr/share/dracut/modules.d/90mdraid/mdraid-cleanup.sh -usr/share/dracut/modules.d/90mdraid/mdraid_start.sh -usr/share/dracut/modules.d/90mdraid/parse-md.sh -usr/share/dracut/modules.d/95debug -usr/share/dracut/modules.d/95debug/check -usr/share/dracut/modules.d/95debug/install -usr/share/dracut/modules.d/95rootfs-block -usr/share/dracut/modules.d/95rootfs-block/block-genrules.sh -usr/share/dracut/modules.d/95rootfs-block/install -usr/share/dracut/modules.d/95rootfs-block/mount-root.sh -usr/share/dracut/modules.d/95rootfs-block/parse-block.sh -usr/share/dracut/modules.d/95terminfo -usr/share/dracut/modules.d/95terminfo/install -usr/share/dracut/modules.d/95udev-rules -usr/share/dracut/modules.d/95udev-rules/01-ignore.rules -usr/share/dracut/modules.d/95udev-rules/59-persistent-storage-volid.rules -usr/share/dracut/modules.d/95udev-rules/59-persistent-storage.rules -usr/share/dracut/modules.d/95udev-rules/61-persistent-storage.rules -usr/share/dracut/modules.d/95udev-rules/install -usr/share/dracut/modules.d/95udev-rules/load-modules.sh -usr/share/dracut/modules.d/98syslog -usr/share/dracut/modules.d/98syslog/README -usr/share/dracut/modules.d/98syslog/check -usr/share/dracut/modules.d/98syslog/install -usr/share/dracut/modules.d/98syslog/parse-syslog-opts.sh -usr/share/dracut/modules.d/98syslog/rsyslog.conf -usr/share/dracut/modules.d/98syslog/rsyslogd-start.sh -usr/share/dracut/modules.d/98syslog/rsyslogd-stop.sh -usr/share/dracut/modules.d/98syslog/syslog-cleanup.sh -usr/share/dracut/modules.d/98syslog/syslog-genrules.sh -usr/share/dracut/modules.d/99base -usr/share/dracut/modules.d/99base/check -usr/share/dracut/modules.d/99base/dracut-lib.sh -usr/share/dracut/modules.d/99base/init -usr/share/dracut/modules.d/99base/initqueue -#usr/share/dracut/modules.d/99base/init~ -usr/share/dracut/modules.d/99base/install -usr/share/dracut/modules.d/99base/loginit -usr/share/dracut/modules.d/99base/parse-blacklist.sh -usr/share/dracut/modules.d/99base/parse-root-opts.sh +usr/bin/dracut +usr/bin/dracut-catimages +#usr/bin/lsinitrd +#usr/bin/mkinitrd +usr/lib/dracut +#usr/lib/dracut/dracut-functions +#usr/lib/dracut/dracut-functions.sh +#usr/lib/dracut/dracut-initramfs-restore +#usr/lib/dracut/dracut-install +#usr/lib/dracut/dracut-logger.sh +#usr/lib/dracut/dracut-version.sh +#usr/lib/dracut/dracut.conf.d +#usr/lib/dracut/modules.d +#usr/lib/dracut/modules.d/00bash +#usr/lib/dracut/modules.d/00bash/module-setup.sh +#usr/lib/dracut/modules.d/00bootchart +#usr/lib/dracut/modules.d/00bootchart/module-setup.sh +#usr/lib/dracut/modules.d/00dash +#usr/lib/dracut/modules.d/00dash/module-setup.sh +#usr/lib/dracut/modules.d/00systemd-bootchart +#usr/lib/dracut/modules.d/00systemd-bootchart/module-setup.sh +#usr/lib/dracut/modules.d/01fips +#usr/lib/dracut/modules.d/01fips/fips-boot.sh +#usr/lib/dracut/modules.d/01fips/fips-noboot.sh +#usr/lib/dracut/modules.d/01fips/fips.sh +#usr/lib/dracut/modules.d/01fips/module-setup.sh +#usr/lib/dracut/modules.d/02caps +#usr/lib/dracut/modules.d/02caps/README +#usr/lib/dracut/modules.d/02caps/caps.sh +#usr/lib/dracut/modules.d/02caps/module-setup.sh +#usr/lib/dracut/modules.d/02fips-aesni +#usr/lib/dracut/modules.d/02fips-aesni/module-setup.sh +#usr/lib/dracut/modules.d/03modsign +#usr/lib/dracut/modules.d/03modsign/load-modsign-keys.sh +#usr/lib/dracut/modules.d/03modsign/module-setup.sh +#usr/lib/dracut/modules.d/03rescue +#usr/lib/dracut/modules.d/03rescue/module-setup.sh +#usr/lib/dracut/modules.d/04watchdog +#usr/lib/dracut/modules.d/04watchdog/module-setup.sh +#usr/lib/dracut/modules.d/04watchdog/watchdog-stop.sh +#usr/lib/dracut/modules.d/04watchdog/watchdog.sh +#usr/lib/dracut/modules.d/05busybox +#usr/lib/dracut/modules.d/05busybox/module-setup.sh +#usr/lib/dracut/modules.d/10i18n +#usr/lib/dracut/modules.d/10i18n/10-console.rules +#usr/lib/dracut/modules.d/10i18n/README +#usr/lib/dracut/modules.d/10i18n/console_init.sh +#usr/lib/dracut/modules.d/10i18n/module-setup.sh +#usr/lib/dracut/modules.d/10i18n/parse-i18n.sh +#usr/lib/dracut/modules.d/30convertfs +#usr/lib/dracut/modules.d/30convertfs/convertfs.sh +#usr/lib/dracut/modules.d/30convertfs/do-convertfs.sh +#usr/lib/dracut/modules.d/30convertfs/module-setup.sh +#usr/lib/dracut/modules.d/40network +#usr/lib/dracut/modules.d/40network/dhclient-script.sh +#usr/lib/dracut/modules.d/40network/dhclient.conf +#usr/lib/dracut/modules.d/40network/dhcp-root.sh +#usr/lib/dracut/modules.d/40network/ifname-genrules.sh +#usr/lib/dracut/modules.d/40network/ifup.sh +#usr/lib/dracut/modules.d/40network/kill-dhclient.sh +#usr/lib/dracut/modules.d/40network/module-setup.sh +#usr/lib/dracut/modules.d/40network/net-genrules.sh +#usr/lib/dracut/modules.d/40network/net-lib.sh +#usr/lib/dracut/modules.d/40network/netroot.sh +#usr/lib/dracut/modules.d/40network/parse-bond.sh +#usr/lib/dracut/modules.d/40network/parse-bridge.sh +#usr/lib/dracut/modules.d/40network/parse-ibft.sh +#usr/lib/dracut/modules.d/40network/parse-ifname.sh +#usr/lib/dracut/modules.d/40network/parse-ip-opts.sh +#usr/lib/dracut/modules.d/40network/parse-team.sh +#usr/lib/dracut/modules.d/40network/parse-vlan.sh +#usr/lib/dracut/modules.d/45ifcfg +#usr/lib/dracut/modules.d/45ifcfg/module-setup.sh +#usr/lib/dracut/modules.d/45ifcfg/write-ifcfg.sh +#usr/lib/dracut/modules.d/45url-lib +#usr/lib/dracut/modules.d/45url-lib/module-setup.sh +#usr/lib/dracut/modules.d/45url-lib/url-lib.sh +#usr/lib/dracut/modules.d/50drm +#usr/lib/dracut/modules.d/50drm/module-setup.sh +#usr/lib/dracut/modules.d/50gensplash +#usr/lib/dracut/modules.d/50gensplash/README +#usr/lib/dracut/modules.d/50gensplash/gensplash-emergency.sh +#usr/lib/dracut/modules.d/50gensplash/gensplash-newroot.sh +#usr/lib/dracut/modules.d/50gensplash/gensplash-pretrigger.sh +#usr/lib/dracut/modules.d/50gensplash/module-setup.sh +#usr/lib/dracut/modules.d/50plymouth +#usr/lib/dracut/modules.d/50plymouth/module-setup.sh +#usr/lib/dracut/modules.d/50plymouth/plymouth-emergency.sh +#usr/lib/dracut/modules.d/50plymouth/plymouth-newroot.sh +#usr/lib/dracut/modules.d/50plymouth/plymouth-populate-initrd.sh +#usr/lib/dracut/modules.d/50plymouth/plymouth-pretrigger.sh +#usr/lib/dracut/modules.d/80cms +#usr/lib/dracut/modules.d/80cms/cms-write-ifcfg.sh +#usr/lib/dracut/modules.d/80cms/cmsifup.sh +#usr/lib/dracut/modules.d/80cms/cmssetup.sh +#usr/lib/dracut/modules.d/80cms/module-setup.sh +#usr/lib/dracut/modules.d/90btrfs +#usr/lib/dracut/modules.d/90btrfs/80-btrfs.rules +#usr/lib/dracut/modules.d/90btrfs/btrfs_device_ready.sh +#usr/lib/dracut/modules.d/90btrfs/btrfs_finished.sh +#usr/lib/dracut/modules.d/90btrfs/btrfs_timeout.sh +#usr/lib/dracut/modules.d/90btrfs/module-setup.sh +#usr/lib/dracut/modules.d/90crypt +#usr/lib/dracut/modules.d/90crypt/crypt-cleanup.sh +#usr/lib/dracut/modules.d/90crypt/crypt-lib.sh +#usr/lib/dracut/modules.d/90crypt/crypt-run-generator.sh +#usr/lib/dracut/modules.d/90crypt/cryptroot-ask.sh +#usr/lib/dracut/modules.d/90crypt/module-setup.sh +#usr/lib/dracut/modules.d/90crypt/parse-crypt.sh +#usr/lib/dracut/modules.d/90crypt/parse-keydev.sh +#usr/lib/dracut/modules.d/90crypt/probe-keydev.sh +#usr/lib/dracut/modules.d/90dm +#usr/lib/dracut/modules.d/90dm/11-dm.rules +#usr/lib/dracut/modules.d/90dm/59-persistent-storage-dm.rules +#usr/lib/dracut/modules.d/90dm/dm-pre-udev.sh +#usr/lib/dracut/modules.d/90dm/dm-shutdown.sh +#usr/lib/dracut/modules.d/90dm/module-setup.sh +#usr/lib/dracut/modules.d/90dmraid +#usr/lib/dracut/modules.d/90dmraid/61-dmraid-imsm.rules +#usr/lib/dracut/modules.d/90dmraid/dmraid.sh +#usr/lib/dracut/modules.d/90dmraid/module-setup.sh +#usr/lib/dracut/modules.d/90dmraid/parse-dm.sh +#usr/lib/dracut/modules.d/90dmsquash-live +#usr/lib/dracut/modules.d/90dmsquash-live/apply-live-updates.sh +#usr/lib/dracut/modules.d/90dmsquash-live/checkisomd5@.service +#usr/lib/dracut/modules.d/90dmsquash-live/dmsquash-live-genrules.sh +#usr/lib/dracut/modules.d/90dmsquash-live/dmsquash-live-root.sh +#usr/lib/dracut/modules.d/90dmsquash-live/dmsquash-liveiso-genrules.sh +#usr/lib/dracut/modules.d/90dmsquash-live/iso-scan.sh +#usr/lib/dracut/modules.d/90dmsquash-live/module-setup.sh +#usr/lib/dracut/modules.d/90dmsquash-live/parse-dmsquash-live.sh +#usr/lib/dracut/modules.d/90dmsquash-live/parse-iso-scan.sh +#usr/lib/dracut/modules.d/90kernel-modules +#usr/lib/dracut/modules.d/90kernel-modules/insmodpost.sh +#usr/lib/dracut/modules.d/90kernel-modules/module-setup.sh +#usr/lib/dracut/modules.d/90kernel-modules/parse-kernel.sh +#usr/lib/dracut/modules.d/90livenet +#usr/lib/dracut/modules.d/90livenet/fetch-liveupdate.sh +#usr/lib/dracut/modules.d/90livenet/livenetroot.sh +#usr/lib/dracut/modules.d/90livenet/module-setup.sh +#usr/lib/dracut/modules.d/90livenet/parse-livenet.sh +#usr/lib/dracut/modules.d/90lvm +#usr/lib/dracut/modules.d/90lvm/64-lvm.rules +#usr/lib/dracut/modules.d/90lvm/lvm_scan.sh +#usr/lib/dracut/modules.d/90lvm/module-setup.sh +#usr/lib/dracut/modules.d/90lvm/parse-lvm.sh +#usr/lib/dracut/modules.d/90mdraid +#usr/lib/dracut/modules.d/90mdraid/59-persistent-storage-md.rules +#usr/lib/dracut/modules.d/90mdraid/65-md-incremental-imsm.rules +#usr/lib/dracut/modules.d/90mdraid/md-noddf.sh +#usr/lib/dracut/modules.d/90mdraid/md-noimsm.sh +#usr/lib/dracut/modules.d/90mdraid/md-shutdown.sh +#usr/lib/dracut/modules.d/90mdraid/mdmon-pre-shutdown.sh +#usr/lib/dracut/modules.d/90mdraid/mdmon-pre-udev.sh +#usr/lib/dracut/modules.d/90mdraid/mdraid-cleanup.sh +#usr/lib/dracut/modules.d/90mdraid/mdraid-needshutdown.sh +#usr/lib/dracut/modules.d/90mdraid/mdraid-waitclean.sh +#usr/lib/dracut/modules.d/90mdraid/mdraid_start.sh +#usr/lib/dracut/modules.d/90mdraid/module-setup.sh +#usr/lib/dracut/modules.d/90mdraid/parse-md.sh +#usr/lib/dracut/modules.d/90multipath +#usr/lib/dracut/modules.d/90multipath/module-setup.sh +#usr/lib/dracut/modules.d/90multipath/multipathd-needshutdown.sh +#usr/lib/dracut/modules.d/90multipath/multipathd-stop.sh +#usr/lib/dracut/modules.d/90multipath/multipathd.sh +#usr/lib/dracut/modules.d/90qemu +#usr/lib/dracut/modules.d/90qemu-net +#usr/lib/dracut/modules.d/90qemu-net/module-setup.sh +#usr/lib/dracut/modules.d/90qemu/module-setup.sh +#usr/lib/dracut/modules.d/91crypt-gpg +#usr/lib/dracut/modules.d/91crypt-gpg/crypt-gpg-lib.sh +#usr/lib/dracut/modules.d/91crypt-gpg/module-setup.sh +#usr/lib/dracut/modules.d/91crypt-loop +#usr/lib/dracut/modules.d/91crypt-loop/crypt-loop-lib.sh +#usr/lib/dracut/modules.d/91crypt-loop/module-setup.sh +#usr/lib/dracut/modules.d/95cifs +#usr/lib/dracut/modules.d/95cifs/cifs-lib.sh +#usr/lib/dracut/modules.d/95cifs/cifsroot.sh +#usr/lib/dracut/modules.d/95cifs/module-setup.sh +#usr/lib/dracut/modules.d/95cifs/parse-cifsroot.sh +#usr/lib/dracut/modules.d/95dasd +#usr/lib/dracut/modules.d/95dasd/module-setup.sh +#usr/lib/dracut/modules.d/95dasd/parse-dasd.sh +#usr/lib/dracut/modules.d/95dasd_mod +#usr/lib/dracut/modules.d/95dasd_mod/module-setup.sh +#usr/lib/dracut/modules.d/95dasd_mod/parse-dasd-mod.sh +#usr/lib/dracut/modules.d/95dasd_rules +#usr/lib/dracut/modules.d/95dasd_rules/module-setup.sh +#usr/lib/dracut/modules.d/95dasd_rules/parse-dasd.sh +#usr/lib/dracut/modules.d/95debug +#usr/lib/dracut/modules.d/95debug/module-setup.sh +#usr/lib/dracut/modules.d/95fcoe +#usr/lib/dracut/modules.d/95fcoe-uefi +#usr/lib/dracut/modules.d/95fcoe-uefi/module-setup.sh +#usr/lib/dracut/modules.d/95fcoe-uefi/parse-uefifcoe.sh +#usr/lib/dracut/modules.d/95fcoe/fcoe-edd.sh +#usr/lib/dracut/modules.d/95fcoe/fcoe-genrules.sh +#usr/lib/dracut/modules.d/95fcoe/fcoe-up.sh +#usr/lib/dracut/modules.d/95fcoe/module-setup.sh +#usr/lib/dracut/modules.d/95fcoe/parse-fcoe.sh +#usr/lib/dracut/modules.d/95fstab-sys +#usr/lib/dracut/modules.d/95fstab-sys/module-setup.sh +#usr/lib/dracut/modules.d/95fstab-sys/mount-sys.sh +#usr/lib/dracut/modules.d/95iscsi +#usr/lib/dracut/modules.d/95iscsi/cleanup-iscsi.sh +#usr/lib/dracut/modules.d/95iscsi/iscsiroot.sh +#usr/lib/dracut/modules.d/95iscsi/module-setup.sh +#usr/lib/dracut/modules.d/95iscsi/mount-lun.sh +#usr/lib/dracut/modules.d/95iscsi/parse-iscsiroot.sh +#usr/lib/dracut/modules.d/95nbd +#usr/lib/dracut/modules.d/95nbd/module-setup.sh +#usr/lib/dracut/modules.d/95nbd/nbdroot.sh +#usr/lib/dracut/modules.d/95nbd/parse-nbdroot.sh +#usr/lib/dracut/modules.d/95nfs +#usr/lib/dracut/modules.d/95nfs/module-setup.sh +#usr/lib/dracut/modules.d/95nfs/nfs-lib.sh +#usr/lib/dracut/modules.d/95nfs/nfs-start-rpc.sh +#usr/lib/dracut/modules.d/95nfs/nfsroot-cleanup.sh +#usr/lib/dracut/modules.d/95nfs/nfsroot.sh +#usr/lib/dracut/modules.d/95nfs/parse-nfsroot.sh +#usr/lib/dracut/modules.d/95resume +#usr/lib/dracut/modules.d/95resume/module-setup.sh +#usr/lib/dracut/modules.d/95resume/parse-resume.sh +#usr/lib/dracut/modules.d/95resume/resume.sh +#usr/lib/dracut/modules.d/95rootfs-block +#usr/lib/dracut/modules.d/95rootfs-block/block-genrules.sh +#usr/lib/dracut/modules.d/95rootfs-block/module-setup.sh +#usr/lib/dracut/modules.d/95rootfs-block/mount-root.sh +#usr/lib/dracut/modules.d/95rootfs-block/parse-block.sh +#usr/lib/dracut/modules.d/95rootfs-block/rootfallback.sh +#usr/lib/dracut/modules.d/95ssh-client +#usr/lib/dracut/modules.d/95ssh-client/module-setup.sh +#usr/lib/dracut/modules.d/95terminfo +#usr/lib/dracut/modules.d/95terminfo/module-setup.sh +#usr/lib/dracut/modules.d/95udev-rules +#usr/lib/dracut/modules.d/95udev-rules/59-persistent-storage.rules +#usr/lib/dracut/modules.d/95udev-rules/61-persistent-storage.rules +#usr/lib/dracut/modules.d/95udev-rules/load-modules.sh +#usr/lib/dracut/modules.d/95udev-rules/module-setup.sh +#usr/lib/dracut/modules.d/95virtfs +#usr/lib/dracut/modules.d/95virtfs/module-setup.sh +#usr/lib/dracut/modules.d/95virtfs/mount-virtfs.sh +#usr/lib/dracut/modules.d/95virtfs/parse-virtfs.sh +#usr/lib/dracut/modules.d/95zfcp +#usr/lib/dracut/modules.d/95zfcp/module-setup.sh +#usr/lib/dracut/modules.d/95zfcp/parse-zfcp.sh +#usr/lib/dracut/modules.d/95zfcp_rules +#usr/lib/dracut/modules.d/95zfcp_rules/module-setup.sh +#usr/lib/dracut/modules.d/95zfcp_rules/parse-zfcp.sh +#usr/lib/dracut/modules.d/95znet +#usr/lib/dracut/modules.d/95znet/module-setup.sh +#usr/lib/dracut/modules.d/95znet/parse-ccw.sh +#usr/lib/dracut/modules.d/96securityfs +#usr/lib/dracut/modules.d/96securityfs/module-setup.sh +#usr/lib/dracut/modules.d/96securityfs/securityfs.sh +#usr/lib/dracut/modules.d/97biosdevname +#usr/lib/dracut/modules.d/97biosdevname/module-setup.sh +#usr/lib/dracut/modules.d/97biosdevname/parse-biosdevname.sh +#usr/lib/dracut/modules.d/97masterkey +#usr/lib/dracut/modules.d/97masterkey/README +#usr/lib/dracut/modules.d/97masterkey/masterkey.sh +#usr/lib/dracut/modules.d/97masterkey/module-setup.sh +#usr/lib/dracut/modules.d/98ecryptfs +#usr/lib/dracut/modules.d/98ecryptfs/README +#usr/lib/dracut/modules.d/98ecryptfs/ecryptfs-mount.sh +#usr/lib/dracut/modules.d/98ecryptfs/module-setup.sh +#usr/lib/dracut/modules.d/98integrity +#usr/lib/dracut/modules.d/98integrity/README +#usr/lib/dracut/modules.d/98integrity/evm-enable.sh +#usr/lib/dracut/modules.d/98integrity/ima-policy-load.sh +#usr/lib/dracut/modules.d/98integrity/module-setup.sh +#usr/lib/dracut/modules.d/98pollcdrom +#usr/lib/dracut/modules.d/98pollcdrom/module-setup.sh +#usr/lib/dracut/modules.d/98pollcdrom/pollcdrom.sh +#usr/lib/dracut/modules.d/98selinux +#usr/lib/dracut/modules.d/98selinux/module-setup.sh +#usr/lib/dracut/modules.d/98selinux/selinux-loadpolicy.sh +#usr/lib/dracut/modules.d/98syslog +#usr/lib/dracut/modules.d/98syslog/README +#usr/lib/dracut/modules.d/98syslog/module-setup.sh +#usr/lib/dracut/modules.d/98syslog/parse-syslog-opts.sh +#usr/lib/dracut/modules.d/98syslog/rsyslog.conf +#usr/lib/dracut/modules.d/98syslog/rsyslogd-start.sh +#usr/lib/dracut/modules.d/98syslog/rsyslogd-stop.sh +#usr/lib/dracut/modules.d/98syslog/syslog-cleanup.sh +#usr/lib/dracut/modules.d/98syslog/syslog-genrules.sh +#usr/lib/dracut/modules.d/98systemd +#usr/lib/dracut/modules.d/98systemd/dracut-cmdline-ask.service +#usr/lib/dracut/modules.d/98systemd/dracut-cmdline-ask.sh +#usr/lib/dracut/modules.d/98systemd/dracut-cmdline.service +#usr/lib/dracut/modules.d/98systemd/dracut-cmdline.service.8 +#usr/lib/dracut/modules.d/98systemd/dracut-cmdline.service.8.asc +#usr/lib/dracut/modules.d/98systemd/dracut-cmdline.sh +#usr/lib/dracut/modules.d/98systemd/dracut-emergency.service +#usr/lib/dracut/modules.d/98systemd/dracut-emergency.sh +#usr/lib/dracut/modules.d/98systemd/dracut-initqueue.service +#usr/lib/dracut/modules.d/98systemd/dracut-initqueue.service.8 +#usr/lib/dracut/modules.d/98systemd/dracut-initqueue.service.8.asc +#usr/lib/dracut/modules.d/98systemd/dracut-initqueue.sh +#usr/lib/dracut/modules.d/98systemd/dracut-mount.service +#usr/lib/dracut/modules.d/98systemd/dracut-mount.service.8 +#usr/lib/dracut/modules.d/98systemd/dracut-mount.service.8.asc +#usr/lib/dracut/modules.d/98systemd/dracut-mount.sh +#usr/lib/dracut/modules.d/98systemd/dracut-pre-mount.service +#usr/lib/dracut/modules.d/98systemd/dracut-pre-mount.service.8 +#usr/lib/dracut/modules.d/98systemd/dracut-pre-mount.service.8.asc +#usr/lib/dracut/modules.d/98systemd/dracut-pre-mount.sh +#usr/lib/dracut/modules.d/98systemd/dracut-pre-pivot.service +#usr/lib/dracut/modules.d/98systemd/dracut-pre-pivot.service.8 +#usr/lib/dracut/modules.d/98systemd/dracut-pre-pivot.service.8.asc +#usr/lib/dracut/modules.d/98systemd/dracut-pre-pivot.sh +#usr/lib/dracut/modules.d/98systemd/dracut-pre-trigger.service +#usr/lib/dracut/modules.d/98systemd/dracut-pre-trigger.service.8 +#usr/lib/dracut/modules.d/98systemd/dracut-pre-trigger.service.8.asc +#usr/lib/dracut/modules.d/98systemd/dracut-pre-trigger.sh +#usr/lib/dracut/modules.d/98systemd/dracut-pre-udev.service +#usr/lib/dracut/modules.d/98systemd/dracut-pre-udev.service.8 +#usr/lib/dracut/modules.d/98systemd/dracut-pre-udev.service.8.asc +#usr/lib/dracut/modules.d/98systemd/dracut-pre-udev.sh +#usr/lib/dracut/modules.d/98systemd/dracut-shutdown.service +#usr/lib/dracut/modules.d/98systemd/dracut-shutdown.service.8 +#usr/lib/dracut/modules.d/98systemd/dracut-shutdown.service.8.asc +#usr/lib/dracut/modules.d/98systemd/emergency.service +#usr/lib/dracut/modules.d/98systemd/initrd.target +#usr/lib/dracut/modules.d/98systemd/module-setup.sh +#usr/lib/dracut/modules.d/98systemd/rescue.service +#usr/lib/dracut/modules.d/98systemd/rootfs-generator.sh +#usr/lib/dracut/modules.d/98usrmount +#usr/lib/dracut/modules.d/98usrmount/module-setup.sh +#usr/lib/dracut/modules.d/98usrmount/mount-usr.sh +#usr/lib/dracut/modules.d/99base +#usr/lib/dracut/modules.d/99base/dracut-lib.sh +#usr/lib/dracut/modules.d/99base/init.sh +#usr/lib/dracut/modules.d/99base/initqueue.sh +#usr/lib/dracut/modules.d/99base/loginit.sh +#usr/lib/dracut/modules.d/99base/module-setup.sh +#usr/lib/dracut/modules.d/99base/parse-root-opts.sh +#usr/lib/dracut/modules.d/99base/rdsosreport.sh +#usr/lib/dracut/modules.d/99fs-lib +#usr/lib/dracut/modules.d/99fs-lib/fs-lib.sh +#usr/lib/dracut/modules.d/99fs-lib/module-setup.sh +#usr/lib/dracut/modules.d/99img-lib +#usr/lib/dracut/modules.d/99img-lib/img-lib.sh +#usr/lib/dracut/modules.d/99img-lib/module-setup.sh +#usr/lib/dracut/modules.d/99shutdown +#usr/lib/dracut/modules.d/99shutdown/module-setup.sh +#usr/lib/dracut/modules.d/99shutdown/shutdown.sh +#usr/lib/dracut/modules.d/99uefi-lib +#usr/lib/dracut/modules.d/99uefi-lib/module-setup.sh +#usr/lib/dracut/modules.d/99uefi-lib/uefi-lib.sh +#usr/lib/dracut/skipcpio +#usr/lib/kernel +#usr/lib/kernel/install.d +#usr/lib/kernel/install.d/50-dracut.install +#usr/lib/kernel/install.d/51-dracut-rescue.install +#usr/share/bash-completion/completions/dracut +#usr/share/bash-completion/completions/lsinitrd +#usr/share/man/man1/lsinitrd.1 #usr/share/man/man5/dracut.conf.5 +#usr/share/man/man7/dracut.bootup.7 +#usr/share/man/man7/dracut.cmdline.7 +#usr/share/man/man7/dracut.kernel.7 +#usr/share/man/man7/dracut.modules.7 #usr/share/man/man8/dracut-catimages.8 -#usr/share/man/man8/dracut-gencmdline.8 +#usr/share/man/man8/dracut-cmdline.service.8 +#usr/share/man/man8/dracut-initqueue.service.8 +#usr/share/man/man8/dracut-mount.service.8 +#usr/share/man/man8/dracut-pre-mount.service.8 +#usr/share/man/man8/dracut-pre-pivot.service.8 +#usr/share/man/man8/dracut-pre-trigger.service.8 +#usr/share/man/man8/dracut-pre-udev.service.8 +#usr/share/man/man8/dracut-shutdown.service.8 #usr/share/man/man8/dracut.8 -sbin/switch_root +#usr/share/man/man8/mkinitrd-suse.8 +#usr/share/man/man8/mkinitrd.8 diff --git a/lfs/dracut b/lfs/dracut index 73b67bb74..51aee1659 100644 --- a/lfs/dracut +++ b/lfs/dracut @@ -24,10 +24,10 @@ include Config -VER = 006 +VER = 038 THISAPP = dracut-$(VER) -DL_FILE = $(THISAPP).tar.bz2 +DL_FILE = $(THISAPP).tar.xz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 016052b57001789ec2acf89d382a82f5 +$(DL_FILE)_MD5 = 4487bd98000cc536c5c3839a2f112831 install : $(TARGET) @@ -69,40 +69,27 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dracut-006_lzma.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dracut-006_remove_cdrom_wait.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dracut-006_add_run_dir.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dracut-006_remove_scsi_wait.patch - - cd $(DIR_APP) && cp -vf $(DIR_SRC)/src/dracut/switch_root.c . - - cd $(DIR_APP) && make $(MAKETUNING) WITH_SWITCH_ROOT=1 - cd $(DIR_APP) && make install WITH_SWITCH_ROOT=1 \ - sbindir=/sbin sysconfdir=/etc + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install sbindir=/sbin sysconfdir=/etc cp -vf $(DIR_SRC)/src/dracut/dracut.conf /etc/dracut.conf.d/ - rm -rf /usr/share/dracut/modules.d/*{dash,fips,redhat-i18n,rpmversion,network,ifcfg,plymouth,btrfs,crypt,dm,dmraid,dmsquash-live,lvm,multipath,dasd,dasd_mod,fcoe,iscsi,nbd,nfs,resume,uswsusp,zfcp,znet,selinux} - - sed -e "s/--resolve-names=never//g" -i \ - /usr/share/dracut/modules.d/99base/init - # Build initramdisk # Strip all binaries in that initrd, because no debugging code is # needed. ifeq "$(MACHINE_TYPE)" "arm" # kirkwood kernel - /sbin/dracut --force --verbose --strip /boot/ipfirerd-$(KVER)-kirkwood.img $(KVER)-ipfire-kirkwood + dracut --force --verbose --strip /boot/ipfirerd-$(KVER)-kirkwood.img $(KVER)-ipfire-kirkwood cd /boot && mkimage -A arm -T ramdisk -C lzma -d ipfirerd-$(KVER)-kirkwood.img uInit-ipfire-kirkwood # arm7 multi kernel - /sbin/dracut --force --verbose --strip /boot/ipfirerd-$(KVER)-multi.img $(KVER)-ipfire-multi + dracut --force --verbose --strip /boot/ipfirerd-$(KVER)-multi.img $(KVER)-ipfire-multi cd /boot && mkimage -A arm -T ramdisk -C lzma -d ipfirerd-$(KVER)-multi.img uInit-ipfire-multi # cd /boot && cp -f ipfirerd-$(KVER)-multi.img zInit-ipfire-multi else - /sbin/dracut --force --verbose --strip /boot/initramfs-$(KVER)-ipfire.img $(KVER)-ipfire + dracut --force --verbose --strip /boot/initramfs-$(KVER)-ipfire.img $(KVER)-ipfire endif @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/patches/dracut-006_add_run_dir.patch b/src/patches/dracut-006_add_run_dir.patch deleted file mode 100644 index 08063f8ab..000000000 --- a/src/patches/dracut-006_add_run_dir.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -Naur dracut-006.org/modules.d/99base/init dracut-006/modules.d/99base/init ---- dracut-006.org/modules.d/99base/init 2010-06-17 10:46:29.000000000 +0200 -+++ dracut-006/modules.d/99base/init 2013-10-31 16:51:17.658771341 +0100 -@@ -87,6 +87,9 @@ - - ln -s /proc/self/fd /dev/fd >/dev/null 2>&1 - -+# create run dir -+mkdir run -+ - if getarg rdinitdebug; then - getarg quiet && DRACUT_QUIET="yes" - mkfifo /dev/initlog.pipe diff --git a/src/patches/dracut-006_lzma.patch b/src/patches/dracut-006_lzma.patch deleted file mode 100644 index ddf499154..000000000 --- a/src/patches/dracut-006_lzma.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -Naur dracut-006.org/dracut dracut-006/dracut ---- dracut-006.org/dracut 2010-06-17 10:46:29.000000000 +0200 -+++ dracut-006/dracut 2010-08-07 21:00:38.000000000 +0200 -@@ -308,9 +308,7 @@ - #strip -R .comment $note "$f" || : - done - fi -- --type pigz &>/dev/null && gzip=pigz || gzip=gzip --( cd "$initdir"; find . |cpio -R 0:0 -H newc -o --quiet |$gzip -9 > "$outfile"; ) -+( cd "$initdir"; find . |cpio -R 0:0 -H newc -o --quiet | lzma > "$outfile"; ) - if [ $? -ne 0 ]; then - derror "dracut: creation of $outfile failed" - exit 1 diff --git a/src/patches/dracut-006_remove_cdrom_wait.patch b/src/patches/dracut-006_remove_cdrom_wait.patch deleted file mode 100644 index 23c084ec7..000000000 --- a/src/patches/dracut-006_remove_cdrom_wait.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -Naur dracut-006.org/modules.d/99base/init dracut-006/modules.d/99base/init ---- dracut-006.org/modules.d/99base/init 2010-06-17 10:46:29.000000000 +0200 -+++ dracut-006/modules.d/99base/init 2011-01-12 11:40:41.713190125 +0100 -@@ -190,17 +190,6 @@ - # no more udev jobs and queues empty. - sleep 0.5 - -- # dirty hack for some cdrom drives, -- # which report no medium for quiet -- # some time. -- for cdrom in /sys/block/sr*; do -- [ -e "$cdrom" ] || continue -- # skip, if cdrom medium was already found -- strstr "$(udevadm info --query=env --path=${cdrom##/sys})" \ -- ID_CDROM_MEDIA && continue -- echo change > "$cdrom/uevent" -- done -- - i=$(($i+1)) - [ $i -gt $RDRETRY ] \ - && { flock -s 9 ; emergency_shell "No root device found"; } 9>/.console_lock diff --git a/src/patches/dracut-006_remove_scsi_wait.patch b/src/patches/dracut-006_remove_scsi_wait.patch deleted file mode 100644 index cfccf01db..000000000 --- a/src/patches/dracut-006_remove_scsi_wait.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur dracut-006.org/modules.d/99base/init dracut-006/modules.d/99base/init ---- dracut-006.org/modules.d/99base/init 2010-06-17 10:46:29.000000000 +0200 -+++ dracut-006/modules.d/99base/init 2013-10-31 17:05:09.135475525 +0100 -@@ -175,7 +175,7 @@ - - $UDEV_QUEUE_EMPTY >/dev/null 2>&1 || continue - -- modprobe scsi_wait_scan && rmmod scsi_wait_scan -+ sleep 0.1 - - $UDEV_QUEUE_EMPTY >/dev/null 2>&1 || continue - diff --git a/src/patches/dracut-init_start_ipfireinstaller.patch b/src/patches/dracut-init_start_ipfireinstaller.patch deleted file mode 100644 index 010382652..000000000 --- a/src/patches/dracut-init_start_ipfireinstaller.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff -Naur org/init new/init ---- init 2010-06-17 10:46:29.000000000 +0200 -+++ init 2010-08-10 17:55:41.000000000 +0200 -@@ -111,8 +111,9 @@ - getarg 'rdbreak=cmdline' && emergency_shell -n cmdline "Break before cmdline" - source_all cmdline - --[ -z "$root" ] && die "No or empty root= argument" --[ -z "$rootok" ] && die "Don't know how to handle 'root=$root'" -+# Disable root argument check ... -+#[ -z "$root" ] && die "No or empty root= argument" -+#[ -z "$rootok" ] && die "Don't know how to handle 'root=$root'" - - # Network root scripts may need updated root= options, - # so deposit them where they can see them (udev purges the env) -@@ -202,12 +203,15 @@ - done - - i=$(($i+1)) -- [ $i -gt $RDRETRY ] \ -- && { flock -s 9 ; emergency_shell "No root device found"; } 9>/.console_lock -+ # Start IPFire installer after root was not found ;) -+ [ $i -gt $RDRETRY ] && break 2; -+ - done - unset job - unset queuetriggered - -+/etc/rc_installer -+ - # pre-mount happens before we try to mount the root filesystem, - # and happens once. - getarg 'rdbreak=pre-mount' && emergency_shell -n pre-mount "Break pre-mount" From 5fca8d27d84b63d159cbf8685147e89e5db7fcfd Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 16:42:56 +0200 Subject: [PATCH 038/297] installer: Create dracut module There is now a new installer module for dracut which will take the installer and put it into the ramdisk. --- config/install/fstab | 5 - config/install/group | 4 - config/install/halt | 16 --- config/install/hosts | 1 - config/install/nsswitch.conf | 15 --- config/install/passwd | 1 - config/install/profile | 7 - config/install/shells | 1 - config/rootfiles/installer/coreutils | 1 - config/rootfiles/installer/dhcpcd | 1 - config/rootfiles/installer/e2fsprogs | 1 - config/rootfiles/installer/files | 4 - config/rootfiles/installer/findutils | 1 - config/rootfiles/installer/gawk | 1 - config/rootfiles/installer/glibc | 1 - config/rootfiles/installer/grep | 1 - config/rootfiles/installer/gzip | 1 - config/rootfiles/installer/hwdata | 1 - config/rootfiles/installer/iproute2 | 1 - config/rootfiles/installer/kbd | 1 - config/rootfiles/installer/libidn | 1 - config/rootfiles/installer/libusb | 1 - config/rootfiles/installer/misc-progs | 2 - config/rootfiles/installer/ncurses | 1 - config/rootfiles/installer/newt | 1 - config/rootfiles/installer/openssl | 1 - config/rootfiles/installer/parted | 1 - config/rootfiles/installer/pciutils | 1 - config/rootfiles/installer/pcmciautils | 1 - config/rootfiles/installer/pcre | 1 - config/rootfiles/installer/popt | 1 - config/rootfiles/installer/reboot | 2 - config/rootfiles/installer/reiserfsprogs | 1 - config/rootfiles/installer/sed | 1 - config/rootfiles/installer/slang | 1 - config/rootfiles/installer/sysfsutils | 1 - config/rootfiles/installer/tar | 1 - config/rootfiles/installer/udev | 1 - config/rootfiles/installer/usbutils | 1 - config/rootfiles/installer/util-linux | 1 - config/rootfiles/installer/vim | 1 - config/rootfiles/installer/wget | 1 - config/rootfiles/installer/xz | 1 - config/rootfiles/installer/zlib | 1 - lfs/cdrom | 2 +- lfs/initrd | 121 ------------------ lfs/installer | 9 +- make.sh | 1 - src/install+setup/install/Makefile | 4 +- .../install/dracut-module/70-dhcpcd.exe | 32 +++++ .../install/dracut-module/fake-root.sh | 5 + .../install/dracut-module/module-setup.sh | 63 +++++++++ .../install/dracut-module/run-installer.sh | 15 +-- 53 files changed, 116 insertions(+), 227 deletions(-) delete mode 100644 config/install/fstab delete mode 100644 config/install/group delete mode 100644 config/install/halt delete mode 100644 config/install/hosts delete mode 100644 config/install/nsswitch.conf delete mode 100644 config/install/passwd delete mode 100644 config/install/profile delete mode 100644 config/install/shells delete mode 120000 config/rootfiles/installer/coreutils delete mode 120000 config/rootfiles/installer/dhcpcd delete mode 120000 config/rootfiles/installer/e2fsprogs delete mode 100644 config/rootfiles/installer/files delete mode 120000 config/rootfiles/installer/findutils delete mode 120000 config/rootfiles/installer/gawk delete mode 120000 config/rootfiles/installer/glibc delete mode 120000 config/rootfiles/installer/grep delete mode 120000 config/rootfiles/installer/gzip delete mode 120000 config/rootfiles/installer/hwdata delete mode 120000 config/rootfiles/installer/iproute2 delete mode 120000 config/rootfiles/installer/kbd delete mode 120000 config/rootfiles/installer/libidn delete mode 120000 config/rootfiles/installer/libusb delete mode 100644 config/rootfiles/installer/misc-progs delete mode 120000 config/rootfiles/installer/ncurses delete mode 120000 config/rootfiles/installer/newt delete mode 120000 config/rootfiles/installer/openssl delete mode 120000 config/rootfiles/installer/parted delete mode 120000 config/rootfiles/installer/pciutils delete mode 120000 config/rootfiles/installer/pcmciautils delete mode 120000 config/rootfiles/installer/pcre delete mode 120000 config/rootfiles/installer/popt delete mode 100644 config/rootfiles/installer/reboot delete mode 120000 config/rootfiles/installer/reiserfsprogs delete mode 120000 config/rootfiles/installer/sed delete mode 120000 config/rootfiles/installer/slang delete mode 120000 config/rootfiles/installer/sysfsutils delete mode 120000 config/rootfiles/installer/tar delete mode 120000 config/rootfiles/installer/udev delete mode 120000 config/rootfiles/installer/usbutils delete mode 120000 config/rootfiles/installer/util-linux delete mode 120000 config/rootfiles/installer/vim delete mode 120000 config/rootfiles/installer/wget delete mode 120000 config/rootfiles/installer/xz delete mode 120000 config/rootfiles/installer/zlib delete mode 100644 lfs/initrd create mode 100755 src/install+setup/install/dracut-module/70-dhcpcd.exe create mode 100644 src/install+setup/install/dracut-module/fake-root.sh create mode 100755 src/install+setup/install/dracut-module/module-setup.sh rename config/install/rc_installer => src/install+setup/install/dracut-module/run-installer.sh (53%) diff --git a/config/install/fstab b/config/install/fstab deleted file mode 100644 index 58297c2b1..000000000 --- a/config/install/fstab +++ /dev/null @@ -1,5 +0,0 @@ -/dev/ram0 / squashfs -/proc /proc proc -none /sys sysfs -none /tmp tmpfs -none /dev tmpfs diff --git a/config/install/group b/config/install/group deleted file mode 100644 index 465a9cf41..000000000 --- a/config/install/group +++ /dev/null @@ -1,4 +0,0 @@ -root:x:0:root -tty:x:5: -disk:x:6: -uucp:x:14: diff --git a/config/install/halt b/config/install/halt deleted file mode 100644 index 90a0c80fe..000000000 --- a/config/install/halt +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -# Clear screen -/usr/bin/clear -echo "Shutting down..." -echo "Sending all processes the TERM signal..." -/sbin/killall5 -15 -sleep 3 -echo "Sending all processes the KILL signal..." -/sbin/killall5 -9 -sleep 3 -echo "Unmounting filesystems..." -/bin/umount -a > /dev/null 2>&1 -echo "Unmounting root..." -/bin/mount -n -o remount,ro / -echo "Rebooting..." -/sbin/reboot -f diff --git a/config/install/hosts b/config/install/hosts deleted file mode 100644 index f4fb350dd..000000000 --- a/config/install/hosts +++ /dev/null @@ -1 +0,0 @@ -localhost 127.0.0.1 diff --git a/config/install/nsswitch.conf b/config/install/nsswitch.conf deleted file mode 100644 index da516c6ca..000000000 --- a/config/install/nsswitch.conf +++ /dev/null @@ -1,15 +0,0 @@ -passwd: files -shadow: files -group: files -hosts: files -services: files -networks: files -protocols: files -rpc: files -ethers: files -netmasks: files -bootparams: files -automount: files -aliases: files -netgroup: files -publickey: files diff --git a/config/install/passwd b/config/install/passwd deleted file mode 100644 index 365a8d7f7..000000000 --- a/config/install/passwd +++ /dev/null @@ -1 +0,0 @@ -root::0:0:root:/:/bin/ash diff --git a/config/install/profile b/config/install/profile deleted file mode 100644 index 02c63b9b7..000000000 --- a/config/install/profile +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/ash - -TERM=linux -LANG=en_US.UTF-8 -export TERM LANG - -/usr/bin/unicode_start diff --git a/config/install/shells b/config/install/shells deleted file mode 100644 index 006aa38ce..000000000 --- a/config/install/shells +++ /dev/null @@ -1 +0,0 @@ -/bin/ash diff --git a/config/rootfiles/installer/coreutils b/config/rootfiles/installer/coreutils deleted file mode 120000 index b41d95ad5..000000000 --- a/config/rootfiles/installer/coreutils +++ /dev/null @@ -1 +0,0 @@ -../common/coreutils \ No newline at end of file diff --git a/config/rootfiles/installer/dhcpcd b/config/rootfiles/installer/dhcpcd deleted file mode 120000 index ea5996c83..000000000 --- a/config/rootfiles/installer/dhcpcd +++ /dev/null @@ -1 +0,0 @@ -../common/dhcpcd \ No newline at end of file diff --git a/config/rootfiles/installer/e2fsprogs b/config/rootfiles/installer/e2fsprogs deleted file mode 120000 index 2a6ee42cc..000000000 --- a/config/rootfiles/installer/e2fsprogs +++ /dev/null @@ -1 +0,0 @@ -../common/e2fsprogs \ No newline at end of file diff --git a/config/rootfiles/installer/files b/config/rootfiles/installer/files deleted file mode 100644 index aba14d80e..000000000 --- a/config/rootfiles/installer/files +++ /dev/null @@ -1,4 +0,0 @@ -etc/host.conf -etc/hosts -etc/protocols - diff --git a/config/rootfiles/installer/findutils b/config/rootfiles/installer/findutils deleted file mode 120000 index 1114c4c47..000000000 --- a/config/rootfiles/installer/findutils +++ /dev/null @@ -1 +0,0 @@ -../common/findutils \ No newline at end of file diff --git a/config/rootfiles/installer/gawk b/config/rootfiles/installer/gawk deleted file mode 120000 index a7660cfcb..000000000 --- a/config/rootfiles/installer/gawk +++ /dev/null @@ -1 +0,0 @@ -../common/gawk \ No newline at end of file diff --git a/config/rootfiles/installer/glibc b/config/rootfiles/installer/glibc deleted file mode 120000 index 4a4672680..000000000 --- a/config/rootfiles/installer/glibc +++ /dev/null @@ -1 +0,0 @@ -../common/i586/glibc \ No newline at end of file diff --git a/config/rootfiles/installer/grep b/config/rootfiles/installer/grep deleted file mode 120000 index f7bf2d96a..000000000 --- a/config/rootfiles/installer/grep +++ /dev/null @@ -1 +0,0 @@ -../common/grep \ No newline at end of file diff --git a/config/rootfiles/installer/gzip b/config/rootfiles/installer/gzip deleted file mode 120000 index 1cbc376de..000000000 --- a/config/rootfiles/installer/gzip +++ /dev/null @@ -1 +0,0 @@ -../common/gzip \ No newline at end of file diff --git a/config/rootfiles/installer/hwdata b/config/rootfiles/installer/hwdata deleted file mode 120000 index 7ed7e21d6..000000000 --- a/config/rootfiles/installer/hwdata +++ /dev/null @@ -1 +0,0 @@ -../common/hwdata \ No newline at end of file diff --git a/config/rootfiles/installer/iproute2 b/config/rootfiles/installer/iproute2 deleted file mode 120000 index efe83c546..000000000 --- a/config/rootfiles/installer/iproute2 +++ /dev/null @@ -1 +0,0 @@ -../common/iproute2 \ No newline at end of file diff --git a/config/rootfiles/installer/kbd b/config/rootfiles/installer/kbd deleted file mode 120000 index 3efe86af2..000000000 --- a/config/rootfiles/installer/kbd +++ /dev/null @@ -1 +0,0 @@ -../common/kbd \ No newline at end of file diff --git a/config/rootfiles/installer/libidn b/config/rootfiles/installer/libidn deleted file mode 120000 index 9750546c4..000000000 --- a/config/rootfiles/installer/libidn +++ /dev/null @@ -1 +0,0 @@ -../common/libidn \ No newline at end of file diff --git a/config/rootfiles/installer/libusb b/config/rootfiles/installer/libusb deleted file mode 120000 index efe4a2801..000000000 --- a/config/rootfiles/installer/libusb +++ /dev/null @@ -1 +0,0 @@ -../common/libusb \ No newline at end of file diff --git a/config/rootfiles/installer/misc-progs b/config/rootfiles/installer/misc-progs deleted file mode 100644 index 1e4226bd9..000000000 --- a/config/rootfiles/installer/misc-progs +++ /dev/null @@ -1,2 +0,0 @@ -bin/ping -usr/local/bin/iowrap diff --git a/config/rootfiles/installer/ncurses b/config/rootfiles/installer/ncurses deleted file mode 120000 index 7aac8a22b..000000000 --- a/config/rootfiles/installer/ncurses +++ /dev/null @@ -1 +0,0 @@ -../common/ncurses \ No newline at end of file diff --git a/config/rootfiles/installer/newt b/config/rootfiles/installer/newt deleted file mode 120000 index b63c4809e..000000000 --- a/config/rootfiles/installer/newt +++ /dev/null @@ -1 +0,0 @@ -../common/newt \ No newline at end of file diff --git a/config/rootfiles/installer/openssl b/config/rootfiles/installer/openssl deleted file mode 120000 index 8317ffd07..000000000 --- a/config/rootfiles/installer/openssl +++ /dev/null @@ -1 +0,0 @@ -../common/openssl \ No newline at end of file diff --git a/config/rootfiles/installer/parted b/config/rootfiles/installer/parted deleted file mode 120000 index 5c544a401..000000000 --- a/config/rootfiles/installer/parted +++ /dev/null @@ -1 +0,0 @@ -../common/parted \ No newline at end of file diff --git a/config/rootfiles/installer/pciutils b/config/rootfiles/installer/pciutils deleted file mode 120000 index 903f12430..000000000 --- a/config/rootfiles/installer/pciutils +++ /dev/null @@ -1 +0,0 @@ -../common/pciutils \ No newline at end of file diff --git a/config/rootfiles/installer/pcmciautils b/config/rootfiles/installer/pcmciautils deleted file mode 120000 index 47b2fe8f4..000000000 --- a/config/rootfiles/installer/pcmciautils +++ /dev/null @@ -1 +0,0 @@ -../common/pcmciautils \ No newline at end of file diff --git a/config/rootfiles/installer/pcre b/config/rootfiles/installer/pcre deleted file mode 120000 index ffd861616..000000000 --- a/config/rootfiles/installer/pcre +++ /dev/null @@ -1 +0,0 @@ -../common/pcre \ No newline at end of file diff --git a/config/rootfiles/installer/popt b/config/rootfiles/installer/popt deleted file mode 120000 index d15b2c614..000000000 --- a/config/rootfiles/installer/popt +++ /dev/null @@ -1 +0,0 @@ -../common/popt \ No newline at end of file diff --git a/config/rootfiles/installer/reboot b/config/rootfiles/installer/reboot deleted file mode 100644 index f1f6d6498..000000000 --- a/config/rootfiles/installer/reboot +++ /dev/null @@ -1,2 +0,0 @@ -sbin/reboot -sbin/halt diff --git a/config/rootfiles/installer/reiserfsprogs b/config/rootfiles/installer/reiserfsprogs deleted file mode 120000 index f596f68ac..000000000 --- a/config/rootfiles/installer/reiserfsprogs +++ /dev/null @@ -1 +0,0 @@ -../common/reiserfsprogs \ No newline at end of file diff --git a/config/rootfiles/installer/sed b/config/rootfiles/installer/sed deleted file mode 120000 index 4b0d3a3cd..000000000 --- a/config/rootfiles/installer/sed +++ /dev/null @@ -1 +0,0 @@ -../common/sed \ No newline at end of file diff --git a/config/rootfiles/installer/slang b/config/rootfiles/installer/slang deleted file mode 120000 index 405fd4072..000000000 --- a/config/rootfiles/installer/slang +++ /dev/null @@ -1 +0,0 @@ -../common/slang \ No newline at end of file diff --git a/config/rootfiles/installer/sysfsutils b/config/rootfiles/installer/sysfsutils deleted file mode 120000 index 9c56a9af9..000000000 --- a/config/rootfiles/installer/sysfsutils +++ /dev/null @@ -1 +0,0 @@ -../common/sysfsutils \ No newline at end of file diff --git a/config/rootfiles/installer/tar b/config/rootfiles/installer/tar deleted file mode 120000 index f994ef659..000000000 --- a/config/rootfiles/installer/tar +++ /dev/null @@ -1 +0,0 @@ -../common/tar \ No newline at end of file diff --git a/config/rootfiles/installer/udev b/config/rootfiles/installer/udev deleted file mode 120000 index d96e0b708..000000000 --- a/config/rootfiles/installer/udev +++ /dev/null @@ -1 +0,0 @@ -../common/udev \ No newline at end of file diff --git a/config/rootfiles/installer/usbutils b/config/rootfiles/installer/usbutils deleted file mode 120000 index dcc136f99..000000000 --- a/config/rootfiles/installer/usbutils +++ /dev/null @@ -1 +0,0 @@ -../common/usbutils \ No newline at end of file diff --git a/config/rootfiles/installer/util-linux b/config/rootfiles/installer/util-linux deleted file mode 120000 index f672071b7..000000000 --- a/config/rootfiles/installer/util-linux +++ /dev/null @@ -1 +0,0 @@ -../common/i586/util-linux \ No newline at end of file diff --git a/config/rootfiles/installer/vim b/config/rootfiles/installer/vim deleted file mode 120000 index 3ae92f3f0..000000000 --- a/config/rootfiles/installer/vim +++ /dev/null @@ -1 +0,0 @@ -../common/vim \ No newline at end of file diff --git a/config/rootfiles/installer/wget b/config/rootfiles/installer/wget deleted file mode 120000 index b75cdbce7..000000000 --- a/config/rootfiles/installer/wget +++ /dev/null @@ -1 +0,0 @@ -../common/wget \ No newline at end of file diff --git a/config/rootfiles/installer/xz b/config/rootfiles/installer/xz deleted file mode 120000 index 61772c7a2..000000000 --- a/config/rootfiles/installer/xz +++ /dev/null @@ -1 +0,0 @@ -../common/xz \ No newline at end of file diff --git a/config/rootfiles/installer/zlib b/config/rootfiles/installer/zlib deleted file mode 120000 index fcdedec9b..000000000 --- a/config/rootfiles/installer/zlib +++ /dev/null @@ -1 +0,0 @@ -../common/zlib \ No newline at end of file diff --git a/lfs/cdrom b/lfs/cdrom index 5a85002ba..39b485cb9 100644 --- a/lfs/cdrom +++ b/lfs/cdrom @@ -95,7 +95,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) dd if=/dev/zero bs=1k count=2 > /install/cdrom/boot/isolinux/boot.catalog ifneq "$(MACHINE_TYPE)" "arm" cp /boot/vmlinuz-$(KVER)-ipfire /install/cdrom/boot/isolinux/vmlinuz - cp /install/images/initrd /install/cdrom/boot/isolinux/instroot + dracut --force -a "installer" --xz /install/cdrom/boot/isolinux/instroot $(KVER)-ipfire cp $(DIR_SRC)/config/syslinux/boot.png /install/cdrom/boot/isolinux/boot.png cp /usr/lib/memtest86+/memtest.bin /install/cdrom/boot/isolinux/memtest cp /usr/share/ipfire-netboot/ipxe.lkrn /install/cdrom/boot/isolinux/netboot diff --git a/lfs/initrd b/lfs/initrd deleted file mode 100644 index ce7f7943a..000000000 --- a/lfs/initrd +++ /dev/null @@ -1,121 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007-2014 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -############################################################################### -# Definitions -############################################################################### - -include Config - -VER = ipfire - -THISAPP = initrd -DIR_APP = $(DIR_SRC)/$(THISAPP) -TARGET = $(DIR_INFO)/$(THISAPP) - -SUP_ARCH = i586 - -############################################################################### -# Top-level Rules -############################################################################### - -install : $(TARGET) - -check : - -download : - -md5 : - -############################################################################### -# Installation Details -############################################################################### - -$(TARGET) : - @$(PREBUILD) - rm -f /install/images/initrd - - # Finish up initrd directory - -mkdir -p /install/initrd/{dev,etc,mnt,root,lib/modules/$(KVER)-ipfire/kernel/drivers,cdrom,dev,harddisk,proc,tmp,usr/share/terminfo/l,var/run,sys} - cd /install/initrd && lzma -d -c /boot/initramfs-$(KVER)-ipfire.img | cpio -i - - # Copy Files packages for installer - find $(DIR_SRC)/config/rootfiles/installer/* -maxdepth 1 | xargs cat | grep -v "^#" > /tmp/ROOTFILES - - # Patch Kernel Version to rootfiles - sed -e "s/KVER/$(KVER)/g" -i /tmp/ROOTFILES - - -cd / && cpio -d -p /install/initrd < /tmp/ROOTFILES - - # Copy hid and network modules (and deps) - cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/hid \ - /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/ - cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/net \ - /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/ - cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/pcmcia \ - /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/ - cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/ssb \ - /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/ - cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/uio \ - /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/ - cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/ptp \ - /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/ - cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/dca \ - /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/ - cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/pps \ - /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/ - # Remove wireless modules - rm -rf /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/net/wireless - - cd /install/initrd/etc && rm -f fstab - cp -aRf $(DIR_SRC)/config/install/* /install/initrd/etc/ - rm -rf /install/initrd/usr/share/man - chmod 755 /install/initrd/etc/halt /install/initrd/etc/rc_installer - - cd /install/initrd/ && patch -Np0 < $(DIR_SRC)/src/patches/dracut-init_start_ipfireinstaller.patch - - # Hide udev messages - sed -i -e "s|err|none|g" /install/initrd/etc/udev/udev.conf - - # make new dependencies - depmod -a -F /boot/System.map-$(KVER)-ipfire $(KVER)-ipfire - - -mkdir -p /install/{images,mnt} - rm -rf /install/mnt/* - - #Build Module deps for installer. - depmod -a -b /install/initrd/ -F /boot/System.map-$(KVER)-ipfire $(KVER)-ipfire - - #Name service from dhcpcd - cp -f /etc/nsswitch.conf /install/initrd/etc/ - cp -f $(DIR_SRC)/config/initrd/dhcpc/* /install/initrd/var/ipfire/dhcpc/dhcpcd-hooks/ - - # Install needed locales. - -mkdir -pv /install/initrd/usr/lib/locale - for lang in $(DIR_SRC)/langs/*; do \ - for path in /usr/lib/locale/$${lang##*/}*; do \ - [ -d "$${path}" ] && cp -lrvf "$${path}" /install/initrd/usr/lib/locale/; \ - done; \ - done - - cd /install/initrd && find . | cpio -o -H newc | lzma > /install/images/initrd - cd /install/initrd && find ./ -ls > $(DIR_INFO)/_build.initrd.log - - @$(POSTBUILD) diff --git a/lfs/installer b/lfs/installer index 1fc205885..f25268bfd 100644 --- a/lfs/installer +++ b/lfs/installer @@ -60,11 +60,14 @@ $(TARGET) : cd $(DIR_APP)/install && make CFLAGS="-Os -std=gnu99 -fomit-frame-pointer -Wall \ -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \ -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"' -DKERNEL_VERSION='\"$(KVER)\"'" - cd $(DIR_APP)/install && install -v -m 0755 install probenic.sh \ - downloadsource.sh mountdest.sh /install/initrd/bin + cd $(DIR_APP)/install && install -v -m 0755 installer probenic.sh \ + downloadsource.sh mountdest.sh /usr/bin + rm -rvf /usr/lib/dracut/modules.d/99installer + cd $(DIR_APP)/install && cp -rvf dracut-module /usr/lib/dracut/modules.d/99installer + #Patch ISO Name for download ... sed -i -e "s|ipfire.iso|download.ipfire.org/releases/ipfire-2.x/$(VERSION)-core$(CORE)/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso|g" \ - /install/initrd/bin/downloadsource.sh + /usr/bin/downloadsource.sh #Patch version for mediacheck ... @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/make.sh b/make.sh index e6a96fd51..beafd3342 100755 --- a/make.sh +++ b/make.sh @@ -811,7 +811,6 @@ buildinstaller() { ipfiremake memtest ipfiremake installer installmake strip - ipfiremake initrd } buildpackages() { diff --git a/src/install+setup/install/Makefile b/src/install+setup/install/Makefile index 3feb63542..a78611718 100644 --- a/src/install+setup/install/Makefile +++ b/src/install+setup/install/Makefile @@ -33,7 +33,7 @@ LINK = $(LD) $(LDFLAGS) all : programs -programs : install +programs : installer clean : -rm -f *.o install core @@ -42,7 +42,7 @@ clean : OBJS=main.o config.o ../libsmooth/libsmooth.o unattended.o hw.o -install: $(OBJS) +installer: $(OBJS) $(LINK) $(OBJS) -o $@ $(LIBS) %.o : %.c diff --git a/src/install+setup/install/dracut-module/70-dhcpcd.exe b/src/install+setup/install/dracut-module/70-dhcpcd.exe new file mode 100755 index 000000000..4100fc957 --- /dev/null +++ b/src/install+setup/install/dracut-module/70-dhcpcd.exe @@ -0,0 +1,32 @@ +#/bin/bash +######################################################################## +# Begin +# +# Description : DHCP Client Script (initrd version) +# +# Authors : Arne Fitzenreiter - arne_f@ipfire.org +# +# Version : 02.00 +# +# Notes : +# +######################################################################## + +dhcpcd_up() +{ + set | grep "^new_" | sed "s|^new_||g" | \ + sed "s|'||g" | \ + sort > /var/ipfire/dhcpc/dhcpcd-$interface.info + + DNS=`grep "domain_name_servers" /var/ipfire/dhcpc/dhcpcd-$interface.info | cut -d"=" -f2` + DNS1=`echo $DNS | cut -d" " -f1` + DNS2=`echo $DNS | cut -d" " -f2` + + echo "nameserver $DNS1" > /etc/resolv.conf + echo "nameserver $DNS2" >> /etc/resolv.conf + +} + +case "$reason" in +BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT|STATIC) dhcpcd_up;; +esac diff --git a/src/install+setup/install/dracut-module/fake-root.sh b/src/install+setup/install/dracut-module/fake-root.sh new file mode 100644 index 000000000..7c41f3542 --- /dev/null +++ b/src/install+setup/install/dracut-module/fake-root.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +# Fake root so dracut will start our installer +root="installer" +rootok=1 diff --git a/src/install+setup/install/dracut-module/module-setup.sh b/src/install+setup/install/dracut-module/module-setup.sh new file mode 100755 index 000000000..53ea93bca --- /dev/null +++ b/src/install+setup/install/dracut-module/module-setup.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +# called by dracut +check() { + return 255 +} + +# called by dracut +depends() { + echo base bash mdraid shutdown + return 0 +} + +# called by dracut +install() { + inst /usr/bin/installer + inst /usr/bin/downloadsource.sh + inst /usr/local/bin/iowrap + + # Kernel drivers + instmods =drivers/hid + + # Network drivers + instmods =drivers/net/ethernet =drivers/net/usb + instmods virtio_net hv_netvsc vmxnet3 + + # Filesystem support + inst_multiple parted mkswap mke2fs mkreiserfs + instmods ext4 iso9660 reiserfs vfat + + # Extraction + inst_multiple tar gzip lzma xz + + # DHCP Client + inst dhcpcd + inst /var/ipfire/dhcpc/dhcpcd-run-hooks + inst /var/ipfire/dhcpc/dhcpcd.conf + for file in /var/ipfire/dhcpc/dhcpcd-hooks/*; do + inst "${file}" + done + inst "$moddir/70-dhcpcd.exe" "/var/ipfire/dhcpc/dhcpcd-hooks/70-dhcpcd.exe" + + # Misc. tools + inst_multiple eject ping wget + inst_multiple -o fdisk cfdisk + + # Hardware IDs + inst /usr/share/hwdata/pci.ids /usr/share/hwdata/usb.ids + + # Locales + for locale in de en es fr nl pl ru tr; do + for file in $(find /usr/lib/locale/${locale}*); do + inst "${file}" + done + done + + inst_hook cmdline 99 "$moddir/fake-root.sh" + inst_hook pre-mount 99 "$moddir/run-installer.sh" + + return 0 +} diff --git a/config/install/rc_installer b/src/install+setup/install/dracut-module/run-installer.sh similarity index 53% rename from config/install/rc_installer rename to src/install+setup/install/dracut-module/run-installer.sh index c1dd5b6e5..53f7cd331 100644 --- a/config/install/rc_installer +++ b/src/install+setup/install/dracut-module/run-installer.sh @@ -1,21 +1,20 @@ +#!/bin/sh # # IPFire Installer RC # +# Silence the kernel echo >/proc/sys/kernel/printk "1 4 1 7" echo -n -e "\033[9;0]" -ln -snf /proc/self/fd/0 /dev/stdin -ln -snf /proc/self/fd/1 /dev/stdout -ln -snf /proc/self/fd/2 /dev/stderr -ln -s /proc/kcore /dev/core -mount tmpfs -t tmpfs /tmp - echo "Starting shells on tty2 and tty3 ..." /usr/local/bin/iowrap /dev/tty2 /bin/bash & /usr/local/bin/iowrap /dev/tty3 /bin/bash & echo "Loading Installer..." -/bin/bash --login -c "/bin/install /dev/tty2" +/bin/bash --login -c "/usr/bin/installer /dev/tty2" -/etc/halt +sleep 60 + +# Reboot the system +/shutdown reboot From 802a123bcf2aeaa8a9e26f989bda954a7373cc68 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 17:59:02 +0200 Subject: [PATCH 039/297] installer: Pass partition sizes to parted in bytes. --- src/install+setup/install/hw.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index 36d881b0c..9e505cac5 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -359,6 +359,13 @@ static int hw_calculate_partition_table(struct hw_destination* dest) { dest->size = dest->disk1->size; } + // As we add some extra space before the beginning of the first + // partition, we need to substract that here. + dest->size -= MB2BYTES(1); + + // Add some more space for partition tables, etc. + dest->size -= MB2BYTES(1); + // Determine partition table dest->part_table = HW_PART_TABLE_MSDOS; @@ -493,44 +500,44 @@ int hw_create_partitions(struct hw_destination* dest) { else if (dest->part_table == HW_PART_TABLE_GPT) asprintf(&cmd, "%s mklabel gpt", cmd); - unsigned long long part_start = 1 * 1024 * 1024; // 1MB + unsigned long long part_start = MB2BYTES(1); if (*dest->part_bootldr) { - asprintf(&cmd, "%s mkpart %s ext2 %lluMB %lluMB", cmd, + asprintf(&cmd, "%s mkpart %s ext2 %lluB %lluB", cmd, (dest->part_table == HW_PART_TABLE_GPT) ? "BOOTLDR" : "primary", - BYTES2MB(part_start), BYTES2MB(part_start + dest->size_bootldr)); + part_start, part_start + dest->size_bootldr - 1); part_start += dest->size_bootldr; } if (*dest->part_boot) { - asprintf(&cmd, "%s mkpart %s ext2 %lluMB %lluMB", cmd, + asprintf(&cmd, "%s mkpart %s ext2 %lluB %lluB", cmd, (dest->part_table == HW_PART_TABLE_GPT) ? "BOOT" : "primary", - BYTES2MB(part_start), BYTES2MB(part_start + dest->size_boot)); + part_start, part_start + dest->size_boot - 1); part_start += dest->size_boot; } if (*dest->part_swap) { - asprintf(&cmd, "%s mkpart %s linux-swap %lluMB %lluMB", cmd, + asprintf(&cmd, "%s mkpart %s linux-swap %lluB %lluB", cmd, (dest->part_table == HW_PART_TABLE_GPT) ? "SWAP" : "primary", - BYTES2MB(part_start), BYTES2MB(part_start + dest->size_swap)); + part_start, part_start + dest->size_swap - 1); part_start += dest->size_swap; } if (*dest->part_root) { - asprintf(&cmd, "%s mkpart %s ext2 %lluMB %lluMB", cmd, + asprintf(&cmd, "%s mkpart %s ext2 %lluB %lluB", cmd, (dest->part_table == HW_PART_TABLE_GPT) ? "ROOT" : "primary", - BYTES2MB(part_start), BYTES2MB(part_start + dest->size_root)); + part_start, part_start + dest->size_root - 1); part_start += dest->size_root; } if (*dest->part_data) { - asprintf(&cmd, "%s mkpart %s ext2 %lluMB %lluMB", cmd, + asprintf(&cmd, "%s mkpart %s ext2 %lluB %lluB", cmd, (dest->part_table == HW_PART_TABLE_GPT) ? "DATA" : "primary", - BYTES2MB(part_start), BYTES2MB(part_start + dest->size_data)); + part_start, part_start + dest->size_data - 1); part_start += dest->size_data; } From 70a44b52a51d1852146a152e93b563d72083a25a Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 18:00:00 +0200 Subject: [PATCH 040/297] installer: Add support for XFS. --- langs/de/install/lang_de.c | 2 ++ langs/en/install/lang_en.c | 2 ++ langs/es/install/lang_es.c | 2 ++ langs/fr/install/lang_fr.c | 2 ++ langs/nl/install/lang_nl.c | 2 ++ langs/pl/install/lang_pl.c | 2 ++ langs/ru/install/lang_ru.c | 2 ++ langs/tr/install/lang_tr.c | 2 ++ src/install+setup/install/dracut-module/module-setup.sh | 4 ++-- src/install+setup/install/hw.c | 8 ++++++++ src/install+setup/install/hw.h | 1 + src/install+setup/install/main.c | 1 + 12 files changed, 28 insertions(+), 2 deletions(-) diff --git a/langs/de/install/lang_de.c b/langs/de/install/lang_de.c index f982bea1b..eac680594 100644 --- a/langs/de/install/lang_de.c +++ b/langs/de/install/lang_de.c @@ -609,6 +609,8 @@ char *de_tr[] = { "EXT4 - Dateisystem", /* TR_EXT4FS_WO_JOURNAL */ "EXT4 - Dateisystem ohne Journal", +/* TR_XFS */ +"XFS - Dateisystem", /* TR_REISERFS */ "ReiserFS - Dateisystem", /* TR_NO_LOCAL_SOURCE */ diff --git a/langs/en/install/lang_en.c b/langs/en/install/lang_en.c index 3c6baa08e..12321cdeb 100644 --- a/langs/en/install/lang_en.c +++ b/langs/en/install/lang_en.c @@ -605,6 +605,8 @@ char *en_tr[] = { "EXT4 - Filesystem", /* TR_EXT4FS_WO_JOURNAL */ "EXT4 - Filesystem without journal", +/* TR_XFS */ +"XFS - Filesystem", /* TR_REISERFS */ "ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ diff --git a/langs/es/install/lang_es.c b/langs/es/install/lang_es.c index c16927289..b23bb573c 100644 --- a/langs/es/install/lang_es.c +++ b/langs/es/install/lang_es.c @@ -601,6 +601,8 @@ char *es_tr[] = { "EXT4 - Filesystem", /* TR_EXT4FS_WO_JOURNAL */ "EXT4 - Filesystem without journal", +/* TR_XFS */ +"XFS - Filesystem", /* TR_REISERFS */ "ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ diff --git a/langs/fr/install/lang_fr.c b/langs/fr/install/lang_fr.c index 4a33564f8..a1702ef24 100644 --- a/langs/fr/install/lang_fr.c +++ b/langs/fr/install/lang_fr.c @@ -601,6 +601,8 @@ char *fr_tr[] = { "EXT4 - Filesystem", /* TR_EXT4FS_WO_JOURNAL */ "EXT4 - Filesystem without journal", +/* TR_XFS */ +"XFS - Filesystem", /* TR_REISERFS */ "ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ diff --git a/langs/nl/install/lang_nl.c b/langs/nl/install/lang_nl.c index 83cc74859..36cd44335 100644 --- a/langs/nl/install/lang_nl.c +++ b/langs/nl/install/lang_nl.c @@ -605,6 +605,8 @@ char *nl_tr[] = { "EXT4 - Filesystem", /* TR_EXT4FS_WO_JOURNAL */ "EXT4 - Filesystem without journal", +/* TR_XFS */ +"XFS - Filesystem", /* TR_REISERFS */ "ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ diff --git a/langs/pl/install/lang_pl.c b/langs/pl/install/lang_pl.c index 0163ddd27..21e705f92 100644 --- a/langs/pl/install/lang_pl.c +++ b/langs/pl/install/lang_pl.c @@ -601,6 +601,8 @@ char *pl_tr[] = { "EXT4 - Filesystem", /* TR_EXT4FS_WO_JOURNAL */ "EXT4 - Filesystem without journal", +/* TR_XFS */ +"XFS - Filesystem", /* TR_REISERFS */ "ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ diff --git a/langs/ru/install/lang_ru.c b/langs/ru/install/lang_ru.c index 78deeef18..8351668df 100644 --- a/langs/ru/install/lang_ru.c +++ b/langs/ru/install/lang_ru.c @@ -599,6 +599,8 @@ char *ru_tr[] = { "EXT4 - Filesystem", /* TR_EXT4FS_WO_JOURNAL */ "EXT4 - Filesystem without journal", +/* TR_XFS */ +"XFS - Filesystem", /* TR_REISERFS */ "ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ diff --git a/langs/tr/install/lang_tr.c b/langs/tr/install/lang_tr.c index eee17bb61..1746dfa16 100644 --- a/langs/tr/install/lang_tr.c +++ b/langs/tr/install/lang_tr.c @@ -605,6 +605,8 @@ char *tr_tr[] = { "EXT4 - Filesystem", /* TR_EXT4FS_WO_JOURNAL */ "EXT4 - Filesystem without journal", +/* TR_XFS */ +"XFS - Filesystem", /* TR_REISERFS */ "ReiserFS - Filesystem", /* TR_NO_LOCAL_SOURCE */ diff --git a/src/install+setup/install/dracut-module/module-setup.sh b/src/install+setup/install/dracut-module/module-setup.sh index 53ea93bca..8059037d3 100755 --- a/src/install+setup/install/dracut-module/module-setup.sh +++ b/src/install+setup/install/dracut-module/module-setup.sh @@ -27,8 +27,8 @@ install() { instmods virtio_net hv_netvsc vmxnet3 # Filesystem support - inst_multiple parted mkswap mke2fs mkreiserfs - instmods ext4 iso9660 reiserfs vfat + inst_multiple parted mkswap mke2fs mkreiserfs mkfs.xfs + instmods ext4 iso9660 reiserfs vfat xfs # Extraction inst_multiple tar gzip lzma xz diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index 9e505cac5..e19632c97 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -604,6 +604,10 @@ static int hw_format_filesystem(const char* path, int fs) { // EXT4 w/o journal } else if (fs == HW_FS_EXT4_WO_JOURNAL) { snprintf(cmd, sizeof(cmd), "/sbin/mke2fs -T ext4 -O ^has_journal %s", path); + + // XFS + } else if (fs == HW_FS_XFS) { + snprintf(cmd, sizeof(cmd), "/sbin/mkfs.xfs -f %s", path); } assert(*cmd); @@ -661,6 +665,10 @@ int hw_mount_filesystems(struct hw_destination* dest, const char* prefix) { filesystem = "ext4"; break; + case HW_FS_XFS: + filesystem = "xfs"; + break; + default: assert(0); } diff --git a/src/install+setup/install/hw.h b/src/install+setup/install/hw.h index 28b28dfdd..a891a831a 100644 --- a/src/install+setup/install/hw.h +++ b/src/install+setup/install/hw.h @@ -44,6 +44,7 @@ #define HW_FS_REISERFS 1 #define HW_FS_EXT4 2 #define HW_FS_EXT4_WO_JOURNAL 3 +#define HW_FS_XFS 4 #define HW_FS_DEFAULT HW_FS_EXT4 diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 8d0935e5d..9fe59bb02 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -432,6 +432,7 @@ int main(int argc, char *argv[]) { } filesystems[] = { { HW_FS_EXT4, ctr[TR_EXT4FS] }, { HW_FS_EXT4_WO_JOURNAL, ctr[TR_EXT4FS_WO_JOURNAL] }, + { HW_FS_XFS, ctr[TR_XFS] }, { HW_FS_REISERFS, ctr[TR_REISERFS] }, { 0, NULL }, }; From 7f69d8a417e506593def3c1cf9781a440c3163bc Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 19:12:12 +0200 Subject: [PATCH 041/297] installer: Write fstab --- src/install+setup/install/hw.c | 69 ++++++++++++++++++++++++++++++++ src/install+setup/install/hw.h | 1 + src/install+setup/install/main.c | 21 ++++------ 3 files changed, 78 insertions(+), 13 deletions(-) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index e19632c97..3e74e872c 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -843,3 +843,72 @@ int hw_install_bootloader(struct hw_destination* dest) { return r; } + +static char* hw_get_uuid(const char* dev) { + blkid_probe p = blkid_new_probe_from_filename(dev); + const char* buffer = NULL; + char* uuid = NULL; + + if (!p) + return NULL; + + blkid_do_probe(p); + blkid_probe_lookup_value(p, "UUID", &buffer, NULL); + + if (buffer) + uuid = strdup(buffer); + + blkid_free_probe(p); + + return uuid; +} + +int hw_write_fstab(struct hw_destination* dest) { + FILE* f = fopen(DESTINATION_MOUNT_PATH "/etc/fstab", "w"); + if (!f) + return -1; + + const char* fmt = "UUID=%s %-8s %-4s %-10s %d %d\n"; + char* uuid = NULL; + + // boot + if (*dest->part_boot) { + uuid = hw_get_uuid(dest->part_boot); + + if (uuid) { + fprintf(f, fmt, uuid, "/boot", "auto", "defaults", 1, 2); + free(uuid); + } + } + + // swap + if (*dest->part_swap) { + uuid = hw_get_uuid(dest->part_swap); + + if (uuid) { + fprintf(f, fmt, uuid, "swap", "swap", "defaults,pri=1", 0, 0); + free(uuid); + } + } + + // root + uuid = hw_get_uuid(dest->part_root); + if (uuid) { + fprintf(f, fmt, uuid, "/", "auto", "defaults", 1, 1); + free(uuid); + } + + // data + if (*dest->part_data) { + uuid = hw_get_uuid(dest->part_data); + + if (uuid) { + fprintf(f, fmt, uuid, "/var", "auto", "defaults", 1, 1); + free(uuid); + } + } + + fclose(f); + + return 0; +} diff --git a/src/install+setup/install/hw.h b/src/install+setup/install/hw.h index a891a831a..ddaceb6ef 100644 --- a/src/install+setup/install/hw.h +++ b/src/install+setup/install/hw.h @@ -120,5 +120,6 @@ int hw_setup_raid(struct hw_destination* dest); int hw_stop_all_raid_arrays(); int hw_install_bootloader(struct hw_destination* dest); +int hw_write_fstab(struct hw_destination* dest); #endif /* HEADER_HW_H */ diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index 9fe59bb02..b540d7142 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -508,7 +508,14 @@ int main(int argc, char *argv[]) { errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]); goto EXIT; } - + + // Write fstab + rc = hw_write_fstab(destination); + if (rc) { + fprintf(flog, "Could not write /etc/fstab\n"); + goto EXIT; + } + /* Save language und local settings */ write_lang_configs(shortlangname); @@ -520,18 +527,6 @@ int main(int argc, char *argv[]) { goto EXIT; } - /* Update /etc/fstab */ - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE1#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_boot); - system(commandstring); - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE2#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_swap); - system(commandstring); - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE3#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_root); - system(commandstring); - snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE4#UUID=$(/sbin/blkid %s -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", destination->part_data); - system(commandstring); - - system("/bin/sed -e 's#/harddisk#/#g' -e 's#//#/#g' < /proc/mounts > /harddisk/etc/mtab"); - // Installing bootloader... statuswindow(60, 4, title, ctr[TR_INSTALLING_GRUB]); From 5b80a545829cc8867cf2403fcd147f60cddc8a13 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 19:12:25 +0200 Subject: [PATCH 042/297] installer: Increase height of RAID confirmation window --- src/install+setup/install/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c index b540d7142..ce4716321 100644 --- a/src/install+setup/install/main.c +++ b/src/install+setup/install/main.c @@ -380,7 +380,7 @@ int main(int argc, char *argv[]) { } else if (num_selected_disks == 2) { snprintf(message, sizeof(message), ctr[TR_RAID_SETUP_DESC], (*selected_disks)->description, (*selected_disks + 1)->description); - rc = newtWinOkCancel(ctr[TR_RAID_SETUP], message, 50, 10, + rc = newtWinOkCancel(ctr[TR_RAID_SETUP], message, 50, 14, ctr[TR_DELETE_ALL_DATA], ctr[TR_CANCEL]); if (rc == 0) { From e92d28aa93d67d4001dcfed97a47d80d1551627d Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 19:12:43 +0200 Subject: [PATCH 043/297] dracut: Remove unused modules. --- lfs/dracut | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lfs/dracut b/lfs/dracut index 51aee1659..434a7bc53 100644 --- a/lfs/dracut +++ b/lfs/dracut @@ -74,6 +74,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install sbindir=/sbin sysconfdir=/etc + rm -rf /usr/lib/dracut/modules.d/*{bootchart,dash,fips*,modsign,busybox,convertfs,network,ifcfg,url-lib,gensplash,cms,plymouth,btrfs,crypt*,dm,dmraid,dmsquash-live,livenet,lvm,multipath,qemu*,cifs,dasd*,fcoe*,iscsi,nbd,nfs,resume,ssh-client,zfcp*,systemd*,znet,securityfs,masterkey,selinux,usrmount,uefi-lib} + cp -vf $(DIR_SRC)/src/dracut/dracut.conf /etc/dracut.conf.d/ # Build initramdisk From 4db4aeeea749ba43904b6eea8e34e061b065fcec Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 27 Jul 2014 19:17:44 +0200 Subject: [PATCH 044/297] Create initramfs images in lfs/linux --- lfs/dracut | 15 --------------- lfs/linux | 11 +++++++++++ make.sh | 4 ++-- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/lfs/dracut b/lfs/dracut index 434a7bc53..397b63c94 100644 --- a/lfs/dracut +++ b/lfs/dracut @@ -78,20 +78,5 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cp -vf $(DIR_SRC)/src/dracut/dracut.conf /etc/dracut.conf.d/ - # Build initramdisk - # Strip all binaries in that initrd, because no debugging code is - # needed. - -ifeq "$(MACHINE_TYPE)" "arm" - # kirkwood kernel - dracut --force --verbose --strip /boot/ipfirerd-$(KVER)-kirkwood.img $(KVER)-ipfire-kirkwood - cd /boot && mkimage -A arm -T ramdisk -C lzma -d ipfirerd-$(KVER)-kirkwood.img uInit-ipfire-kirkwood - # arm7 multi kernel - dracut --force --verbose --strip /boot/ipfirerd-$(KVER)-multi.img $(KVER)-ipfire-multi - cd /boot && mkimage -A arm -T ramdisk -C lzma -d ipfirerd-$(KVER)-multi.img uInit-ipfire-multi -# cd /boot && cp -f ipfirerd-$(KVER)-multi.img zInit-ipfire-multi -else - dracut --force --verbose --strip /boot/initramfs-$(KVER)-ipfire.img $(KVER)-ipfire -endif @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/lfs/linux b/lfs/linux index e62cecd75..276215595 100644 --- a/lfs/linux +++ b/lfs/linux @@ -293,6 +293,17 @@ ifeq "$(MACHINE_TYPE)" "arm" done endif + # Create initramfs images + dracut --force --verbose --strip /boot/initramfs-$(KVER)-$(VERSUFIX).img $(KVER)-$(VERSUFIX) + +ifeq "$(KCFG)" "-kirkwood" + cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-kirkwood.img uInit-ipfire-kirkwood +endif + +ifeq "$(KCFG)" "-multi" + cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-multi.img uInit-ipfire-multi +endif + ifeq "$(LASTKERNEL)" "1" # Only do this once cd $(DIR_APP) && install -m 755 usr/gen_init_cpio /sbin/ diff --git a/make.sh b/make.sh index beafd3342..09419201e 100755 --- a/make.sh +++ b/make.sh @@ -400,6 +400,8 @@ buildipfire() { ipfiremake rpi-firmware ipfiremake bc ipfiremake u-boot + ipfiremake cpio + ipfiremake dracut case "${TARGET_ARCH}" in i586) @@ -459,8 +461,6 @@ buildipfire() { esac ipfiremake pkg-config ipfiremake linux-atm - ipfiremake cpio - ipfiremake dracut ipfiremake expat ipfiremake gdbm ipfiremake pam From 851e6cf54b54b2046eb84a46eb133ce5973b2df6 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 28 Jul 2014 00:26:04 +0200 Subject: [PATCH 045/297] cdrom: Fix build error. --- lfs/cdrom | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lfs/cdrom b/lfs/cdrom index 39b485cb9..f5520dca2 100644 --- a/lfs/cdrom +++ b/lfs/cdrom @@ -109,8 +109,8 @@ endif cd /install/cdrom && find -type f ! -name md5sum.txt | grep -v "./boot" | \ xargs md5sum > md5sum.txt -ifeq "$(MACHINE_TYPE)" "arm" mkdir -p /install/images +ifeq "$(MACHINE_TYPE)" "arm" cd /install/cdrom && mkisofs -J -r -V "$(NAME)_$(VERSION)" \ . > /install/images/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso else From 3f1c7eeb1819a7483cd9621a0fb429658e09bbfe Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 28 Jul 2014 00:26:21 +0200 Subject: [PATCH 046/297] installer: Ship some helpful tools like df, ps, top --- src/install+setup/install/dracut-module/module-setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install+setup/install/dracut-module/module-setup.sh b/src/install+setup/install/dracut-module/module-setup.sh index 8059037d3..ad8c4eab8 100755 --- a/src/install+setup/install/dracut-module/module-setup.sh +++ b/src/install+setup/install/dracut-module/module-setup.sh @@ -44,7 +44,7 @@ install() { # Misc. tools inst_multiple eject ping wget - inst_multiple -o fdisk cfdisk + inst_multiple -o fdisk cfdisk df ps top # Hardware IDs inst /usr/share/hwdata/pci.ids /usr/share/hwdata/usb.ids From 5689fc72022a98d6ffc065b0627605529d218808 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 28 Jul 2014 00:26:46 +0200 Subject: [PATCH 047/297] installer: Fix typo which caused to always use GPT. --- src/install+setup/install/hw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install+setup/install/hw.c b/src/install+setup/install/hw.c index 3e74e872c..148523137 100644 --- a/src/install+setup/install/hw.c +++ b/src/install+setup/install/hw.c @@ -379,7 +379,7 @@ static int hw_calculate_partition_table(struct hw_destination* dest) { // When using GPT, GRUB2 needs a little bit of space to put // itself in. - if (dest->part_table = HW_PART_TABLE_GPT) { + if (dest->part_table == HW_PART_TABLE_GPT) { snprintf(dest->part_bootldr, sizeof(dest->part_bootldr), "%s%d", path, part_idx); From fa6c8fdcd04e87cfbef73bdf7ed2548b82af3864 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 28 Jul 2014 00:27:08 +0200 Subject: [PATCH 048/297] Rootfile update. --- config/rootfiles/common/armv5tel/dracut | 79 ----- config/rootfiles/common/dracut | 138 +++++++++ config/rootfiles/common/i586/dracut | 379 ------------------------ config/rootfiles/common/i586/linux | 1 + config/rootfiles/common/installer | 9 + config/rootfiles/packages/linux-pae | 1 + 6 files changed, 149 insertions(+), 458 deletions(-) delete mode 100644 config/rootfiles/common/armv5tel/dracut create mode 100644 config/rootfiles/common/dracut delete mode 100644 config/rootfiles/common/i586/dracut create mode 100644 config/rootfiles/common/installer diff --git a/config/rootfiles/common/armv5tel/dracut b/config/rootfiles/common/armv5tel/dracut deleted file mode 100644 index ecf4325a0..000000000 --- a/config/rootfiles/common/armv5tel/dracut +++ /dev/null @@ -1,79 +0,0 @@ -#boot/ipfirerd-KVER-kirkwood.img -#boot/ipfirerd-KVER-multi.img -#boot/uInit-ipfire-kirkwood -#boot/uInit-ipfire-multi -etc/dracut.conf -etc/dracut.conf.d -#etc/dracut.conf.d/dracut.conf -sbin/dracut -sbin/dracut-catimages -sbin/dracut-gencmdline -sbin/lsinitrd -sbin/mkinitrd -usr/share/dracut -usr/share/dracut/dracut-functions -usr/share/dracut/modules.d -usr/share/dracut/modules.d/60xen -usr/share/dracut/modules.d/60xen/check -usr/share/dracut/modules.d/60xen/install -usr/share/dracut/modules.d/60xen/installkernel -usr/share/dracut/modules.d/60xen/xen-pre-udev.sh -usr/share/dracut/modules.d/90kernel-modules -usr/share/dracut/modules.d/90kernel-modules/install -usr/share/dracut/modules.d/90kernel-modules/installkernel -usr/share/dracut/modules.d/90kernel-modules/parse-kernel.sh -usr/share/dracut/modules.d/90mdraid -usr/share/dracut/modules.d/90mdraid/65-md-incremental-imsm.rules -usr/share/dracut/modules.d/90mdraid/check -usr/share/dracut/modules.d/90mdraid/install -usr/share/dracut/modules.d/90mdraid/installkernel -usr/share/dracut/modules.d/90mdraid/md-noimsm.sh -usr/share/dracut/modules.d/90mdraid/md_finished.sh -usr/share/dracut/modules.d/90mdraid/mdadm_auto.sh -usr/share/dracut/modules.d/90mdraid/mdcontainer_start.sh -usr/share/dracut/modules.d/90mdraid/mdmon-pre-udev.sh -usr/share/dracut/modules.d/90mdraid/mdraid-cleanup.sh -usr/share/dracut/modules.d/90mdraid/mdraid_start.sh -usr/share/dracut/modules.d/90mdraid/parse-md.sh -usr/share/dracut/modules.d/95debug -usr/share/dracut/modules.d/95debug/check -usr/share/dracut/modules.d/95debug/install -usr/share/dracut/modules.d/95rootfs-block -usr/share/dracut/modules.d/95rootfs-block/block-genrules.sh -usr/share/dracut/modules.d/95rootfs-block/install -usr/share/dracut/modules.d/95rootfs-block/mount-root.sh -usr/share/dracut/modules.d/95rootfs-block/parse-block.sh -usr/share/dracut/modules.d/95terminfo -usr/share/dracut/modules.d/95terminfo/install -usr/share/dracut/modules.d/95udev-rules -usr/share/dracut/modules.d/95udev-rules/01-ignore.rules -usr/share/dracut/modules.d/95udev-rules/59-persistent-storage-volid.rules -usr/share/dracut/modules.d/95udev-rules/59-persistent-storage.rules -usr/share/dracut/modules.d/95udev-rules/61-persistent-storage.rules -usr/share/dracut/modules.d/95udev-rules/install -usr/share/dracut/modules.d/95udev-rules/load-modules.sh -usr/share/dracut/modules.d/98syslog -usr/share/dracut/modules.d/98syslog/README -usr/share/dracut/modules.d/98syslog/check -usr/share/dracut/modules.d/98syslog/install -usr/share/dracut/modules.d/98syslog/parse-syslog-opts.sh -usr/share/dracut/modules.d/98syslog/rsyslog.conf -usr/share/dracut/modules.d/98syslog/rsyslogd-start.sh -usr/share/dracut/modules.d/98syslog/rsyslogd-stop.sh -usr/share/dracut/modules.d/98syslog/syslog-cleanup.sh -usr/share/dracut/modules.d/98syslog/syslog-genrules.sh -usr/share/dracut/modules.d/99base -usr/share/dracut/modules.d/99base/check -usr/share/dracut/modules.d/99base/dracut-lib.sh -usr/share/dracut/modules.d/99base/init -usr/share/dracut/modules.d/99base/initqueue -#usr/share/dracut/modules.d/99base/init~ -usr/share/dracut/modules.d/99base/install -usr/share/dracut/modules.d/99base/loginit -usr/share/dracut/modules.d/99base/parse-blacklist.sh -usr/share/dracut/modules.d/99base/parse-root-opts.sh -#usr/share/man/man5/dracut.conf.5 -#usr/share/man/man8/dracut-catimages.8 -#usr/share/man/man8/dracut-gencmdline.8 -#usr/share/man/man8/dracut.8 -sbin/switch_root diff --git a/config/rootfiles/common/dracut b/config/rootfiles/common/dracut new file mode 100644 index 000000000..2192763be --- /dev/null +++ b/config/rootfiles/common/dracut @@ -0,0 +1,138 @@ +etc/dracut.conf +etc/dracut.conf.d +#etc/dracut.conf.d/dracut.conf +usr/bin/dracut +usr/bin/dracut-catimages +#usr/bin/lsinitrd +#usr/bin/mkinitrd +usr/lib/dracut +#usr/lib/dracut/dracut-functions +#usr/lib/dracut/dracut-functions.sh +#usr/lib/dracut/dracut-initramfs-restore +#usr/lib/dracut/dracut-install +#usr/lib/dracut/dracut-logger.sh +#usr/lib/dracut/dracut-version.sh +#usr/lib/dracut/dracut.conf.d +#usr/lib/dracut/modules.d +#usr/lib/dracut/modules.d/00bash +#usr/lib/dracut/modules.d/00bash/module-setup.sh +#usr/lib/dracut/modules.d/02caps +#usr/lib/dracut/modules.d/02caps/README +#usr/lib/dracut/modules.d/02caps/caps.sh +#usr/lib/dracut/modules.d/02caps/module-setup.sh +#usr/lib/dracut/modules.d/03rescue +#usr/lib/dracut/modules.d/03rescue/module-setup.sh +#usr/lib/dracut/modules.d/04watchdog +#usr/lib/dracut/modules.d/04watchdog/module-setup.sh +#usr/lib/dracut/modules.d/04watchdog/watchdog-stop.sh +#usr/lib/dracut/modules.d/04watchdog/watchdog.sh +#usr/lib/dracut/modules.d/10i18n +#usr/lib/dracut/modules.d/10i18n/10-console.rules +#usr/lib/dracut/modules.d/10i18n/README +#usr/lib/dracut/modules.d/10i18n/console_init.sh +#usr/lib/dracut/modules.d/10i18n/module-setup.sh +#usr/lib/dracut/modules.d/10i18n/parse-i18n.sh +#usr/lib/dracut/modules.d/50drm +#usr/lib/dracut/modules.d/50drm/module-setup.sh +#usr/lib/dracut/modules.d/90kernel-modules +#usr/lib/dracut/modules.d/90kernel-modules/insmodpost.sh +#usr/lib/dracut/modules.d/90kernel-modules/module-setup.sh +#usr/lib/dracut/modules.d/90kernel-modules/parse-kernel.sh +#usr/lib/dracut/modules.d/90mdraid +#usr/lib/dracut/modules.d/90mdraid/59-persistent-storage-md.rules +#usr/lib/dracut/modules.d/90mdraid/65-md-incremental-imsm.rules +#usr/lib/dracut/modules.d/90mdraid/md-noddf.sh +#usr/lib/dracut/modules.d/90mdraid/md-noimsm.sh +#usr/lib/dracut/modules.d/90mdraid/md-shutdown.sh +#usr/lib/dracut/modules.d/90mdraid/mdmon-pre-shutdown.sh +#usr/lib/dracut/modules.d/90mdraid/mdmon-pre-udev.sh +#usr/lib/dracut/modules.d/90mdraid/mdraid-cleanup.sh +#usr/lib/dracut/modules.d/90mdraid/mdraid-needshutdown.sh +#usr/lib/dracut/modules.d/90mdraid/mdraid-waitclean.sh +#usr/lib/dracut/modules.d/90mdraid/mdraid_start.sh +#usr/lib/dracut/modules.d/90mdraid/module-setup.sh +#usr/lib/dracut/modules.d/90mdraid/parse-md.sh +#usr/lib/dracut/modules.d/95debug +#usr/lib/dracut/modules.d/95debug/module-setup.sh +#usr/lib/dracut/modules.d/95fstab-sys +#usr/lib/dracut/modules.d/95fstab-sys/module-setup.sh +#usr/lib/dracut/modules.d/95fstab-sys/mount-sys.sh +#usr/lib/dracut/modules.d/95rootfs-block +#usr/lib/dracut/modules.d/95rootfs-block/block-genrules.sh +#usr/lib/dracut/modules.d/95rootfs-block/module-setup.sh +#usr/lib/dracut/modules.d/95rootfs-block/mount-root.sh +#usr/lib/dracut/modules.d/95rootfs-block/parse-block.sh +#usr/lib/dracut/modules.d/95rootfs-block/rootfallback.sh +#usr/lib/dracut/modules.d/95terminfo +#usr/lib/dracut/modules.d/95terminfo/module-setup.sh +#usr/lib/dracut/modules.d/95udev-rules +#usr/lib/dracut/modules.d/95udev-rules/59-persistent-storage.rules +#usr/lib/dracut/modules.d/95udev-rules/61-persistent-storage.rules +#usr/lib/dracut/modules.d/95udev-rules/load-modules.sh +#usr/lib/dracut/modules.d/95udev-rules/module-setup.sh +#usr/lib/dracut/modules.d/95virtfs +#usr/lib/dracut/modules.d/95virtfs/module-setup.sh +#usr/lib/dracut/modules.d/95virtfs/mount-virtfs.sh +#usr/lib/dracut/modules.d/95virtfs/parse-virtfs.sh +#usr/lib/dracut/modules.d/97biosdevname +#usr/lib/dracut/modules.d/97biosdevname/module-setup.sh +#usr/lib/dracut/modules.d/97biosdevname/parse-biosdevname.sh +#usr/lib/dracut/modules.d/98integrity +#usr/lib/dracut/modules.d/98integrity/README +#usr/lib/dracut/modules.d/98integrity/evm-enable.sh +#usr/lib/dracut/modules.d/98integrity/ima-policy-load.sh +#usr/lib/dracut/modules.d/98integrity/module-setup.sh +#usr/lib/dracut/modules.d/98pollcdrom +#usr/lib/dracut/modules.d/98pollcdrom/module-setup.sh +#usr/lib/dracut/modules.d/98pollcdrom/pollcdrom.sh +#usr/lib/dracut/modules.d/98syslog +#usr/lib/dracut/modules.d/98syslog/README +#usr/lib/dracut/modules.d/98syslog/module-setup.sh +#usr/lib/dracut/modules.d/98syslog/parse-syslog-opts.sh +#usr/lib/dracut/modules.d/98syslog/rsyslog.conf +#usr/lib/dracut/modules.d/98syslog/rsyslogd-start.sh +#usr/lib/dracut/modules.d/98syslog/rsyslogd-stop.sh +#usr/lib/dracut/modules.d/98syslog/syslog-cleanup.sh +#usr/lib/dracut/modules.d/98syslog/syslog-genrules.sh +#usr/lib/dracut/modules.d/99base +#usr/lib/dracut/modules.d/99base/dracut-lib.sh +#usr/lib/dracut/modules.d/99base/init.sh +#usr/lib/dracut/modules.d/99base/initqueue.sh +#usr/lib/dracut/modules.d/99base/loginit.sh +#usr/lib/dracut/modules.d/99base/module-setup.sh +#usr/lib/dracut/modules.d/99base/parse-root-opts.sh +#usr/lib/dracut/modules.d/99base/rdsosreport.sh +#usr/lib/dracut/modules.d/99fs-lib +#usr/lib/dracut/modules.d/99fs-lib/fs-lib.sh +#usr/lib/dracut/modules.d/99fs-lib/module-setup.sh +#usr/lib/dracut/modules.d/99img-lib +#usr/lib/dracut/modules.d/99img-lib/img-lib.sh +#usr/lib/dracut/modules.d/99img-lib/module-setup.sh +#usr/lib/dracut/modules.d/99shutdown +#usr/lib/dracut/modules.d/99shutdown/module-setup.sh +#usr/lib/dracut/modules.d/99shutdown/shutdown.sh +#usr/lib/dracut/skipcpio +#usr/lib/kernel +#usr/lib/kernel/install.d +#usr/lib/kernel/install.d/50-dracut.install +#usr/lib/kernel/install.d/51-dracut-rescue.install +#usr/share/bash-completion/completions/dracut +#usr/share/bash-completion/completions/lsinitrd +#usr/share/man/man1/lsinitrd.1 +#usr/share/man/man5/dracut.conf.5 +#usr/share/man/man7/dracut.bootup.7 +#usr/share/man/man7/dracut.cmdline.7 +#usr/share/man/man7/dracut.kernel.7 +#usr/share/man/man7/dracut.modules.7 +#usr/share/man/man8/dracut-catimages.8 +#usr/share/man/man8/dracut-cmdline.service.8 +#usr/share/man/man8/dracut-initqueue.service.8 +#usr/share/man/man8/dracut-mount.service.8 +#usr/share/man/man8/dracut-pre-mount.service.8 +#usr/share/man/man8/dracut-pre-pivot.service.8 +#usr/share/man/man8/dracut-pre-trigger.service.8 +#usr/share/man/man8/dracut-pre-udev.service.8 +#usr/share/man/man8/dracut-shutdown.service.8 +#usr/share/man/man8/dracut.8 +#usr/share/man/man8/mkinitrd-suse.8 +#usr/share/man/man8/mkinitrd.8 diff --git a/config/rootfiles/common/i586/dracut b/config/rootfiles/common/i586/dracut deleted file mode 100644 index 3250e0129..000000000 --- a/config/rootfiles/common/i586/dracut +++ /dev/null @@ -1,379 +0,0 @@ -#boot/initramfs-KVER-ipfire.img -etc/dracut.conf -etc/dracut.conf.d -#etc/dracut.conf.d/dracut.conf -usr/bin/dracut -usr/bin/dracut-catimages -#usr/bin/lsinitrd -#usr/bin/mkinitrd -usr/lib/dracut -#usr/lib/dracut/dracut-functions -#usr/lib/dracut/dracut-functions.sh -#usr/lib/dracut/dracut-initramfs-restore -#usr/lib/dracut/dracut-install -#usr/lib/dracut/dracut-logger.sh -#usr/lib/dracut/dracut-version.sh -#usr/lib/dracut/dracut.conf.d -#usr/lib/dracut/modules.d -#usr/lib/dracut/modules.d/00bash -#usr/lib/dracut/modules.d/00bash/module-setup.sh -#usr/lib/dracut/modules.d/00bootchart -#usr/lib/dracut/modules.d/00bootchart/module-setup.sh -#usr/lib/dracut/modules.d/00dash -#usr/lib/dracut/modules.d/00dash/module-setup.sh -#usr/lib/dracut/modules.d/00systemd-bootchart -#usr/lib/dracut/modules.d/00systemd-bootchart/module-setup.sh -#usr/lib/dracut/modules.d/01fips -#usr/lib/dracut/modules.d/01fips/fips-boot.sh -#usr/lib/dracut/modules.d/01fips/fips-noboot.sh -#usr/lib/dracut/modules.d/01fips/fips.sh -#usr/lib/dracut/modules.d/01fips/module-setup.sh -#usr/lib/dracut/modules.d/02caps -#usr/lib/dracut/modules.d/02caps/README -#usr/lib/dracut/modules.d/02caps/caps.sh -#usr/lib/dracut/modules.d/02caps/module-setup.sh -#usr/lib/dracut/modules.d/02fips-aesni -#usr/lib/dracut/modules.d/02fips-aesni/module-setup.sh -#usr/lib/dracut/modules.d/03modsign -#usr/lib/dracut/modules.d/03modsign/load-modsign-keys.sh -#usr/lib/dracut/modules.d/03modsign/module-setup.sh -#usr/lib/dracut/modules.d/03rescue -#usr/lib/dracut/modules.d/03rescue/module-setup.sh -#usr/lib/dracut/modules.d/04watchdog -#usr/lib/dracut/modules.d/04watchdog/module-setup.sh -#usr/lib/dracut/modules.d/04watchdog/watchdog-stop.sh -#usr/lib/dracut/modules.d/04watchdog/watchdog.sh -#usr/lib/dracut/modules.d/05busybox -#usr/lib/dracut/modules.d/05busybox/module-setup.sh -#usr/lib/dracut/modules.d/10i18n -#usr/lib/dracut/modules.d/10i18n/10-console.rules -#usr/lib/dracut/modules.d/10i18n/README -#usr/lib/dracut/modules.d/10i18n/console_init.sh -#usr/lib/dracut/modules.d/10i18n/module-setup.sh -#usr/lib/dracut/modules.d/10i18n/parse-i18n.sh -#usr/lib/dracut/modules.d/30convertfs -#usr/lib/dracut/modules.d/30convertfs/convertfs.sh -#usr/lib/dracut/modules.d/30convertfs/do-convertfs.sh -#usr/lib/dracut/modules.d/30convertfs/module-setup.sh -#usr/lib/dracut/modules.d/40network -#usr/lib/dracut/modules.d/40network/dhclient-script.sh -#usr/lib/dracut/modules.d/40network/dhclient.conf -#usr/lib/dracut/modules.d/40network/dhcp-root.sh -#usr/lib/dracut/modules.d/40network/ifname-genrules.sh -#usr/lib/dracut/modules.d/40network/ifup.sh -#usr/lib/dracut/modules.d/40network/kill-dhclient.sh -#usr/lib/dracut/modules.d/40network/module-setup.sh -#usr/lib/dracut/modules.d/40network/net-genrules.sh -#usr/lib/dracut/modules.d/40network/net-lib.sh -#usr/lib/dracut/modules.d/40network/netroot.sh -#usr/lib/dracut/modules.d/40network/parse-bond.sh -#usr/lib/dracut/modules.d/40network/parse-bridge.sh -#usr/lib/dracut/modules.d/40network/parse-ibft.sh -#usr/lib/dracut/modules.d/40network/parse-ifname.sh -#usr/lib/dracut/modules.d/40network/parse-ip-opts.sh -#usr/lib/dracut/modules.d/40network/parse-team.sh -#usr/lib/dracut/modules.d/40network/parse-vlan.sh -#usr/lib/dracut/modules.d/45ifcfg -#usr/lib/dracut/modules.d/45ifcfg/module-setup.sh -#usr/lib/dracut/modules.d/45ifcfg/write-ifcfg.sh -#usr/lib/dracut/modules.d/45url-lib -#usr/lib/dracut/modules.d/45url-lib/module-setup.sh -#usr/lib/dracut/modules.d/45url-lib/url-lib.sh -#usr/lib/dracut/modules.d/50drm -#usr/lib/dracut/modules.d/50drm/module-setup.sh -#usr/lib/dracut/modules.d/50gensplash -#usr/lib/dracut/modules.d/50gensplash/README -#usr/lib/dracut/modules.d/50gensplash/gensplash-emergency.sh -#usr/lib/dracut/modules.d/50gensplash/gensplash-newroot.sh -#usr/lib/dracut/modules.d/50gensplash/gensplash-pretrigger.sh -#usr/lib/dracut/modules.d/50gensplash/module-setup.sh -#usr/lib/dracut/modules.d/50plymouth -#usr/lib/dracut/modules.d/50plymouth/module-setup.sh -#usr/lib/dracut/modules.d/50plymouth/plymouth-emergency.sh -#usr/lib/dracut/modules.d/50plymouth/plymouth-newroot.sh -#usr/lib/dracut/modules.d/50plymouth/plymouth-populate-initrd.sh -#usr/lib/dracut/modules.d/50plymouth/plymouth-pretrigger.sh -#usr/lib/dracut/modules.d/80cms -#usr/lib/dracut/modules.d/80cms/cms-write-ifcfg.sh -#usr/lib/dracut/modules.d/80cms/cmsifup.sh -#usr/lib/dracut/modules.d/80cms/cmssetup.sh -#usr/lib/dracut/modules.d/80cms/module-setup.sh -#usr/lib/dracut/modules.d/90btrfs -#usr/lib/dracut/modules.d/90btrfs/80-btrfs.rules -#usr/lib/dracut/modules.d/90btrfs/btrfs_device_ready.sh -#usr/lib/dracut/modules.d/90btrfs/btrfs_finished.sh -#usr/lib/dracut/modules.d/90btrfs/btrfs_timeout.sh -#usr/lib/dracut/modules.d/90btrfs/module-setup.sh -#usr/lib/dracut/modules.d/90crypt -#usr/lib/dracut/modules.d/90crypt/crypt-cleanup.sh -#usr/lib/dracut/modules.d/90crypt/crypt-lib.sh -#usr/lib/dracut/modules.d/90crypt/crypt-run-generator.sh -#usr/lib/dracut/modules.d/90crypt/cryptroot-ask.sh -#usr/lib/dracut/modules.d/90crypt/module-setup.sh -#usr/lib/dracut/modules.d/90crypt/parse-crypt.sh -#usr/lib/dracut/modules.d/90crypt/parse-keydev.sh -#usr/lib/dracut/modules.d/90crypt/probe-keydev.sh -#usr/lib/dracut/modules.d/90dm -#usr/lib/dracut/modules.d/90dm/11-dm.rules -#usr/lib/dracut/modules.d/90dm/59-persistent-storage-dm.rules -#usr/lib/dracut/modules.d/90dm/dm-pre-udev.sh -#usr/lib/dracut/modules.d/90dm/dm-shutdown.sh -#usr/lib/dracut/modules.d/90dm/module-setup.sh -#usr/lib/dracut/modules.d/90dmraid -#usr/lib/dracut/modules.d/90dmraid/61-dmraid-imsm.rules -#usr/lib/dracut/modules.d/90dmraid/dmraid.sh -#usr/lib/dracut/modules.d/90dmraid/module-setup.sh -#usr/lib/dracut/modules.d/90dmraid/parse-dm.sh -#usr/lib/dracut/modules.d/90dmsquash-live -#usr/lib/dracut/modules.d/90dmsquash-live/apply-live-updates.sh -#usr/lib/dracut/modules.d/90dmsquash-live/checkisomd5@.service -#usr/lib/dracut/modules.d/90dmsquash-live/dmsquash-live-genrules.sh -#usr/lib/dracut/modules.d/90dmsquash-live/dmsquash-live-root.sh -#usr/lib/dracut/modules.d/90dmsquash-live/dmsquash-liveiso-genrules.sh -#usr/lib/dracut/modules.d/90dmsquash-live/iso-scan.sh -#usr/lib/dracut/modules.d/90dmsquash-live/module-setup.sh -#usr/lib/dracut/modules.d/90dmsquash-live/parse-dmsquash-live.sh -#usr/lib/dracut/modules.d/90dmsquash-live/parse-iso-scan.sh -#usr/lib/dracut/modules.d/90kernel-modules -#usr/lib/dracut/modules.d/90kernel-modules/insmodpost.sh -#usr/lib/dracut/modules.d/90kernel-modules/module-setup.sh -#usr/lib/dracut/modules.d/90kernel-modules/parse-kernel.sh -#usr/lib/dracut/modules.d/90livenet -#usr/lib/dracut/modules.d/90livenet/fetch-liveupdate.sh -#usr/lib/dracut/modules.d/90livenet/livenetroot.sh -#usr/lib/dracut/modules.d/90livenet/module-setup.sh -#usr/lib/dracut/modules.d/90livenet/parse-livenet.sh -#usr/lib/dracut/modules.d/90lvm -#usr/lib/dracut/modules.d/90lvm/64-lvm.rules -#usr/lib/dracut/modules.d/90lvm/lvm_scan.sh -#usr/lib/dracut/modules.d/90lvm/module-setup.sh -#usr/lib/dracut/modules.d/90lvm/parse-lvm.sh -#usr/lib/dracut/modules.d/90mdraid -#usr/lib/dracut/modules.d/90mdraid/59-persistent-storage-md.rules -#usr/lib/dracut/modules.d/90mdraid/65-md-incremental-imsm.rules -#usr/lib/dracut/modules.d/90mdraid/md-noddf.sh -#usr/lib/dracut/modules.d/90mdraid/md-noimsm.sh -#usr/lib/dracut/modules.d/90mdraid/md-shutdown.sh -#usr/lib/dracut/modules.d/90mdraid/mdmon-pre-shutdown.sh -#usr/lib/dracut/modules.d/90mdraid/mdmon-pre-udev.sh -#usr/lib/dracut/modules.d/90mdraid/mdraid-cleanup.sh -#usr/lib/dracut/modules.d/90mdraid/mdraid-needshutdown.sh -#usr/lib/dracut/modules.d/90mdraid/mdraid-waitclean.sh -#usr/lib/dracut/modules.d/90mdraid/mdraid_start.sh -#usr/lib/dracut/modules.d/90mdraid/module-setup.sh -#usr/lib/dracut/modules.d/90mdraid/parse-md.sh -#usr/lib/dracut/modules.d/90multipath -#usr/lib/dracut/modules.d/90multipath/module-setup.sh -#usr/lib/dracut/modules.d/90multipath/multipathd-needshutdown.sh -#usr/lib/dracut/modules.d/90multipath/multipathd-stop.sh -#usr/lib/dracut/modules.d/90multipath/multipathd.sh -#usr/lib/dracut/modules.d/90qemu -#usr/lib/dracut/modules.d/90qemu-net -#usr/lib/dracut/modules.d/90qemu-net/module-setup.sh -#usr/lib/dracut/modules.d/90qemu/module-setup.sh -#usr/lib/dracut/modules.d/91crypt-gpg -#usr/lib/dracut/modules.d/91crypt-gpg/crypt-gpg-lib.sh -#usr/lib/dracut/modules.d/91crypt-gpg/module-setup.sh -#usr/lib/dracut/modules.d/91crypt-loop -#usr/lib/dracut/modules.d/91crypt-loop/crypt-loop-lib.sh -#usr/lib/dracut/modules.d/91crypt-loop/module-setup.sh -#usr/lib/dracut/modules.d/95cifs -#usr/lib/dracut/modules.d/95cifs/cifs-lib.sh -#usr/lib/dracut/modules.d/95cifs/cifsroot.sh -#usr/lib/dracut/modules.d/95cifs/module-setup.sh -#usr/lib/dracut/modules.d/95cifs/parse-cifsroot.sh -#usr/lib/dracut/modules.d/95dasd -#usr/lib/dracut/modules.d/95dasd/module-setup.sh -#usr/lib/dracut/modules.d/95dasd/parse-dasd.sh -#usr/lib/dracut/modules.d/95dasd_mod -#usr/lib/dracut/modules.d/95dasd_mod/module-setup.sh -#usr/lib/dracut/modules.d/95dasd_mod/parse-dasd-mod.sh -#usr/lib/dracut/modules.d/95dasd_rules -#usr/lib/dracut/modules.d/95dasd_rules/module-setup.sh -#usr/lib/dracut/modules.d/95dasd_rules/parse-dasd.sh -#usr/lib/dracut/modules.d/95debug -#usr/lib/dracut/modules.d/95debug/module-setup.sh -#usr/lib/dracut/modules.d/95fcoe -#usr/lib/dracut/modules.d/95fcoe-uefi -#usr/lib/dracut/modules.d/95fcoe-uefi/module-setup.sh -#usr/lib/dracut/modules.d/95fcoe-uefi/parse-uefifcoe.sh -#usr/lib/dracut/modules.d/95fcoe/fcoe-edd.sh -#usr/lib/dracut/modules.d/95fcoe/fcoe-genrules.sh -#usr/lib/dracut/modules.d/95fcoe/fcoe-up.sh -#usr/lib/dracut/modules.d/95fcoe/module-setup.sh -#usr/lib/dracut/modules.d/95fcoe/parse-fcoe.sh -#usr/lib/dracut/modules.d/95fstab-sys -#usr/lib/dracut/modules.d/95fstab-sys/module-setup.sh -#usr/lib/dracut/modules.d/95fstab-sys/mount-sys.sh -#usr/lib/dracut/modules.d/95iscsi -#usr/lib/dracut/modules.d/95iscsi/cleanup-iscsi.sh -#usr/lib/dracut/modules.d/95iscsi/iscsiroot.sh -#usr/lib/dracut/modules.d/95iscsi/module-setup.sh -#usr/lib/dracut/modules.d/95iscsi/mount-lun.sh -#usr/lib/dracut/modules.d/95iscsi/parse-iscsiroot.sh -#usr/lib/dracut/modules.d/95nbd -#usr/lib/dracut/modules.d/95nbd/module-setup.sh -#usr/lib/dracut/modules.d/95nbd/nbdroot.sh -#usr/lib/dracut/modules.d/95nbd/parse-nbdroot.sh -#usr/lib/dracut/modules.d/95nfs -#usr/lib/dracut/modules.d/95nfs/module-setup.sh -#usr/lib/dracut/modules.d/95nfs/nfs-lib.sh -#usr/lib/dracut/modules.d/95nfs/nfs-start-rpc.sh -#usr/lib/dracut/modules.d/95nfs/nfsroot-cleanup.sh -#usr/lib/dracut/modules.d/95nfs/nfsroot.sh -#usr/lib/dracut/modules.d/95nfs/parse-nfsroot.sh -#usr/lib/dracut/modules.d/95resume -#usr/lib/dracut/modules.d/95resume/module-setup.sh -#usr/lib/dracut/modules.d/95resume/parse-resume.sh -#usr/lib/dracut/modules.d/95resume/resume.sh -#usr/lib/dracut/modules.d/95rootfs-block -#usr/lib/dracut/modules.d/95rootfs-block/block-genrules.sh -#usr/lib/dracut/modules.d/95rootfs-block/module-setup.sh -#usr/lib/dracut/modules.d/95rootfs-block/mount-root.sh -#usr/lib/dracut/modules.d/95rootfs-block/parse-block.sh -#usr/lib/dracut/modules.d/95rootfs-block/rootfallback.sh -#usr/lib/dracut/modules.d/95ssh-client -#usr/lib/dracut/modules.d/95ssh-client/module-setup.sh -#usr/lib/dracut/modules.d/95terminfo -#usr/lib/dracut/modules.d/95terminfo/module-setup.sh -#usr/lib/dracut/modules.d/95udev-rules -#usr/lib/dracut/modules.d/95udev-rules/59-persistent-storage.rules -#usr/lib/dracut/modules.d/95udev-rules/61-persistent-storage.rules -#usr/lib/dracut/modules.d/95udev-rules/load-modules.sh -#usr/lib/dracut/modules.d/95udev-rules/module-setup.sh -#usr/lib/dracut/modules.d/95virtfs -#usr/lib/dracut/modules.d/95virtfs/module-setup.sh -#usr/lib/dracut/modules.d/95virtfs/mount-virtfs.sh -#usr/lib/dracut/modules.d/95virtfs/parse-virtfs.sh -#usr/lib/dracut/modules.d/95zfcp -#usr/lib/dracut/modules.d/95zfcp/module-setup.sh -#usr/lib/dracut/modules.d/95zfcp/parse-zfcp.sh -#usr/lib/dracut/modules.d/95zfcp_rules -#usr/lib/dracut/modules.d/95zfcp_rules/module-setup.sh -#usr/lib/dracut/modules.d/95zfcp_rules/parse-zfcp.sh -#usr/lib/dracut/modules.d/95znet -#usr/lib/dracut/modules.d/95znet/module-setup.sh -#usr/lib/dracut/modules.d/95znet/parse-ccw.sh -#usr/lib/dracut/modules.d/96securityfs -#usr/lib/dracut/modules.d/96securityfs/module-setup.sh -#usr/lib/dracut/modules.d/96securityfs/securityfs.sh -#usr/lib/dracut/modules.d/97biosdevname -#usr/lib/dracut/modules.d/97biosdevname/module-setup.sh -#usr/lib/dracut/modules.d/97biosdevname/parse-biosdevname.sh -#usr/lib/dracut/modules.d/97masterkey -#usr/lib/dracut/modules.d/97masterkey/README -#usr/lib/dracut/modules.d/97masterkey/masterkey.sh -#usr/lib/dracut/modules.d/97masterkey/module-setup.sh -#usr/lib/dracut/modules.d/98ecryptfs -#usr/lib/dracut/modules.d/98ecryptfs/README -#usr/lib/dracut/modules.d/98ecryptfs/ecryptfs-mount.sh -#usr/lib/dracut/modules.d/98ecryptfs/module-setup.sh -#usr/lib/dracut/modules.d/98integrity -#usr/lib/dracut/modules.d/98integrity/README -#usr/lib/dracut/modules.d/98integrity/evm-enable.sh -#usr/lib/dracut/modules.d/98integrity/ima-policy-load.sh -#usr/lib/dracut/modules.d/98integrity/module-setup.sh -#usr/lib/dracut/modules.d/98pollcdrom -#usr/lib/dracut/modules.d/98pollcdrom/module-setup.sh -#usr/lib/dracut/modules.d/98pollcdrom/pollcdrom.sh -#usr/lib/dracut/modules.d/98selinux -#usr/lib/dracut/modules.d/98selinux/module-setup.sh -#usr/lib/dracut/modules.d/98selinux/selinux-loadpolicy.sh -#usr/lib/dracut/modules.d/98syslog -#usr/lib/dracut/modules.d/98syslog/README -#usr/lib/dracut/modules.d/98syslog/module-setup.sh -#usr/lib/dracut/modules.d/98syslog/parse-syslog-opts.sh -#usr/lib/dracut/modules.d/98syslog/rsyslog.conf -#usr/lib/dracut/modules.d/98syslog/rsyslogd-start.sh -#usr/lib/dracut/modules.d/98syslog/rsyslogd-stop.sh -#usr/lib/dracut/modules.d/98syslog/syslog-cleanup.sh -#usr/lib/dracut/modules.d/98syslog/syslog-genrules.sh -#usr/lib/dracut/modules.d/98systemd -#usr/lib/dracut/modules.d/98systemd/dracut-cmdline-ask.service -#usr/lib/dracut/modules.d/98systemd/dracut-cmdline-ask.sh -#usr/lib/dracut/modules.d/98systemd/dracut-cmdline.service -#usr/lib/dracut/modules.d/98systemd/dracut-cmdline.service.8 -#usr/lib/dracut/modules.d/98systemd/dracut-cmdline.service.8.asc -#usr/lib/dracut/modules.d/98systemd/dracut-cmdline.sh -#usr/lib/dracut/modules.d/98systemd/dracut-emergency.service -#usr/lib/dracut/modules.d/98systemd/dracut-emergency.sh -#usr/lib/dracut/modules.d/98systemd/dracut-initqueue.service -#usr/lib/dracut/modules.d/98systemd/dracut-initqueue.service.8 -#usr/lib/dracut/modules.d/98systemd/dracut-initqueue.service.8.asc -#usr/lib/dracut/modules.d/98systemd/dracut-initqueue.sh -#usr/lib/dracut/modules.d/98systemd/dracut-mount.service -#usr/lib/dracut/modules.d/98systemd/dracut-mount.service.8 -#usr/lib/dracut/modules.d/98systemd/dracut-mount.service.8.asc -#usr/lib/dracut/modules.d/98systemd/dracut-mount.sh -#usr/lib/dracut/modules.d/98systemd/dracut-pre-mount.service -#usr/lib/dracut/modules.d/98systemd/dracut-pre-mount.service.8 -#usr/lib/dracut/modules.d/98systemd/dracut-pre-mount.service.8.asc -#usr/lib/dracut/modules.d/98systemd/dracut-pre-mount.sh -#usr/lib/dracut/modules.d/98systemd/dracut-pre-pivot.service -#usr/lib/dracut/modules.d/98systemd/dracut-pre-pivot.service.8 -#usr/lib/dracut/modules.d/98systemd/dracut-pre-pivot.service.8.asc -#usr/lib/dracut/modules.d/98systemd/dracut-pre-pivot.sh -#usr/lib/dracut/modules.d/98systemd/dracut-pre-trigger.service -#usr/lib/dracut/modules.d/98systemd/dracut-pre-trigger.service.8 -#usr/lib/dracut/modules.d/98systemd/dracut-pre-trigger.service.8.asc -#usr/lib/dracut/modules.d/98systemd/dracut-pre-trigger.sh -#usr/lib/dracut/modules.d/98systemd/dracut-pre-udev.service -#usr/lib/dracut/modules.d/98systemd/dracut-pre-udev.service.8 -#usr/lib/dracut/modules.d/98systemd/dracut-pre-udev.service.8.asc -#usr/lib/dracut/modules.d/98systemd/dracut-pre-udev.sh -#usr/lib/dracut/modules.d/98systemd/dracut-shutdown.service -#usr/lib/dracut/modules.d/98systemd/dracut-shutdown.service.8 -#usr/lib/dracut/modules.d/98systemd/dracut-shutdown.service.8.asc -#usr/lib/dracut/modules.d/98systemd/emergency.service -#usr/lib/dracut/modules.d/98systemd/initrd.target -#usr/lib/dracut/modules.d/98systemd/module-setup.sh -#usr/lib/dracut/modules.d/98systemd/rescue.service -#usr/lib/dracut/modules.d/98systemd/rootfs-generator.sh -#usr/lib/dracut/modules.d/98usrmount -#usr/lib/dracut/modules.d/98usrmount/module-setup.sh -#usr/lib/dracut/modules.d/98usrmount/mount-usr.sh -#usr/lib/dracut/modules.d/99base -#usr/lib/dracut/modules.d/99base/dracut-lib.sh -#usr/lib/dracut/modules.d/99base/init.sh -#usr/lib/dracut/modules.d/99base/initqueue.sh -#usr/lib/dracut/modules.d/99base/loginit.sh -#usr/lib/dracut/modules.d/99base/module-setup.sh -#usr/lib/dracut/modules.d/99base/parse-root-opts.sh -#usr/lib/dracut/modules.d/99base/rdsosreport.sh -#usr/lib/dracut/modules.d/99fs-lib -#usr/lib/dracut/modules.d/99fs-lib/fs-lib.sh -#usr/lib/dracut/modules.d/99fs-lib/module-setup.sh -#usr/lib/dracut/modules.d/99img-lib -#usr/lib/dracut/modules.d/99img-lib/img-lib.sh -#usr/lib/dracut/modules.d/99img-lib/module-setup.sh -#usr/lib/dracut/modules.d/99shutdown -#usr/lib/dracut/modules.d/99shutdown/module-setup.sh -#usr/lib/dracut/modules.d/99shutdown/shutdown.sh -#usr/lib/dracut/modules.d/99uefi-lib -#usr/lib/dracut/modules.d/99uefi-lib/module-setup.sh -#usr/lib/dracut/modules.d/99uefi-lib/uefi-lib.sh -#usr/lib/dracut/skipcpio -#usr/lib/kernel -#usr/lib/kernel/install.d -#usr/lib/kernel/install.d/50-dracut.install -#usr/lib/kernel/install.d/51-dracut-rescue.install -#usr/share/bash-completion/completions/dracut -#usr/share/bash-completion/completions/lsinitrd -#usr/share/man/man1/lsinitrd.1 -#usr/share/man/man5/dracut.conf.5 -#usr/share/man/man7/dracut.bootup.7 -#usr/share/man/man7/dracut.cmdline.7 -#usr/share/man/man7/dracut.kernel.7 -#usr/share/man/man7/dracut.modules.7 -#usr/share/man/man8/dracut-catimages.8 -#usr/share/man/man8/dracut-cmdline.service.8 -#usr/share/man/man8/dracut-initqueue.service.8 -#usr/share/man/man8/dracut-mount.service.8 -#usr/share/man/man8/dracut-pre-mount.service.8 -#usr/share/man/man8/dracut-pre-pivot.service.8 -#usr/share/man/man8/dracut-pre-trigger.service.8 -#usr/share/man/man8/dracut-pre-udev.service.8 -#usr/share/man/man8/dracut-shutdown.service.8 -#usr/share/man/man8/dracut.8 -#usr/share/man/man8/mkinitrd-suse.8 -#usr/share/man/man8/mkinitrd.8 diff --git a/config/rootfiles/common/i586/linux b/config/rootfiles/common/i586/linux index f005024e2..e6ce91336 100644 --- a/config/rootfiles/common/i586/linux +++ b/config/rootfiles/common/i586/linux @@ -1,5 +1,6 @@ boot/System.map-KVER-ipfire boot/config-KVER-ipfire +boot/initramfs-KVER-ipfire.img boot/vmlinuz-KVER-ipfire etc/modprobe.d/framebuffer.conf etc/modprobe.d/ipv6.conf diff --git a/config/rootfiles/common/installer b/config/rootfiles/common/installer new file mode 100644 index 000000000..2c93f8999 --- /dev/null +++ b/config/rootfiles/common/installer @@ -0,0 +1,9 @@ +#usr/bin/downloadsource.sh +#usr/bin/installer +#usr/bin/mountdest.sh +#usr/bin/probenic.sh +#usr/lib/dracut/modules.d/99installer +#usr/lib/dracut/modules.d/99installer/70-dhcpcd.exe +#usr/lib/dracut/modules.d/99installer/fake-root.sh +#usr/lib/dracut/modules.d/99installer/module-setup.sh +#usr/lib/dracut/modules.d/99installer/run-installer.sh diff --git a/config/rootfiles/packages/linux-pae b/config/rootfiles/packages/linux-pae index 8227faaf7..60e0403d0 100644 --- a/config/rootfiles/packages/linux-pae +++ b/config/rootfiles/packages/linux-pae @@ -1,5 +1,6 @@ boot/System.map-KVER-ipfire-pae boot/config-KVER-ipfire-pae +#boot/initramfs-KVER-ipfire-pae.img boot/vmlinuz-KVER-ipfire-pae #lib/modules lib/modules/KVER-ipfire-pae From e544014348c27e4ab7c8b6e4f208ff4b21eaa2d3 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Mon, 28 Jul 2014 19:59:18 +0200 Subject: [PATCH 049/297] kernel: update to 3.10.50. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index f7523c2d6..c60d19805 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.49 +VER = 3.10.50 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.49-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.50-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 9774e12764e740d49c80eda77d0ef3eb +$(DL_FILE)_MD5 = d63e68805a7df388d27eb686beff8f01 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = e0592f7dc7e3ff177c79bba1df6736bc +$(GRS_PATCHES)_MD5 = 10f332348f61e2275a19a8c3087adceb install : $(TARGET) From 765b17bc52643f84c03b1507411e1d2c394c141d Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 30 Jul 2014 22:02:35 +0200 Subject: [PATCH 050/297] libsmooth: Make it its own package. --- .../libsmooth/makelangs.pl => lfs/libsmooth | 46 +- make.sh | 1 + src/install+setup/libsmooth/langs.h.temp | 15 - src/install+setup/libsmooth/libsmooth.h | 119 --- src/install+setup/libsmooth/netstuff.c | 776 ------------------ src/{install+setup => }/libsmooth/Makefile | 0 src/libsmooth/Makefile.am | 81 ++ src/libsmooth/autogen.sh | 3 + src/libsmooth/configure.ac | 58 ++ src/libsmooth/libsmooth.h | 68 ++ src/libsmooth/libsmooth.pc.in | 18 + src/libsmooth/m4/attributes.m4 | 288 +++++++ src/{install+setup => }/libsmooth/main.c | 89 +- src/{install+setup => }/libsmooth/varval.c | 0 14 files changed, 583 insertions(+), 979 deletions(-) rename src/install+setup/libsmooth/makelangs.pl => lfs/libsmooth (60%) delete mode 100644 src/install+setup/libsmooth/langs.h.temp delete mode 100644 src/install+setup/libsmooth/libsmooth.h delete mode 100644 src/install+setup/libsmooth/netstuff.c rename src/{install+setup => }/libsmooth/Makefile (100%) create mode 100644 src/libsmooth/Makefile.am create mode 100755 src/libsmooth/autogen.sh create mode 100644 src/libsmooth/configure.ac create mode 100644 src/libsmooth/libsmooth.h create mode 100644 src/libsmooth/libsmooth.pc.in create mode 100644 src/libsmooth/m4/attributes.m4 rename src/{install+setup => }/libsmooth/main.c (78%) rename src/{install+setup => }/libsmooth/varval.c (100%) diff --git a/src/install+setup/libsmooth/makelangs.pl b/lfs/libsmooth similarity index 60% rename from src/install+setup/libsmooth/makelangs.pl rename to lfs/libsmooth index 6fc2098d4..0f7a13537 100644 --- a/src/install+setup/libsmooth/makelangs.pl +++ b/lfs/libsmooth @@ -1,4 +1,3 @@ -#!/usr/bin/perl ############################################################################### # # # IPFire.org - A linux based firewall # @@ -19,9 +18,42 @@ # # ############################################################################### -while (<>) -{ - if (/\/\* (TR_[A-Z0-9_]*)/) { - print "\t$1,\n"; } -} -print "};\n"; +############################################################################### +# Definitions +############################################################################### + +include Config + +VER = ipfire + +THISAPP = libsmooth +DIR_APP = $(DIR_SRC)/$(THISAPP) +TARGET = $(DIR_INFO)/$(THISAPP) + +############################################################################### +# Top-level Rules +############################################################################### + +install : $(TARGET) + +check : + +download : + +md5 : + +############################################################################### +# Installation Details +############################################################################### + +$(TARGET) : + @$(PREBUILD) + @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/libsmooth/* $(DIR_APP) + + cd $(DIR_APP) && ./autogen.sh + cd $(DIR_APP) && ./configure --prefix=/usr + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install + + @rm -rf $(DIR_APP) + @$(POSTBUILD) diff --git a/make.sh b/make.sh index 09419201e..2fe99bb3b 100755 --- a/make.sh +++ b/make.sh @@ -383,6 +383,7 @@ buildipfire() { LOGFILE="$BASEDIR/log/_build.ipfire.log" export LOGFILE ipfiremake configroot + ipfiremake libsmooth ipfiremake backup ipfiremake bind ipfiremake dhcp diff --git a/src/install+setup/libsmooth/langs.h.temp b/src/install+setup/libsmooth/langs.h.temp deleted file mode 100644 index 16d45d080..000000000 --- a/src/install+setup/libsmooth/langs.h.temp +++ /dev/null @@ -1,15 +0,0 @@ -/* SmoothWall libsmooth. - * - * This program is distributed under the terms of the GNU General Public - * Licence. See the file COPYING for details. - * - * (c) Lawrence Manning, 2001 - * This is a template (basically just a header). langs.h is generated via - * the Makefile, from lang_en.c. - * - * $Id: langs.h.temp,v 1.4 2003/12/11 11:25:53 riddles Exp $ - * - */ - -enum trstrings -{ diff --git a/src/install+setup/libsmooth/libsmooth.h b/src/install+setup/libsmooth/libsmooth.h deleted file mode 100644 index fc166b221..000000000 --- a/src/install+setup/libsmooth/libsmooth.h +++ /dev/null @@ -1,119 +0,0 @@ -/* SmoothWall libsmooth. - * - * This program is distributed under the terms of the GNU General Public - * Licence. See the file COPYING for details. - * - * (c) Lawrence Manning, 2001 - * Contains prototypes for library functions. - * - */ - -#ifndef ___LIBSMOOTH_H -#define ___LIBSMOOTH_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include "langs.h" - -#define STRING_SIZE 1024 - -#define ADDRESS 0 -#define NETADDRESS 1 -#define NETMASK 2 -#define DHCP 3 -#define NETCHANGE_TOTAL 4 - -#define SCANNED_NICS "/var/ipfire/ethernet/scanned_nics" -#define SYSDIR "/sys/class/net" - -#define _GREEN_CARD_ 0 -#define _RED_CARD_ 1 -#define _ORANGE_CARD_ 2 -#define _BLUE_CARD_ 3 - -struct keyvalue -{ - char key[STRING_SIZE]; - char value[STRING_SIZE]; - struct keyvalue *next; -}; -struct nic -{ - char driver[80]; - char description[256]; - char macaddr[20]; - char nic[20]; -}; - -struct knic -{ - char driver[80]; - char description[256]; - char macaddr[20]; - char colour[20]; -}; - - -/* libsmooth.c */ -void reboot(void); -void stripnl(char *s); -int mysystem(char *command); -void errorbox(char *message); -int statuswindowscroll(int width, int height, char *title, char *text, ...); -int disclaimerbox(char *message); -void statuswindow(int width, int height, char *title, char *text, ...); -int runcommandwithprogress(int width, int height, char *title, char *command, - int lines, char *text, ...); -int runcommandwithstatus(char *command, char *message); -int runhiddencommandwithstatus(char *command, char *message); -int checkformodule(char *module); -int replace(char filename1[], char *from, char *to); -char* get_version(void); - -/* netstuff.c */ -int changeaddress(struct keyvalue *kv, char *colour, int typeflag, - char *defaultdhcphostname); -int gettype(char *type); -int setnetaddress(struct keyvalue *kv, char *colour); -void networkdialogcallbacktype(newtComponent cm, void *data); -int interfacecheck(struct keyvalue *kv, char *colour); -int rename_nics(void); -int init_knics(void); -int create_udev(void); -int scan_network_cards(void); -int nicmenu(int colour); -int clear_card_entry(int cards); -int ask_clear_card_entry(int cards); -int manualdriver(char *driver, char *driveroptions); - -/* varval.c */ -struct keyvalue *initkeyvalues(void); -void freekeyvalues(struct keyvalue *head); -int readkeyvalues(struct keyvalue *head, char *filename); -int writekeyvalues(struct keyvalue *head, char *filename); -int findkey(struct keyvalue *head, char *key, char *value); -void appendkeyvalue(struct keyvalue *head, char *key, char *value); -void replacekeyvalue(struct keyvalue *head, char *key, char *value); - -#endif - diff --git a/src/install+setup/libsmooth/netstuff.c b/src/install+setup/libsmooth/netstuff.c deleted file mode 100644 index 8c6f3fa90..000000000 --- a/src/install+setup/libsmooth/netstuff.c +++ /dev/null @@ -1,776 +0,0 @@ -/* SmoothWall libsmooth. - * - * This program is distributed under the terms of the GNU General Public - * Licence. See the file COPYING for details. - * - * (c) Lawrence Manning, 2001 - * Contains network library functions. - * - */ - -#include "libsmooth.h" -#include - -extern FILE *flog; -extern char *mylog; - -extern char **ctr; - -extern struct nic nics[]; -extern struct knic knics[]; - -char *ucolourcard[] = { "GREEN", "RED", "ORANGE", "BLUE", NULL }; -char *lcolourcard[] = { "green", "red", "orange", "blue", NULL }; - -int scanned_nics_read_done = 0; - -newtComponent networkform; -newtComponent addressentry; -newtComponent netmaskentry; -newtComponent statictyperadio; -newtComponent dhcptyperadio; -newtComponent pppoetyperadio; -newtComponent dhcphostnameentry; -newtComponent dhcpforcemtuentry; - -/* acceptable character filter for IP and netmaks entry boxes */ -static int ip_input_filter(newtComponent entry, void * data, int ch, int cursor) -{ - if ((ch >= '0' && ch <= '9') || ch == '.' || ch == '\r' || ch >= NEWT_KEY_EXTRA_BASE) - return ch; - return 0; -} - -/* This is a groovie dialog for showing network info. Takes a keyvalue list, - * a colour and a dhcp flag. Shows the current settings, and rewrites them - * if necessary. DHCP flag sets wether to show the dhcp checkbox. */ -int changeaddress(struct keyvalue *kv, char *colour, int typeflag, - char *defaultdhcphostname) -{ - char *addressresult; - char *netmaskresult; - char *dhcphostnameresult; - char *dhcpforcemturesult; - struct newtExitStruct es; - newtComponent header; - newtComponent addresslabel; - newtComponent netmasklabel; - newtComponent dhcphostnamelabel; - newtComponent dhcpforcemtulabel; - newtComponent ok, cancel; - char message[1000]; - char temp[STRING_SIZE]; - char addressfield[STRING_SIZE]; - char netmaskfield[STRING_SIZE]; - char typefield[STRING_SIZE]; - char dhcphostnamefield[STRING_SIZE]; - char dhcpforcemtufield[STRING_SIZE]; - int error; - int result = 0; - char type[STRING_SIZE]; - int startstatictype = 0; - int startdhcptype = 0; - int startpppoetype = 0; - - /* Build some key strings. */ - sprintf(addressfield, "%s_ADDRESS", colour); - sprintf(netmaskfield, "%s_NETMASK", colour); - sprintf(typefield, "%s_TYPE", colour); - sprintf(dhcphostnamefield, "%s_DHCP_HOSTNAME", colour); - sprintf(dhcpforcemtufield, "%s_DHCP_FORCE_MTU", colour); - - sprintf(message, ctr[TR_INTERFACE], colour); - newtCenteredWindow(44, (typeflag ? 18 : 12), message); - - networkform = newtForm(NULL, NULL, 0); - - sprintf(message, ctr[TR_ENTER_THE_IP_ADDRESS_INFORMATION], colour); - header = newtTextboxReflowed(1, 1, message, 42, 0, 0, 0); - newtFormAddComponent(networkform, header); - - /* See if we need a dhcp checkbox. If we do, then we shift the contents - * of the window down two rows to make room. */ - if (typeflag) - { - strcpy(temp, "STATIC"); findkey(kv, typefield, temp); - if (strcmp(temp, "STATIC") == 0) startstatictype = 1; - if (strcmp(temp, "DHCP") == 0) startdhcptype = 1; - if (strcmp(temp, "PPPOE") == 0) startpppoetype = 1; - statictyperadio = newtRadiobutton(2, 4, ctr[TR_STATIC], startstatictype, NULL); - dhcptyperadio = newtRadiobutton(2, 5, ctr[TR_DHCP], startdhcptype, statictyperadio); - pppoetyperadio = newtRadiobutton(2, 6, ctr[TR_PPP_DIALUP], startpppoetype, dhcptyperadio); - newtFormAddComponents(networkform, statictyperadio, dhcptyperadio, - pppoetyperadio, NULL); - newtComponentAddCallback(statictyperadio, networkdialogcallbacktype, NULL); - newtComponentAddCallback(dhcptyperadio, networkdialogcallbacktype, NULL); - newtComponentAddCallback(pppoetyperadio, networkdialogcallbacktype, NULL); - dhcphostnamelabel = newtTextbox(2, 8, 18, 1, 0); - newtTextboxSetText(dhcphostnamelabel, ctr[TR_DHCP_HOSTNAME]); - dhcpforcemtulabel = newtTextbox(2, 9, 18, 1, 0); - newtTextboxSetText(dhcpforcemtulabel, ctr[TR_DHCP_FORCE_MTU]); - strcpy(temp, defaultdhcphostname); - findkey(kv, dhcphostnamefield, temp); - dhcphostnameentry = newtEntry(20, 8, temp, 20, &dhcphostnameresult, 0); - strcpy(temp, ""); - findkey(kv, dhcpforcemtufield, temp); - dhcpforcemtuentry = newtEntry(20, 9, temp, 20, &dhcpforcemturesult, 0); - newtFormAddComponent(networkform, dhcphostnamelabel); - newtFormAddComponent(networkform, dhcphostnameentry); - newtFormAddComponent(networkform, dhcpforcemtulabel); - newtFormAddComponent(networkform, dhcpforcemtuentry); - if (startdhcptype == 0) - { - newtEntrySetFlags(dhcphostnameentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); - newtEntrySetFlags(dhcpforcemtuentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); - } - } - /* Address */ - addresslabel = newtTextbox(2, (typeflag ? 11 : 4) + 0, 18, 1, 0); - newtTextboxSetText(addresslabel, ctr[TR_IP_ADDRESS_PROMPT]); - strcpy(temp, ""); - findkey(kv, addressfield, temp); - addressentry = newtEntry(20, (typeflag ? 11 : 4) + 0, temp, 20, &addressresult, 0); - newtEntrySetFilter(addressentry, ip_input_filter, NULL); - if (typeflag == 1 && startstatictype == 0) - newtEntrySetFlags(addressentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); - newtFormAddComponent(networkform, addresslabel); - newtFormAddComponent(networkform, addressentry); - - /* Netmask */ - netmasklabel = newtTextbox(2, (typeflag ? 11 : 4) + 1, 18, 1, 0); - newtTextboxSetText(netmasklabel, ctr[TR_NETMASK_PROMPT]); - strcpy(temp, "255.255.255.0"); findkey(kv, netmaskfield, temp); - netmaskentry = newtEntry(20, (typeflag ? 11 : 4) + 1, temp, 20, &netmaskresult, 0); - newtEntrySetFilter(netmaskentry, ip_input_filter, NULL); - if (typeflag == 1 && startstatictype == 0) - newtEntrySetFlags(netmaskentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); - - newtFormAddComponent(networkform, netmasklabel); - newtFormAddComponent(networkform, netmaskentry); - - /* Buttons. */ - ok = newtButton(8, (typeflag ? 14 : 7), ctr[TR_OK]); - cancel = newtButton(26, (typeflag ? 14 : 7), ctr[TR_CANCEL]); - - newtFormAddComponents(networkform, ok, cancel, NULL); - - newtRefresh(); - newtDrawForm(networkform); - - do - { - error = 0; - newtFormRun(networkform, &es); - - if (es.u.co == ok) - { - /* OK was pressed; verify the contents of each entry. */ - strcpy(message, ctr[TR_INVALID_FIELDS]); - - strcpy(type, "STATIC"); - if (typeflag) - gettype(type); - if (strcmp(type, "STATIC") == 0) - { - if (inet_addr(addressresult) == INADDR_NONE) - { - strcat(message, ctr[TR_IP_ADDRESS_CR]); - error = 1; - } - if (inet_addr(netmaskresult) == INADDR_NONE) - { - strcat(message, ctr[TR_NETWORK_MASK_CR]); - error = 1; - } - } - if (strcmp(type, "DHCP") == 0) - { - if (!strlen(dhcphostnameresult)) - { - strcat(message, ctr[TR_DHCP_HOSTNAME_CR]); - error = 1; - } - } - if (error) - errorbox(message); - else - { - /* No errors! Set new values, depending on dhcp flag etc. */ - if (typeflag) - { - replacekeyvalue(kv, dhcphostnamefield, dhcphostnameresult); - replacekeyvalue(kv, dhcpforcemtufield, dhcpforcemturesult); - if (strcmp(type, "STATIC") != 0) - { - replacekeyvalue(kv, addressfield, "0.0.0.0"); - replacekeyvalue(kv, netmaskfield, "0.0.0.0"); - } - else - { - replacekeyvalue(kv, addressfield, addressresult); - replacekeyvalue(kv, netmaskfield, netmaskresult); - } - replacekeyvalue(kv, typefield, type); - } - else - { - replacekeyvalue(kv, addressfield, addressresult); - replacekeyvalue(kv, netmaskfield, netmaskresult); - } - - setnetaddress(kv, colour); - result = 1; - } - } - /* Workaround for a bug that dhcp radiobutton also end the dialog at arm - */ - else { - if (es.u.co != cancel) { - error = 1; - } - } - } - while (error); - - newtFormDestroy(networkform); - newtPopWindow(); - - return result; -} - -/* for pppoe: return string thats type STATIC, DHCP or PPPOE */ -int gettype(char *type) -{ - newtComponent selected = newtRadioGetCurrent(statictyperadio); - - if (selected == statictyperadio) - strcpy(type, "STATIC"); - else if (selected == dhcptyperadio) - strcpy(type, "DHCP"); - else if (selected == pppoetyperadio) - strcpy(type, "PPPOE"); - else - strcpy(type, "ERROR"); - - return 0; -} - -/* 0.9.9: calculates broadcast too. */ -int setnetaddress(struct keyvalue *kv, char *colour) -{ - char addressfield[STRING_SIZE]; - char netaddressfield[STRING_SIZE]; - char netmaskfield[STRING_SIZE]; - char broadcastfield[STRING_SIZE]; - char address[STRING_SIZE]; - char netmask[STRING_SIZE]; - unsigned long int intaddress; - unsigned long int intnetaddress; - unsigned long int intnetmask; - unsigned long int intbroadcast; - struct in_addr temp; - char *netaddress; - char *broadcast; - - /* Build some key strings. */ - sprintf(addressfield, "%s_ADDRESS", colour); - sprintf(netaddressfield, "%s_NETADDRESS", colour); - sprintf(netmaskfield, "%s_NETMASK", colour); - sprintf(broadcastfield, "%s_BROADCAST", colour); - - strcpy(address, ""); findkey(kv, addressfield, address); - strcpy(netmask, ""); findkey(kv, netmaskfield, netmask); - - /* Calculate netaddress. Messy.. */ - intaddress = inet_addr(address); - intnetmask = inet_addr(netmask); - - intnetaddress = intaddress & intnetmask; - temp.s_addr = intnetaddress; - netaddress = inet_ntoa(temp); - - replacekeyvalue(kv, netaddressfield, netaddress); - - intbroadcast = intnetaddress | ~intnetmask; - temp.s_addr = intbroadcast; - broadcast = inet_ntoa(temp); - - replacekeyvalue(kv, broadcastfield, broadcast); - - return 1; -} - -/* Called when dhcp flag is toggled. Toggle disabled state of other 3 - * controls. */ -void networkdialogcallbacktype(newtComponent cm, void *data) -{ - char type[STRING_SIZE]; - - gettype(type); - - if (strcmp(type, "STATIC") != 0) - { - newtEntrySetFlags(addressentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); - newtEntrySetFlags(netmaskentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); - } - else - { - newtEntrySetFlags(addressentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); - newtEntrySetFlags(netmaskentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); - } - if (strcmp(type, "DHCP") == 0) - { - newtEntrySetFlags(dhcphostnameentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); - newtEntrySetFlags(dhcpforcemtuentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); - } - else - { - newtEntrySetFlags(dhcphostnameentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); - newtEntrySetFlags(dhcpforcemtuentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); - } - newtRefresh(); - newtDrawForm(networkform); -} - -int interfacecheck(struct keyvalue *kv, char *colour) -{ - char temp[STRING_SIZE]; - char colourfields[NETCHANGE_TOTAL][STRING_SIZE]; - int c; - - sprintf(colourfields[ADDRESS], "%s_ADDRESS", colour); - sprintf(colourfields[NETADDRESS], "%s_NETADDRESS", colour); - sprintf(colourfields[NETMASK], "%s_NETMASK", colour); - - for (c = 0; c < 3; c++) - { - strcpy(temp, ""); findkey(kv, colourfields[c], temp); - if (!(strlen(temp))) return 0; - } - return 1; -} - -/* Funky routine for loading all drivers (cept those are already loaded.). */ -int probecards(char *driver, char *driveroptions ) -{ - return 0; -} - -int get_knic(int card) //returns "0" for zero cards or error and "1" card is found. -{ - struct keyvalue *kv = initkeyvalues(); - char temp[STRING_SIZE], searchstr[STRING_SIZE]; - int ret_value; - - if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) - { - freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); - return 0; - } - - sprintf(searchstr, "%s_MACADDR", ucolourcard[card]); - strcpy(temp, ""); findkey(kv, searchstr, temp); - if (strlen(temp)) { - strcpy(knics[ card ].macaddr, temp); - strcpy(knics[ card ].colour, ucolourcard[card]); - - sprintf(searchstr, "%s_DESCRIPTION", ucolourcard[card]); - findkey(kv, searchstr, temp); - strcpy(knics[ card ].description, temp); - - sprintf(searchstr, "%s_DRIVER", ucolourcard[card]); - findkey(kv, searchstr, temp); - strcpy(knics[ card ].driver, temp); - ret_value = 1; - } else { - strcpy(knics[ card ].description, ctr[TR_UNSET]); - ret_value = 0; - } - freekeyvalues(kv); - - return ret_value; -} - -int init_knics(void) -{ - int found = 0; - found += get_knic(_GREEN_CARD_); - found += get_knic(_RED_CARD_); - found += get_knic(_ORANGE_CARD_); - found += get_knic(_BLUE_CARD_); - - return found; -} - -int fmt_exists(const char *fname) { /* Check if it is any file or directory */ - struct stat st; - if (stat(fname, &st) == -1) return 0; - else return 1; -} - -int is_interface_up(char *card) { /* Check if the interface is UP */ - char temp[STRING_SIZE]; - - sprintf(temp,"ip link show dev %s | grep -q UP", card); - if (mysystem(temp)) return 0; else return 1; -} - -int rename_device(char *old_name, char *new_name) { - char temp[STRING_SIZE]; - - sprintf(temp,SYSDIR "/%s", old_name); - if (!(fmt_exists(temp))) { - fprintf(flog,"Device not found: %s\n",old_name); - return 0; - } - sprintf(temp,"/sbin/ip link set dev %s name %s",old_name ,new_name ); - mysystem(temp); - - return 1; -} - -char g_temp[STRING_SIZE]=""; -char* readmac(char *card) { - FILE *fp; - char temp[STRING_SIZE], mac[20]; - - sprintf(temp,"/sys/class/net/%s/address",card); - if( (fp = fopen(temp, "r")) == NULL ) { - fprintf(flog,"Couldn't open: %s\n",temp); - return NULL; - } - fgets(mac, 18, fp); - strtok(mac,"\n"); - fclose(fp); - strcpy(g_temp, mac); - return g_temp; -} - -char* find_nic4mac(char *findmac) { - DIR *dir; - struct dirent *dirzeiger; - char temp[STRING_SIZE], temp2[STRING_SIZE]; - - if((dir=opendir(SYSDIR)) == NULL) { - fprintf(flog,"Fehler bei opendir (find_name4nic) ...\n"); - return NULL; - } - - sprintf(temp, ""); - while((dirzeiger=readdir(dir)) != NULL) { - if(*((*dirzeiger).d_name) != '.' & strcmp(((*dirzeiger).d_name), "lo") != 0) { - sprintf(temp2, "%s", readmac((*dirzeiger).d_name) ); - if (strcmp(findmac, temp2) == 0) { - sprintf(temp,"%s", (*dirzeiger).d_name); - break; - } - } - } - - if(closedir(dir) == -1) fprintf(flog,"Fehler beim schliessen von %s\n", SYSDIR); - strcpy(g_temp, temp); - return g_temp; -} - -int nic_shutdown(char *nic) { - char temp[STRING_SIZE]; - - sprintf(temp,"ip link set %s down", nic); - mysystem(temp); -} - -int nic_startup(char *nic) { - char temp[STRING_SIZE]; - - sprintf(temp,"ip link set %s up", nic); - mysystem(temp); - -} - -int rename_nics(void) { - int i, j, k; - int fnics = scan_network_cards(); - char nic2find[STRING_SIZE], temp[STRING_SIZE]; - - for(i=0; i<4; i++) - if (strcmp(knics[i].macaddr, "")) - for(j=0; j 15 ) { - sprintf(nics[count].nic, "%s", find_nic4mac(nics[count].macaddr)); - count++; - } - } - fclose(fp); - scanned_nics_read_done = count; - } else fprintf(flog,"Scan Networkcards does read.\n"); - return scanned_nics_read_done; -} - - - -int nicmenu(int colour) -{ - int rc, choise = 0, count = 0, kcount = 0, mcount = 0, i, j, nic_in_use; - int found_NIC_as_Card[4]; - char message[STRING_SIZE]; - char temp[STRING_SIZE]; - - char cMenuInhalt[STRING_SIZE]; - char MenuInhalt[20][180]; - char *pMenuInhalt[20]; - - while (strcmp(nics[count].macaddr, "")) count++; // 2 find how many nics in system - for ( i=0 ; i<4;i++) if (strcmp(knics[i].macaddr, "")) kcount++; // loop to find all knowing nics - - // If new nics are found... - if (count > kcount) { - for (i=0 ; i < count ; i++) - { - nic_in_use = 0; - for (j=0 ; j <= kcount ; j++) { - if (strcmp(nics[ i ].macaddr, knics[ j ].macaddr) == 0 ) { - nic_in_use = 1; - break; - } - } - if (!(nic_in_use)) { - if ( strlen(nics[i].description) < 55 ) - sprintf(MenuInhalt[mcount], "%.*s", strlen(nics[i].description)-2, nics[i].description+1); - else { - sprintf(cMenuInhalt, "%.50s", nics[i].description + 1); - sprintf(MenuInhalt[mcount], cMenuInhalt); - strcat (MenuInhalt[mcount], "..."); - } - - while ( strlen(MenuInhalt[mcount]) < 53) strcat(MenuInhalt[mcount], " "); // Fill with space. - - strcat(MenuInhalt[mcount], " ("); - strcat(MenuInhalt[mcount], nics[i].macaddr); - strcat(MenuInhalt[mcount], ")"); - pMenuInhalt[mcount] = MenuInhalt[mcount]; - found_NIC_as_Card[mcount]=i; - mcount++; - } - } - - pMenuInhalt[mcount] = NULL; - - sprintf(message, ctr[TR_CHOOSE_NETCARD], ucolourcard[colour]); - rc=2; - while ( rc == 2 ) { - rc = newtWinMenu( ctr[TR_NETCARDMENU2], message, 50, 5, 5, 6, pMenuInhalt, &choise, ctr[TR_SELECT], ctr[TR_IDENTIFY], ctr[TR_CANCEL], NULL); - if ( rc == 2 ) { - sprintf(temp, "/sbin/ip link set %s up", nics[found_NIC_as_Card[choise]].nic); - mysystem(temp); - sprintf(temp, "/usr/sbin/ethtool -p %s 10", nics[found_NIC_as_Card[choise]].nic); - if (runcommandwithstatus(temp,ctr[TR_IDENTIFY_SHOULD_BLINK]) != 0) { - errorbox(ctr[TR_IDENTIFY_NOT_SUPPORTED]); - sprintf(temp, "/sbin/ip link set %s down", nics[found_NIC_as_Card[choise]].nic); - mysystem(temp); - } - } - } - if ( rc == 0 || rc == 1) { - write_configs_netudev(found_NIC_as_Card[choise], colour); - } - return 0; - } else { - // We have to add here that you can manually add a device - errorbox( ctr[TR_ERROR_INTERFACES]); - return 1; - } -} - -int clear_card_entry(int card) -{ - struct keyvalue *kv = initkeyvalues(); - char temp[STRING_SIZE]; - - if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) - { - freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); - return 0; - } - - strcpy(knics[card].driver, ""); - strcpy(knics[card].description, ctr[TR_UNSET]); - strcpy(knics[card].macaddr, ""); - strcpy(knics[card].colour, ""); - sprintf(temp, "%s_DRIVER", ucolourcard[card]); - replacekeyvalue(kv, temp, ""); - sprintf(temp, "%s_DEV", ucolourcard[card]); - replacekeyvalue(kv, temp, ""); - sprintf(temp, "%s_MACADDR", ucolourcard[card]); - replacekeyvalue(kv, temp, ""); - sprintf(temp, "%s_DESCRIPTION", ucolourcard[card]); - replacekeyvalue(kv, temp, ""); - - writekeyvalues(kv, CONFIG_ROOT "/ethernet/settings"); - freekeyvalues(kv); - - return 0; -} - -int ask_clear_card_entry(int card) -{ - char message[STRING_SIZE]; - int rc; - - sprintf(message, ctr[TR_REMOVE_CARD], ucolourcard[card]); - rc = newtWinChoice(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_CANCEL], message); - - if ( rc = 0 || rc == 1) { - clear_card_entry(card); - } else return 1; - - return 0; -} - -/* Manual entry for gurus. */ -int manualdriver(char *driver, char *driveroptions) -{ - char *values[] = { NULL, NULL }; /* pointers for the values. */ - struct newtWinEntry entries[] = - { { "", &values[0], 0,}, { NULL, NULL, 0 } }; - int rc; - char commandstring[STRING_SIZE]; - char *driverend; - - strcpy(driver, ""); - strcpy(driveroptions, ""); - - rc = newtWinEntries(ctr[TR_SELECT_NETWORK_DRIVER], - ctr[TR_MODULE_PARAMETERS], 50, 5, 5, 40, entries, - ctr[TR_OK], ctr[TR_CANCEL], NULL); - if (rc == 0 || rc == 1) - { - if (strlen(values[0])) - { - sprintf(commandstring, "/sbin/modprobe %s", values[0]); - if (runcommandwithstatus(commandstring, ctr[TR_LOADING_MODULE]) == 0) - { - if ((driverend = strchr(values[0], ' '))) - { - *driverend = '\0'; - strcpy(driver, values[0]); - strcpy(driveroptions, driverend + 1); - } - else - { - strcpy(driver, values[0]); - strcpy(driveroptions, ""); - } - } - else - errorbox(ctr[TR_UNABLE_TO_LOAD_DRIVER_MODULE]); - } - else - errorbox(ctr[TR_MODULE_NAME_CANNOT_BE_BLANK]); - } - free(values[0]); - - return 1; -} diff --git a/src/install+setup/libsmooth/Makefile b/src/libsmooth/Makefile similarity index 100% rename from src/install+setup/libsmooth/Makefile rename to src/libsmooth/Makefile diff --git a/src/libsmooth/Makefile.am b/src/libsmooth/Makefile.am new file mode 100644 index 000000000..0a7f88131 --- /dev/null +++ b/src/libsmooth/Makefile.am @@ -0,0 +1,81 @@ +# This file is part of the libsmooth library. +# +# libsmooth is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} +AM_MAKEFLAGS = --no-print-directory +AUTOMAKE_OPTIONS = color-tests parallel-tests + +SUBDIRS = . + +# remove targets if the command fails +.DELETE_ON_ERROR: + +# keep intermediate files +.SECONDARY: + +LIBSMOOTH_CURRENT=1 +LIBSMOOTH_REVISION=0 +LIBSMOOTH_AGE=0 + +pkgconfiglibdir=$(libdir)/pkgconfig +CLEANFILES = +EXTRA_DIST = + +AM_CPPFLAGS = \ + -include $(top_builddir)/config.h \ + -I $(top_srcdir)/include \ + $(OUR_CPPFLAGS) + +AM_CFLAGS = $(OUR_CFLAGS) +AM_CXXFLAGS = $(OUR_CXXFLAGS) +AM_LDFLAGS = $(OUR_LDFLAGS) + +lib_LTLIBRARIES = + +include_HEADERS = + +#- libsmooth ------------------------------------------------------------------- + +lib_LTLIBRARIES += \ + libsmooth.la + +libsmooth_la_SOURCES = \ + main.c \ + varval.c + +libsmooth_la_LDFLAGS = \ + $(AM_LDFLAGS) \ + -version-info $(LIBSMOOTH_CURRENT):$(LIBSMOOTH_REVISION):$(LIBSMOOTH_AGE) + +include_HEADERS += \ + libsmooth.h + +pkgconfiglib_DATA = \ + libsmooth.pc + +CLEANFILES += \ + libsmooth.pc + +EXTRA_DIST += \ + libsmooth.pc.in + +#------------------------------------------------------------------------------- + +substitutions = \ + '|PACKAGE_NAME=$(PACKAGE_NAME)|' \ + '|PACKAGE_VERSION=$(PACKAGE_VERSION)|' \ + '|prefix=$(prefix)|' \ + '|exec_prefix=$(exec_prefix)|' \ + '|libdir=$(libdir)|' \ + '|includedir=$(includedir)|' + +SED_PROCESS = \ + $(AM_V_GEN)$(MKDIR_P) $(dir $@) && \ + $(SED) $(subst '|,-e 's|@,$(subst =,\@|,$(subst |',|g',$(substitutions)))) < $< > $@ + +%.pc: %.pc.in Makefile + $(SED_PROCESS) diff --git a/src/libsmooth/autogen.sh b/src/libsmooth/autogen.sh new file mode 100755 index 000000000..306548864 --- /dev/null +++ b/src/libsmooth/autogen.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +autoreconf --force --install -I m4 diff --git a/src/libsmooth/configure.ac b/src/libsmooth/configure.ac new file mode 100644 index 000000000..224758833 --- /dev/null +++ b/src/libsmooth/configure.ac @@ -0,0 +1,58 @@ +# This file is part of libsmooth. +# +# libsmooth is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +AC_PREREQ([2.64]) + +AC_INIT([libsmooth], + [001], + [], + [libsmooth], + [http://git.ipfire.org/?p=ipfire-2.x.git;a=summary]) + +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_AUX_DIR([build-aux]) + +AM_INIT_AUTOMAKE([ + foreign + 1.11 + -Wall + -Wno-portability + silent-rules + tar-pax + no-dist-gzip + dist-xz + subdir-objects +]) +AM_SILENT_RULES([yes]) + +LT_PREREQ(2.2) +LT_INIT([disable-static]) + +AC_PROG_SED + +AC_PROG_CC +AC_PROG_CC_C99 +AC_PROG_CC_C_O + +AC_PATH_PROG([M4], [m4]) + +# This makes sure pkg.m4 is available. +m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config]) + +AC_CONFIG_FILES([ + Makefile +]) + +AC_OUTPUT +AC_MSG_RESULT([ + $PACKAGE_NAME $VERSION + + CFLAGS: ${OUR_CFLAGS} ${CFLAGS} + CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS} + LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS} +]) diff --git a/src/libsmooth/libsmooth.h b/src/libsmooth/libsmooth.h new file mode 100644 index 000000000..54a4db1a8 --- /dev/null +++ b/src/libsmooth/libsmooth.h @@ -0,0 +1,68 @@ +/* SmoothWall libsmooth. + * + * This program is distributed under the terms of the GNU General Public + * Licence. See the file COPYING for details. + * + * (c) Lawrence Manning, 2001 + * Contains prototypes for library functions. + * + */ + +#ifndef ___LIBSMOOTH_H +#define ___LIBSMOOTH_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#define STRING_SIZE 1024 + +struct keyvalue { + char key[STRING_SIZE]; + char value[STRING_SIZE]; + struct keyvalue *next; +}; + +/* libsmooth.c */ +void stripnl(char *s); +int mysystem(const char *command); +void errorbox(char *message); +int statuswindowscroll(int width, int height, const char *title, const char *text, ...); +int disclaimerbox(char *message); +void statuswindow(int width, int height, const char *title, const char *text, ...); +int runcommandwithprogress(int width, int height, const char *title, const char *command, + int lines, char *text, ...); +int runcommandwithstatus(const char *command, const char* title, const char *message); +int runhiddencommandwithstatus(const char *command, const char* title, const char *message); +int checkformodule(const char *module); +int replace(char filename1[], char *from, char *to); +char* get_version(void); + +/* varval.c */ +struct keyvalue *initkeyvalues(void); +void freekeyvalues(struct keyvalue *head); +int readkeyvalues(struct keyvalue *head, char *filename); +int writekeyvalues(struct keyvalue *head, char *filename); +int findkey(struct keyvalue *head, char *key, char *value); +void appendkeyvalue(struct keyvalue *head, char *key, char *value); +void replacekeyvalue(struct keyvalue *head, char *key, char *value); + +#endif diff --git a/src/libsmooth/libsmooth.pc.in b/src/libsmooth/libsmooth.pc.in new file mode 100644 index 000000000..add59a1b0 --- /dev/null +++ b/src/libsmooth/libsmooth.pc.in @@ -0,0 +1,18 @@ +# This file is part of the libsmooth library. +# +# libsmooth is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libsmooth +Description: libsmooth library +URL: @PACKAGE_URL@ +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lsmooth +Cflags: -I${includedir} diff --git a/src/libsmooth/m4/attributes.m4 b/src/libsmooth/m4/attributes.m4 new file mode 100644 index 000000000..7e080da65 --- /dev/null +++ b/src/libsmooth/m4/attributes.m4 @@ -0,0 +1,288 @@ +dnl Macros to check the presence of generic (non-typed) symbols. +dnl Copyright (c) 2006-2008 Diego Pettenò +dnl Copyright (c) 2006-2008 xine project +dnl Copyright (c) 2012 Lucas De Marchi +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +dnl 02110-1301, USA. +dnl +dnl As a special exception, the copyright owners of the +dnl macro gives unlimited permission to copy, distribute and modify the +dnl configure scripts that are the output of Autoconf when processing the +dnl Macro. You need not follow the terms of the GNU General Public +dnl License when using or distributing such scripts, even though portions +dnl of the text of the Macro appear in them. The GNU General Public +dnl License (GPL) does govern all other use of the material that +dnl constitutes the Autoconf Macro. +dnl +dnl This special exception to the GPL applies to versions of the +dnl Autoconf Macro released by this project. When you make and +dnl distribute a modified version of the Autoconf Macro, you may extend +dnl this special exception to the GPL to apply to your modified version as +dnl well. + +dnl Check if FLAG in ENV-VAR is supported by compiler and append it +dnl to WHERE-TO-APPEND variable +dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG]) + +AC_DEFUN([CC_CHECK_FLAG_APPEND], [ + AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2], + AS_TR_SH([cc_cv_$2_$3]), + [eval "AS_TR_SH([cc_save_$2])='${$2}'" + eval "AS_TR_SH([$2])='-Werror $3'" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a = 0; int main(void) { return a; } ])], + [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"], + [eval "AS_TR_SH([cc_cv_$2_$3])='no'"]) + eval "AS_TR_SH([$2])='$cc_save_$2'"]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes], + [eval "$1='${$1} $3'"]) +]) + +dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2]) +AC_DEFUN([CC_CHECK_FLAGS_APPEND], [ + for flag in $3; do + CC_CHECK_FLAG_APPEND($1, $2, $flag) + done +]) + +dnl Check if the flag is supported by linker (cacheable) +dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) + +AC_DEFUN([CC_CHECK_LDFLAGS], [ + AC_CACHE_CHECK([if $CC supports $1 flag], + AS_TR_SH([cc_cv_ldflags_$1]), + [ac_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $1" + AC_LINK_IFELSE([int main() { return 1; }], + [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"], + [eval "AS_TR_SH([cc_cv_ldflags_$1])="]) + LDFLAGS="$ac_save_LDFLAGS" + ]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes], + [$2], [$3]) +]) + +dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for +dnl the current linker to avoid undefined references in a shared object. +AC_DEFUN([CC_NOUNDEFINED], [ + dnl We check $host for which systems to enable this for. + AC_REQUIRE([AC_CANONICAL_HOST]) + + case $host in + dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads + dnl are requested, as different implementations are present; to avoid problems + dnl use -Wl,-z,defs only for those platform not behaving this way. + *-freebsd* | *-openbsd*) ;; + *) + dnl First of all check for the --no-undefined variant of GNU ld. This allows + dnl for a much more readable commandline, so that people can understand what + dnl it does without going to look for what the heck -z defs does. + for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do + CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"]) + break + done + ;; + esac + + AC_SUBST([LDFLAGS_NOUNDEFINED]) +]) + +dnl Check for a -Werror flag or equivalent. -Werror is the GCC +dnl and ICC flag that tells the compiler to treat all the warnings +dnl as fatal. We usually need this option to make sure that some +dnl constructs (like attributes) are not simply ignored. +dnl +dnl Other compilers don't support -Werror per se, but they support +dnl an equivalent flag: +dnl - Sun Studio compiler supports -errwarn=%all +AC_DEFUN([CC_CHECK_WERROR], [ + AC_CACHE_CHECK( + [for $CC way to treat warnings as errors], + [cc_cv_werror], + [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror], + [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])]) + ]) +]) + +AC_DEFUN([CC_CHECK_ATTRIBUTE], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))], + AS_TR_SH([cc_cv_attribute_$1]), + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])], + [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"], + [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"]) + CFLAGS="$ac_save_CFLAGS" + ]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes], + [AC_DEFINE( + AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1, + [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))] + ) + $4], + [$5]) +]) + +AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [ + CC_CHECK_ATTRIBUTE( + [constructor],, + [void __attribute__((constructor)) ctor() { int a; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_FORMAT], [ + CC_CHECK_ATTRIBUTE( + [format], [format(printf, n, n)], + [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [ + CC_CHECK_ATTRIBUTE( + [format_arg], [format_arg(printf)], + [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [ + CC_CHECK_ATTRIBUTE( + [visibility_$1], [visibility("$1")], + [void __attribute__((visibility("$1"))) $1_function() { }], + [$2], [$3]) +]) + +AC_DEFUN([CC_ATTRIBUTE_NONNULL], [ + CC_CHECK_ATTRIBUTE( + [nonnull], [nonnull()], + [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_UNUSED], [ + CC_CHECK_ATTRIBUTE( + [unused], , + [void some_function(void *foo, __attribute__((unused)) void *bar);], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [ + CC_CHECK_ATTRIBUTE( + [sentinel], , + [void some_function(void *foo, ...) __attribute__((sentinel));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [ + CC_CHECK_ATTRIBUTE( + [deprecated], , + [void some_function(void *foo, ...) __attribute__((deprecated));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_ALIAS], [ + CC_CHECK_ATTRIBUTE( + [alias], [weak, alias], + [void other_function(void *foo) { } + void some_function(void *foo) __attribute__((weak, alias("other_function")));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_MALLOC], [ + CC_CHECK_ATTRIBUTE( + [malloc], , + [void * __attribute__((malloc)) my_alloc(int n);], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_PACKED], [ + CC_CHECK_ATTRIBUTE( + [packed], , + [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_CONST], [ + CC_CHECK_ATTRIBUTE( + [const], , + [int __attribute__((const)) twopow(int n) { return 1 << n; } ], + [$1], [$2]) +]) + +AC_DEFUN([CC_FLAG_VISIBILITY], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([if $CC supports -fvisibility=hidden], + [cc_cv_flag_visibility], + [cc_flag_visibility_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden], + cc_cv_flag_visibility='yes', + cc_cv_flag_visibility='no') + CFLAGS="$cc_flag_visibility_save_CFLAGS"]) + + AS_IF([test "x$cc_cv_flag_visibility" = "xyes"], + [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1, + [Define this if the compiler supports the -fvisibility flag]) + $1], + [$2]) +]) + +AC_DEFUN([CC_FUNC_EXPECT], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([if compiler has __builtin_expect function], + [cc_cv_func_expect], + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + AC_COMPILE_IFELSE([AC_LANG_SOURCE( + [int some_function() { + int a = 3; + return (int)__builtin_expect(a, 3); + }])], + [cc_cv_func_expect=yes], + [cc_cv_func_expect=no]) + CFLAGS="$ac_save_CFLAGS" + ]) + + AS_IF([test "x$cc_cv_func_expect" = "xyes"], + [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1, + [Define this if the compiler supports __builtin_expect() function]) + $1], + [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported], + [cc_cv_attribute_aligned], + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + for cc_attribute_align_try in 64 32 16 8 4 2; do + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ + int main() { + static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0; + return c; + }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) + done + CFLAGS="$ac_save_CFLAGS" + ]) + + if test "x$cc_cv_attribute_aligned" != "x"; then + AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned], + [Define the highest alignment supported]) + fi +]) diff --git a/src/install+setup/libsmooth/main.c b/src/libsmooth/main.c similarity index 78% rename from src/install+setup/libsmooth/main.c rename to src/libsmooth/main.c index 14c308469..d9dccbb15 100644 --- a/src/install+setup/libsmooth/main.c +++ b/src/libsmooth/main.c @@ -5,48 +5,40 @@ * * (c) Lawrence Manning, 2001 * Contains library functions. - * - * $Id: main.c,v 1.6.2.9 2005/12/09 22:31:41 franck78 Exp $ - * */ #include "libsmooth.h" +#include +#define _(x) dgettext("libsmooth", x) + extern FILE *flog; extern char *mylog; extern char **ctr; -/* reboot(). reboots. */ -void reboot(void) -{ - mysystem("/etc/halt"); -} - /* stripnl(). Replaces \n with \0 */ -void stripnl(char *s) -{ +void stripnl(char *s) { char *t = strchr(s, '\n'); - if (t) *t = '\0'; + if (t) + *t = '\0'; } /* Little wrapper. */ -int mysystem(char *command) -{ +int mysystem(const char *command) { char mycommand[STRING_SIZE]; - + snprintf(mycommand, STRING_SIZE, "%s >>%s 2>>%s", command, mylog, mylog); fprintf(flog, "Running command: %s\n", command); + return system(mycommand); } -void errorbox(char *message) -{ - newtWinMessage(ctr[TR_ERROR], ctr[TR_OK], message); +void errorbox(char *message) { + newtWinMessage(_("Error"), _("OK"), message); } -void statuswindow(int width, int height, char *title, char *text, ...) -{ +void statuswindow(int width, int height, const char *title, const char *text, ...) { newtComponent t, f; char *buf = NULL; int size = 0; @@ -79,39 +71,31 @@ void statuswindow(int width, int height, char *title, char *text, ...) newtFormDestroy(f); } -int runcommandwithstatus(char *command, char *message) -{ - int rc; - char title[STRING_SIZE]; - - sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN); +int runcommandwithstatus(const char *command, const char* title, const char *message) { statuswindow(60, 4, title, message); - rc = mysystem(command); + + int rc = mysystem(command); newtPopWindow(); - + return rc; } -int runhiddencommandwithstatus(char *command, char *message) -{ - int rc; - char title[STRING_SIZE]; - char mycommand[STRING_SIZE]; - - sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN); +int runhiddencommandwithstatus(const char *command, const char* title, const char *message) { statuswindow(60, 4, title, message); + + char mycommand[STRING_SIZE]; snprintf(mycommand, STRING_SIZE, "%s >>%s 2>>%s", command, mylog, mylog); fprintf(flog, "Running command: ***** HIDDEN *****\n"); - rc = system(mycommand); + + int rc = system(mycommand); newtPopWindow(); - + return rc; } /* This one borrowed from redhat installer. */ -int runcommandwithprogress(int width, int height, char *title, char *command, - int lines, char *text, ...) -{ +int runcommandwithprogress(int width, int height, const char *title, const char *command, + int lines, char *text, ...) { newtComponent t, f, s; char *buf = NULL; int size = 0; @@ -178,12 +162,11 @@ EXIT: return rc; } -int checkformodule(char *module) -{ +int checkformodule(const char *module) { FILE *file; char buffer[STRING_SIZE]; int result = 0; - + if (!(file = fopen("/proc/modules", "r"))) { fprintf(flog, "Unable to open /proc/modules in checkformodule()\n"); @@ -239,8 +222,7 @@ int _replace_string(char string[], char *from, char *to) return 0; } -int replace(char filename1[], char *from, char *to) -{ +int replace(char filename1[], char *from, char *to) { FILE *file1, *file2; char filename2[1000]; char temp[1000]; @@ -257,7 +239,6 @@ int replace(char filename1[], char *from, char *to) /* Start reading in lines */ while (fgets (temp, 1000, file1) != NULL) { - if (strlen(to) > 0) { /* Replace string */ ret = _replace_string (temp, from, to); @@ -281,20 +262,6 @@ int replace(char filename1[], char *from, char *to) return (ret); } -/* Include enabled languages */ -#ifdef LANG_EN_ONLY - #include "lang_en.c" -#else - #include "lang_de.c" - #include "lang_en.c" - #include "lang_es.c" - #include "lang_fr.c" - #include "lang_pl.c" - #include "lang_ru.c" - #include "lang_nl.c" - #include "lang_tr.c" -#endif - // returns a pointer to the actual running version number of IPFire. // Successive updates increase effective version but not VERSION ! char g_title[STRING_SIZE] = ""; @@ -304,8 +271,6 @@ char* get_version(void) { fgets (g_title, STRING_SIZE, f_title); fclose (f_title); if (g_title[strlen(g_title) - 1] == '\n') g_title[strlen(g_title) - 1] = '\0'; - } else { - sprintf (g_title, "%s %s - %s", NAME, VERSION, SLOGAN); } return g_title; } diff --git a/src/install+setup/libsmooth/varval.c b/src/libsmooth/varval.c similarity index 100% rename from src/install+setup/libsmooth/varval.c rename to src/libsmooth/varval.c From 7064bbd9914fc5dbafad1e3ea20ac2a27caaa3d5 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 30 Jul 2014 22:03:55 +0200 Subject: [PATCH 051/297] Move setup to an own directory. --- lfs/setup | 12 +- src/install+setup/setup/setup.h | 40 -- src/{install+setup => }/setup/Makefile | 4 +- src/{install+setup => }/setup/dhcp.c | 0 src/{install+setup => }/setup/domainname.c | 0 src/{install+setup => }/setup/hostname.c | 0 src/{install+setup => }/setup/keymap.c | 0 src/{install+setup => }/setup/main.c | 0 src/{install+setup => }/setup/misc.c | 0 src/setup/netstuff.c | 776 +++++++++++++++++++++ src/{install+setup => }/setup/networking.c | 0 src/{install+setup => }/setup/passwords.c | 0 src/setup/setup.h | 86 +++ src/{install+setup => }/setup/timezone.c | 0 14 files changed, 868 insertions(+), 50 deletions(-) delete mode 100644 src/install+setup/setup/setup.h rename src/{install+setup => }/setup/Makefile (96%) rename src/{install+setup => }/setup/dhcp.c (100%) rename src/{install+setup => }/setup/domainname.c (100%) rename src/{install+setup => }/setup/hostname.c (100%) rename src/{install+setup => }/setup/keymap.c (100%) rename src/{install+setup => }/setup/main.c (100%) rename src/{install+setup => }/setup/misc.c (100%) create mode 100644 src/setup/netstuff.c rename src/{install+setup => }/setup/networking.c (100%) rename src/{install+setup => }/setup/passwords.c (100%) create mode 100644 src/setup/setup.h rename src/{install+setup => }/setup/timezone.c (100%) diff --git a/lfs/setup b/lfs/setup index 1b33b966c..a5dee7359 100644 --- a/lfs/setup +++ b/lfs/setup @@ -48,17 +48,13 @@ md5 : $(TARGET) : @$(PREBUILD) - @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/install+setup/* $(DIR_APP) + @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/setup/* $(DIR_APP) - cd $(DIR_APP)/libsmooth && make CFLAGS="$(CFLAGS) -Wall \ + cd $(DIR_APP) && make CFLAGS="$(CFLAGS) -Wall \ -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \ -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'" - cd $(DIR_APP)/setup && make CFLAGS="$(CFLAGS) -Wall \ - -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \ - -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'" - - cd $(DIR_APP)/setup && install -m 0755 setup /usr/local/sbin - install -m 0755 $(DIR_SRC)/src/install+setup/install/probenic.sh /bin + cd $(DIR_APP) && install -m 0755 setup /usr/local/sbin + cd $(DIR_APP) && install -m 0755 probenic.sh /bin @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/install+setup/setup/setup.h b/src/install+setup/setup/setup.h deleted file mode 100644 index e6a32a6a6..000000000 --- a/src/install+setup/setup/setup.h +++ /dev/null @@ -1,40 +0,0 @@ -/* SmoothWall setup program. - * - * This program is distributed under the terms of the GNU General Public - * Licence. See the file COPYING for details. - * - * (c) Lawrence Manning, 2001 - * Main include file. - * - * $Id: setup.h,v 1.4 2003/12/11 11:25:54 riddles Exp $ - * - */ - -#include "../libsmooth/libsmooth.h" - -/* hostname.c */ -int handlehostname(void); - -/* domainname.c */ -int handledomainname(void); - -/* networking.c */ -int handlenetworking(void); - -/* dhcp.c */ -int handledhcp(void); - -/* passwords.c */ -int handlerootpassword(void); -int handlesetuppassword(void); -int handleadminpassword(void); - -/* misc.c */ -int writehostsfiles(void); -int handleisdn(void); - -/* keymap.c */ -int handlekeymap(void); - -/* timezone.c */ -int handletimezone(void); diff --git a/src/install+setup/setup/Makefile b/src/setup/Makefile similarity index 96% rename from src/install+setup/setup/Makefile rename to src/setup/Makefile index 924da77db..9bbd47941 100644 --- a/src/install+setup/setup/Makefile +++ b/src/setup/Makefile @@ -24,7 +24,7 @@ INCLUDE = LD = gcc LDFLAGS = -LIBS = -lnewt -lslang +LIBS = -lnewt -lslang -lsmooth COMPILE = $(CC) -c $(INCLUDE) $(CFLAGS) @@ -40,7 +40,7 @@ clean : ###### OBJS=main.o hostname.o domainname.o passwords.o networking.o misc.o \ - dhcp.o keymap.o timezone.o ../libsmooth/libsmooth.o + dhcp.o keymap.o timezone.o setup: $(OBJS) $(LINK) $(OBJS) -o $@ $(LIBS) diff --git a/src/install+setup/setup/dhcp.c b/src/setup/dhcp.c similarity index 100% rename from src/install+setup/setup/dhcp.c rename to src/setup/dhcp.c diff --git a/src/install+setup/setup/domainname.c b/src/setup/domainname.c similarity index 100% rename from src/install+setup/setup/domainname.c rename to src/setup/domainname.c diff --git a/src/install+setup/setup/hostname.c b/src/setup/hostname.c similarity index 100% rename from src/install+setup/setup/hostname.c rename to src/setup/hostname.c diff --git a/src/install+setup/setup/keymap.c b/src/setup/keymap.c similarity index 100% rename from src/install+setup/setup/keymap.c rename to src/setup/keymap.c diff --git a/src/install+setup/setup/main.c b/src/setup/main.c similarity index 100% rename from src/install+setup/setup/main.c rename to src/setup/main.c diff --git a/src/install+setup/setup/misc.c b/src/setup/misc.c similarity index 100% rename from src/install+setup/setup/misc.c rename to src/setup/misc.c diff --git a/src/setup/netstuff.c b/src/setup/netstuff.c new file mode 100644 index 000000000..8c6f3fa90 --- /dev/null +++ b/src/setup/netstuff.c @@ -0,0 +1,776 @@ +/* SmoothWall libsmooth. + * + * This program is distributed under the terms of the GNU General Public + * Licence. See the file COPYING for details. + * + * (c) Lawrence Manning, 2001 + * Contains network library functions. + * + */ + +#include "libsmooth.h" +#include + +extern FILE *flog; +extern char *mylog; + +extern char **ctr; + +extern struct nic nics[]; +extern struct knic knics[]; + +char *ucolourcard[] = { "GREEN", "RED", "ORANGE", "BLUE", NULL }; +char *lcolourcard[] = { "green", "red", "orange", "blue", NULL }; + +int scanned_nics_read_done = 0; + +newtComponent networkform; +newtComponent addressentry; +newtComponent netmaskentry; +newtComponent statictyperadio; +newtComponent dhcptyperadio; +newtComponent pppoetyperadio; +newtComponent dhcphostnameentry; +newtComponent dhcpforcemtuentry; + +/* acceptable character filter for IP and netmaks entry boxes */ +static int ip_input_filter(newtComponent entry, void * data, int ch, int cursor) +{ + if ((ch >= '0' && ch <= '9') || ch == '.' || ch == '\r' || ch >= NEWT_KEY_EXTRA_BASE) + return ch; + return 0; +} + +/* This is a groovie dialog for showing network info. Takes a keyvalue list, + * a colour and a dhcp flag. Shows the current settings, and rewrites them + * if necessary. DHCP flag sets wether to show the dhcp checkbox. */ +int changeaddress(struct keyvalue *kv, char *colour, int typeflag, + char *defaultdhcphostname) +{ + char *addressresult; + char *netmaskresult; + char *dhcphostnameresult; + char *dhcpforcemturesult; + struct newtExitStruct es; + newtComponent header; + newtComponent addresslabel; + newtComponent netmasklabel; + newtComponent dhcphostnamelabel; + newtComponent dhcpforcemtulabel; + newtComponent ok, cancel; + char message[1000]; + char temp[STRING_SIZE]; + char addressfield[STRING_SIZE]; + char netmaskfield[STRING_SIZE]; + char typefield[STRING_SIZE]; + char dhcphostnamefield[STRING_SIZE]; + char dhcpforcemtufield[STRING_SIZE]; + int error; + int result = 0; + char type[STRING_SIZE]; + int startstatictype = 0; + int startdhcptype = 0; + int startpppoetype = 0; + + /* Build some key strings. */ + sprintf(addressfield, "%s_ADDRESS", colour); + sprintf(netmaskfield, "%s_NETMASK", colour); + sprintf(typefield, "%s_TYPE", colour); + sprintf(dhcphostnamefield, "%s_DHCP_HOSTNAME", colour); + sprintf(dhcpforcemtufield, "%s_DHCP_FORCE_MTU", colour); + + sprintf(message, ctr[TR_INTERFACE], colour); + newtCenteredWindow(44, (typeflag ? 18 : 12), message); + + networkform = newtForm(NULL, NULL, 0); + + sprintf(message, ctr[TR_ENTER_THE_IP_ADDRESS_INFORMATION], colour); + header = newtTextboxReflowed(1, 1, message, 42, 0, 0, 0); + newtFormAddComponent(networkform, header); + + /* See if we need a dhcp checkbox. If we do, then we shift the contents + * of the window down two rows to make room. */ + if (typeflag) + { + strcpy(temp, "STATIC"); findkey(kv, typefield, temp); + if (strcmp(temp, "STATIC") == 0) startstatictype = 1; + if (strcmp(temp, "DHCP") == 0) startdhcptype = 1; + if (strcmp(temp, "PPPOE") == 0) startpppoetype = 1; + statictyperadio = newtRadiobutton(2, 4, ctr[TR_STATIC], startstatictype, NULL); + dhcptyperadio = newtRadiobutton(2, 5, ctr[TR_DHCP], startdhcptype, statictyperadio); + pppoetyperadio = newtRadiobutton(2, 6, ctr[TR_PPP_DIALUP], startpppoetype, dhcptyperadio); + newtFormAddComponents(networkform, statictyperadio, dhcptyperadio, + pppoetyperadio, NULL); + newtComponentAddCallback(statictyperadio, networkdialogcallbacktype, NULL); + newtComponentAddCallback(dhcptyperadio, networkdialogcallbacktype, NULL); + newtComponentAddCallback(pppoetyperadio, networkdialogcallbacktype, NULL); + dhcphostnamelabel = newtTextbox(2, 8, 18, 1, 0); + newtTextboxSetText(dhcphostnamelabel, ctr[TR_DHCP_HOSTNAME]); + dhcpforcemtulabel = newtTextbox(2, 9, 18, 1, 0); + newtTextboxSetText(dhcpforcemtulabel, ctr[TR_DHCP_FORCE_MTU]); + strcpy(temp, defaultdhcphostname); + findkey(kv, dhcphostnamefield, temp); + dhcphostnameentry = newtEntry(20, 8, temp, 20, &dhcphostnameresult, 0); + strcpy(temp, ""); + findkey(kv, dhcpforcemtufield, temp); + dhcpforcemtuentry = newtEntry(20, 9, temp, 20, &dhcpforcemturesult, 0); + newtFormAddComponent(networkform, dhcphostnamelabel); + newtFormAddComponent(networkform, dhcphostnameentry); + newtFormAddComponent(networkform, dhcpforcemtulabel); + newtFormAddComponent(networkform, dhcpforcemtuentry); + if (startdhcptype == 0) + { + newtEntrySetFlags(dhcphostnameentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + newtEntrySetFlags(dhcpforcemtuentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + } + } + /* Address */ + addresslabel = newtTextbox(2, (typeflag ? 11 : 4) + 0, 18, 1, 0); + newtTextboxSetText(addresslabel, ctr[TR_IP_ADDRESS_PROMPT]); + strcpy(temp, ""); + findkey(kv, addressfield, temp); + addressentry = newtEntry(20, (typeflag ? 11 : 4) + 0, temp, 20, &addressresult, 0); + newtEntrySetFilter(addressentry, ip_input_filter, NULL); + if (typeflag == 1 && startstatictype == 0) + newtEntrySetFlags(addressentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + newtFormAddComponent(networkform, addresslabel); + newtFormAddComponent(networkform, addressentry); + + /* Netmask */ + netmasklabel = newtTextbox(2, (typeflag ? 11 : 4) + 1, 18, 1, 0); + newtTextboxSetText(netmasklabel, ctr[TR_NETMASK_PROMPT]); + strcpy(temp, "255.255.255.0"); findkey(kv, netmaskfield, temp); + netmaskentry = newtEntry(20, (typeflag ? 11 : 4) + 1, temp, 20, &netmaskresult, 0); + newtEntrySetFilter(netmaskentry, ip_input_filter, NULL); + if (typeflag == 1 && startstatictype == 0) + newtEntrySetFlags(netmaskentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + + newtFormAddComponent(networkform, netmasklabel); + newtFormAddComponent(networkform, netmaskentry); + + /* Buttons. */ + ok = newtButton(8, (typeflag ? 14 : 7), ctr[TR_OK]); + cancel = newtButton(26, (typeflag ? 14 : 7), ctr[TR_CANCEL]); + + newtFormAddComponents(networkform, ok, cancel, NULL); + + newtRefresh(); + newtDrawForm(networkform); + + do + { + error = 0; + newtFormRun(networkform, &es); + + if (es.u.co == ok) + { + /* OK was pressed; verify the contents of each entry. */ + strcpy(message, ctr[TR_INVALID_FIELDS]); + + strcpy(type, "STATIC"); + if (typeflag) + gettype(type); + if (strcmp(type, "STATIC") == 0) + { + if (inet_addr(addressresult) == INADDR_NONE) + { + strcat(message, ctr[TR_IP_ADDRESS_CR]); + error = 1; + } + if (inet_addr(netmaskresult) == INADDR_NONE) + { + strcat(message, ctr[TR_NETWORK_MASK_CR]); + error = 1; + } + } + if (strcmp(type, "DHCP") == 0) + { + if (!strlen(dhcphostnameresult)) + { + strcat(message, ctr[TR_DHCP_HOSTNAME_CR]); + error = 1; + } + } + if (error) + errorbox(message); + else + { + /* No errors! Set new values, depending on dhcp flag etc. */ + if (typeflag) + { + replacekeyvalue(kv, dhcphostnamefield, dhcphostnameresult); + replacekeyvalue(kv, dhcpforcemtufield, dhcpforcemturesult); + if (strcmp(type, "STATIC") != 0) + { + replacekeyvalue(kv, addressfield, "0.0.0.0"); + replacekeyvalue(kv, netmaskfield, "0.0.0.0"); + } + else + { + replacekeyvalue(kv, addressfield, addressresult); + replacekeyvalue(kv, netmaskfield, netmaskresult); + } + replacekeyvalue(kv, typefield, type); + } + else + { + replacekeyvalue(kv, addressfield, addressresult); + replacekeyvalue(kv, netmaskfield, netmaskresult); + } + + setnetaddress(kv, colour); + result = 1; + } + } + /* Workaround for a bug that dhcp radiobutton also end the dialog at arm + */ + else { + if (es.u.co != cancel) { + error = 1; + } + } + } + while (error); + + newtFormDestroy(networkform); + newtPopWindow(); + + return result; +} + +/* for pppoe: return string thats type STATIC, DHCP or PPPOE */ +int gettype(char *type) +{ + newtComponent selected = newtRadioGetCurrent(statictyperadio); + + if (selected == statictyperadio) + strcpy(type, "STATIC"); + else if (selected == dhcptyperadio) + strcpy(type, "DHCP"); + else if (selected == pppoetyperadio) + strcpy(type, "PPPOE"); + else + strcpy(type, "ERROR"); + + return 0; +} + +/* 0.9.9: calculates broadcast too. */ +int setnetaddress(struct keyvalue *kv, char *colour) +{ + char addressfield[STRING_SIZE]; + char netaddressfield[STRING_SIZE]; + char netmaskfield[STRING_SIZE]; + char broadcastfield[STRING_SIZE]; + char address[STRING_SIZE]; + char netmask[STRING_SIZE]; + unsigned long int intaddress; + unsigned long int intnetaddress; + unsigned long int intnetmask; + unsigned long int intbroadcast; + struct in_addr temp; + char *netaddress; + char *broadcast; + + /* Build some key strings. */ + sprintf(addressfield, "%s_ADDRESS", colour); + sprintf(netaddressfield, "%s_NETADDRESS", colour); + sprintf(netmaskfield, "%s_NETMASK", colour); + sprintf(broadcastfield, "%s_BROADCAST", colour); + + strcpy(address, ""); findkey(kv, addressfield, address); + strcpy(netmask, ""); findkey(kv, netmaskfield, netmask); + + /* Calculate netaddress. Messy.. */ + intaddress = inet_addr(address); + intnetmask = inet_addr(netmask); + + intnetaddress = intaddress & intnetmask; + temp.s_addr = intnetaddress; + netaddress = inet_ntoa(temp); + + replacekeyvalue(kv, netaddressfield, netaddress); + + intbroadcast = intnetaddress | ~intnetmask; + temp.s_addr = intbroadcast; + broadcast = inet_ntoa(temp); + + replacekeyvalue(kv, broadcastfield, broadcast); + + return 1; +} + +/* Called when dhcp flag is toggled. Toggle disabled state of other 3 + * controls. */ +void networkdialogcallbacktype(newtComponent cm, void *data) +{ + char type[STRING_SIZE]; + + gettype(type); + + if (strcmp(type, "STATIC") != 0) + { + newtEntrySetFlags(addressentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + newtEntrySetFlags(netmaskentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + } + else + { + newtEntrySetFlags(addressentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); + newtEntrySetFlags(netmaskentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); + } + if (strcmp(type, "DHCP") == 0) + { + newtEntrySetFlags(dhcphostnameentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); + newtEntrySetFlags(dhcpforcemtuentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); + } + else + { + newtEntrySetFlags(dhcphostnameentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + newtEntrySetFlags(dhcpforcemtuentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + } + newtRefresh(); + newtDrawForm(networkform); +} + +int interfacecheck(struct keyvalue *kv, char *colour) +{ + char temp[STRING_SIZE]; + char colourfields[NETCHANGE_TOTAL][STRING_SIZE]; + int c; + + sprintf(colourfields[ADDRESS], "%s_ADDRESS", colour); + sprintf(colourfields[NETADDRESS], "%s_NETADDRESS", colour); + sprintf(colourfields[NETMASK], "%s_NETMASK", colour); + + for (c = 0; c < 3; c++) + { + strcpy(temp, ""); findkey(kv, colourfields[c], temp); + if (!(strlen(temp))) return 0; + } + return 1; +} + +/* Funky routine for loading all drivers (cept those are already loaded.). */ +int probecards(char *driver, char *driveroptions ) +{ + return 0; +} + +int get_knic(int card) //returns "0" for zero cards or error and "1" card is found. +{ + struct keyvalue *kv = initkeyvalues(); + char temp[STRING_SIZE], searchstr[STRING_SIZE]; + int ret_value; + + if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) + { + freekeyvalues(kv); + errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + return 0; + } + + sprintf(searchstr, "%s_MACADDR", ucolourcard[card]); + strcpy(temp, ""); findkey(kv, searchstr, temp); + if (strlen(temp)) { + strcpy(knics[ card ].macaddr, temp); + strcpy(knics[ card ].colour, ucolourcard[card]); + + sprintf(searchstr, "%s_DESCRIPTION", ucolourcard[card]); + findkey(kv, searchstr, temp); + strcpy(knics[ card ].description, temp); + + sprintf(searchstr, "%s_DRIVER", ucolourcard[card]); + findkey(kv, searchstr, temp); + strcpy(knics[ card ].driver, temp); + ret_value = 1; + } else { + strcpy(knics[ card ].description, ctr[TR_UNSET]); + ret_value = 0; + } + freekeyvalues(kv); + + return ret_value; +} + +int init_knics(void) +{ + int found = 0; + found += get_knic(_GREEN_CARD_); + found += get_knic(_RED_CARD_); + found += get_knic(_ORANGE_CARD_); + found += get_knic(_BLUE_CARD_); + + return found; +} + +int fmt_exists(const char *fname) { /* Check if it is any file or directory */ + struct stat st; + if (stat(fname, &st) == -1) return 0; + else return 1; +} + +int is_interface_up(char *card) { /* Check if the interface is UP */ + char temp[STRING_SIZE]; + + sprintf(temp,"ip link show dev %s | grep -q UP", card); + if (mysystem(temp)) return 0; else return 1; +} + +int rename_device(char *old_name, char *new_name) { + char temp[STRING_SIZE]; + + sprintf(temp,SYSDIR "/%s", old_name); + if (!(fmt_exists(temp))) { + fprintf(flog,"Device not found: %s\n",old_name); + return 0; + } + sprintf(temp,"/sbin/ip link set dev %s name %s",old_name ,new_name ); + mysystem(temp); + + return 1; +} + +char g_temp[STRING_SIZE]=""; +char* readmac(char *card) { + FILE *fp; + char temp[STRING_SIZE], mac[20]; + + sprintf(temp,"/sys/class/net/%s/address",card); + if( (fp = fopen(temp, "r")) == NULL ) { + fprintf(flog,"Couldn't open: %s\n",temp); + return NULL; + } + fgets(mac, 18, fp); + strtok(mac,"\n"); + fclose(fp); + strcpy(g_temp, mac); + return g_temp; +} + +char* find_nic4mac(char *findmac) { + DIR *dir; + struct dirent *dirzeiger; + char temp[STRING_SIZE], temp2[STRING_SIZE]; + + if((dir=opendir(SYSDIR)) == NULL) { + fprintf(flog,"Fehler bei opendir (find_name4nic) ...\n"); + return NULL; + } + + sprintf(temp, ""); + while((dirzeiger=readdir(dir)) != NULL) { + if(*((*dirzeiger).d_name) != '.' & strcmp(((*dirzeiger).d_name), "lo") != 0) { + sprintf(temp2, "%s", readmac((*dirzeiger).d_name) ); + if (strcmp(findmac, temp2) == 0) { + sprintf(temp,"%s", (*dirzeiger).d_name); + break; + } + } + } + + if(closedir(dir) == -1) fprintf(flog,"Fehler beim schliessen von %s\n", SYSDIR); + strcpy(g_temp, temp); + return g_temp; +} + +int nic_shutdown(char *nic) { + char temp[STRING_SIZE]; + + sprintf(temp,"ip link set %s down", nic); + mysystem(temp); +} + +int nic_startup(char *nic) { + char temp[STRING_SIZE]; + + sprintf(temp,"ip link set %s up", nic); + mysystem(temp); + +} + +int rename_nics(void) { + int i, j, k; + int fnics = scan_network_cards(); + char nic2find[STRING_SIZE], temp[STRING_SIZE]; + + for(i=0; i<4; i++) + if (strcmp(knics[i].macaddr, "")) + for(j=0; j 15 ) { + sprintf(nics[count].nic, "%s", find_nic4mac(nics[count].macaddr)); + count++; + } + } + fclose(fp); + scanned_nics_read_done = count; + } else fprintf(flog,"Scan Networkcards does read.\n"); + return scanned_nics_read_done; +} + + + +int nicmenu(int colour) +{ + int rc, choise = 0, count = 0, kcount = 0, mcount = 0, i, j, nic_in_use; + int found_NIC_as_Card[4]; + char message[STRING_SIZE]; + char temp[STRING_SIZE]; + + char cMenuInhalt[STRING_SIZE]; + char MenuInhalt[20][180]; + char *pMenuInhalt[20]; + + while (strcmp(nics[count].macaddr, "")) count++; // 2 find how many nics in system + for ( i=0 ; i<4;i++) if (strcmp(knics[i].macaddr, "")) kcount++; // loop to find all knowing nics + + // If new nics are found... + if (count > kcount) { + for (i=0 ; i < count ; i++) + { + nic_in_use = 0; + for (j=0 ; j <= kcount ; j++) { + if (strcmp(nics[ i ].macaddr, knics[ j ].macaddr) == 0 ) { + nic_in_use = 1; + break; + } + } + if (!(nic_in_use)) { + if ( strlen(nics[i].description) < 55 ) + sprintf(MenuInhalt[mcount], "%.*s", strlen(nics[i].description)-2, nics[i].description+1); + else { + sprintf(cMenuInhalt, "%.50s", nics[i].description + 1); + sprintf(MenuInhalt[mcount], cMenuInhalt); + strcat (MenuInhalt[mcount], "..."); + } + + while ( strlen(MenuInhalt[mcount]) < 53) strcat(MenuInhalt[mcount], " "); // Fill with space. + + strcat(MenuInhalt[mcount], " ("); + strcat(MenuInhalt[mcount], nics[i].macaddr); + strcat(MenuInhalt[mcount], ")"); + pMenuInhalt[mcount] = MenuInhalt[mcount]; + found_NIC_as_Card[mcount]=i; + mcount++; + } + } + + pMenuInhalt[mcount] = NULL; + + sprintf(message, ctr[TR_CHOOSE_NETCARD], ucolourcard[colour]); + rc=2; + while ( rc == 2 ) { + rc = newtWinMenu( ctr[TR_NETCARDMENU2], message, 50, 5, 5, 6, pMenuInhalt, &choise, ctr[TR_SELECT], ctr[TR_IDENTIFY], ctr[TR_CANCEL], NULL); + if ( rc == 2 ) { + sprintf(temp, "/sbin/ip link set %s up", nics[found_NIC_as_Card[choise]].nic); + mysystem(temp); + sprintf(temp, "/usr/sbin/ethtool -p %s 10", nics[found_NIC_as_Card[choise]].nic); + if (runcommandwithstatus(temp,ctr[TR_IDENTIFY_SHOULD_BLINK]) != 0) { + errorbox(ctr[TR_IDENTIFY_NOT_SUPPORTED]); + sprintf(temp, "/sbin/ip link set %s down", nics[found_NIC_as_Card[choise]].nic); + mysystem(temp); + } + } + } + if ( rc == 0 || rc == 1) { + write_configs_netudev(found_NIC_as_Card[choise], colour); + } + return 0; + } else { + // We have to add here that you can manually add a device + errorbox( ctr[TR_ERROR_INTERFACES]); + return 1; + } +} + +int clear_card_entry(int card) +{ + struct keyvalue *kv = initkeyvalues(); + char temp[STRING_SIZE]; + + if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) + { + freekeyvalues(kv); + errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + return 0; + } + + strcpy(knics[card].driver, ""); + strcpy(knics[card].description, ctr[TR_UNSET]); + strcpy(knics[card].macaddr, ""); + strcpy(knics[card].colour, ""); + sprintf(temp, "%s_DRIVER", ucolourcard[card]); + replacekeyvalue(kv, temp, ""); + sprintf(temp, "%s_DEV", ucolourcard[card]); + replacekeyvalue(kv, temp, ""); + sprintf(temp, "%s_MACADDR", ucolourcard[card]); + replacekeyvalue(kv, temp, ""); + sprintf(temp, "%s_DESCRIPTION", ucolourcard[card]); + replacekeyvalue(kv, temp, ""); + + writekeyvalues(kv, CONFIG_ROOT "/ethernet/settings"); + freekeyvalues(kv); + + return 0; +} + +int ask_clear_card_entry(int card) +{ + char message[STRING_SIZE]; + int rc; + + sprintf(message, ctr[TR_REMOVE_CARD], ucolourcard[card]); + rc = newtWinChoice(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_CANCEL], message); + + if ( rc = 0 || rc == 1) { + clear_card_entry(card); + } else return 1; + + return 0; +} + +/* Manual entry for gurus. */ +int manualdriver(char *driver, char *driveroptions) +{ + char *values[] = { NULL, NULL }; /* pointers for the values. */ + struct newtWinEntry entries[] = + { { "", &values[0], 0,}, { NULL, NULL, 0 } }; + int rc; + char commandstring[STRING_SIZE]; + char *driverend; + + strcpy(driver, ""); + strcpy(driveroptions, ""); + + rc = newtWinEntries(ctr[TR_SELECT_NETWORK_DRIVER], + ctr[TR_MODULE_PARAMETERS], 50, 5, 5, 40, entries, + ctr[TR_OK], ctr[TR_CANCEL], NULL); + if (rc == 0 || rc == 1) + { + if (strlen(values[0])) + { + sprintf(commandstring, "/sbin/modprobe %s", values[0]); + if (runcommandwithstatus(commandstring, ctr[TR_LOADING_MODULE]) == 0) + { + if ((driverend = strchr(values[0], ' '))) + { + *driverend = '\0'; + strcpy(driver, values[0]); + strcpy(driveroptions, driverend + 1); + } + else + { + strcpy(driver, values[0]); + strcpy(driveroptions, ""); + } + } + else + errorbox(ctr[TR_UNABLE_TO_LOAD_DRIVER_MODULE]); + } + else + errorbox(ctr[TR_MODULE_NAME_CANNOT_BE_BLANK]); + } + free(values[0]); + + return 1; +} diff --git a/src/install+setup/setup/networking.c b/src/setup/networking.c similarity index 100% rename from src/install+setup/setup/networking.c rename to src/setup/networking.c diff --git a/src/install+setup/setup/passwords.c b/src/setup/passwords.c similarity index 100% rename from src/install+setup/setup/passwords.c rename to src/setup/passwords.c diff --git a/src/setup/setup.h b/src/setup/setup.h new file mode 100644 index 000000000..71f7e6f11 --- /dev/null +++ b/src/setup/setup.h @@ -0,0 +1,86 @@ +/* SmoothWall setup program. + * + * This program is distributed under the terms of the GNU General Public + * Licence. See the file COPYING for details. + * + * (c) Lawrence Manning, 2001 + * Main include file. + * + * $Id: setup.h,v 1.4 2003/12/11 11:25:54 riddles Exp $ + * + */ + +#include "../libsmooth/libsmooth.h" + +/* hostname.c */ +int handlehostname(void); + +/* domainname.c */ +int handledomainname(void); + +/* networking.c */ +int handlenetworking(void); + +/* dhcp.c */ +int handledhcp(void); + +/* passwords.c */ +int handlerootpassword(void); +int handlesetuppassword(void); +int handleadminpassword(void); + +/* misc.c */ +int writehostsfiles(void); +int handleisdn(void); + +/* keymap.c */ +int handlekeymap(void); + +/* timezone.c */ +int handletimezone(void); + +/* netstuff.c */ +#define ADDRESS 0 +#define NETADDRESS 1 +#define NETMASK 2 +#define DHCP 3 +#define NETCHANGE_TOTAL 4 + +#define SCANNED_NICS "/var/ipfire/ethernet/scanned_nics" +#define SYSDIR "/sys/class/net" + +#define _GREEN_CARD_ 0 +#define _RED_CARD_ 1 +#define _ORANGE_CARD_ 2 +#define _BLUE_CARD_ 3 + +struct nic +{ + char driver[80]; + char description[256]; + char macaddr[20]; + char nic[20]; +}; + +struct knic +{ + char driver[80]; + char description[256]; + char macaddr[20]; + char colour[20]; +}; + +int changeaddress(struct keyvalue *kv, char *colour, int typeflag, + char *defaultdhcphostname); +int gettype(char *type); +int setnetaddress(struct keyvalue *kv, char *colour); +void networkdialogcallbacktype(newtComponent cm, void *data); +int interfacecheck(struct keyvalue *kv, char *colour); +int rename_nics(void); +int init_knics(void); +int create_udev(void); +int scan_network_cards(void); +int nicmenu(int colour); +int clear_card_entry(int cards); +int ask_clear_card_entry(int cards); +int manualdriver(char *driver, char *driveroptions); diff --git a/src/install+setup/setup/timezone.c b/src/setup/timezone.c similarity index 100% rename from src/install+setup/setup/timezone.c rename to src/setup/timezone.c From 5315fae6b3cf1b773c792b7e999bf60513696182 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 30 Jul 2014 22:04:35 +0200 Subject: [PATCH 052/297] Move installer to its own directory. --- lfs/cdrom | 2 +- lfs/installer | 32 +- src/install+setup/install/config.c | 87 ------ src/install+setup/install/probenic.sh | 90 ------ .../install => installer}/Makefile | 4 +- src/installer/Makefile.am | 80 +++++ src/installer/autogen.sh | 3 + src/installer/configure.ac | 95 ++++++ .../install => installer}/downloadsource.sh | 0 .../dracut-module/70-dhcpcd.exe | 0 .../dracut-module/fake-root.sh | 0 .../dracut-module/module-setup.sh | 5 + .../dracut-module/run-installer.sh | 0 src/{install+setup/install => installer}/hw.c | 13 +- src/{install+setup/install => installer}/hw.h | 0 .../install => installer}/install.h | 12 +- src/installer/m4/attributes.m4 | 288 ++++++++++++++++++ .../install => installer}/main.c | 154 +++++----- .../install => installer}/mountdest.sh | 0 .../install => installer}/unattended.c | 2 +- 20 files changed, 579 insertions(+), 288 deletions(-) delete mode 100644 src/install+setup/install/config.c delete mode 100644 src/install+setup/install/probenic.sh rename src/{install+setup/install => installer}/Makefile (94%) create mode 100644 src/installer/Makefile.am create mode 100755 src/installer/autogen.sh create mode 100644 src/installer/configure.ac rename src/{install+setup/install => installer}/downloadsource.sh (100%) rename src/{install+setup/install => installer}/dracut-module/70-dhcpcd.exe (100%) rename src/{install+setup/install => installer}/dracut-module/fake-root.sh (100%) rename src/{install+setup/install => installer}/dracut-module/module-setup.sh (90%) rename src/{install+setup/install => installer}/dracut-module/run-installer.sh (100%) rename src/{install+setup/install => installer}/hw.c (99%) rename src/{install+setup/install => installer}/hw.h (100%) rename src/{install+setup/install => installer}/install.h (51%) create mode 100644 src/installer/m4/attributes.m4 rename src/{install+setup/install => installer}/main.c (74%) rename src/{install+setup/install => installer}/mountdest.sh (100%) rename src/{install+setup/install => installer}/unattended.c (98%) diff --git a/lfs/cdrom b/lfs/cdrom index f5520dca2..1d9af4278 100644 --- a/lfs/cdrom +++ b/lfs/cdrom @@ -78,7 +78,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) tar -x -C /tmp -f /$(SNAME).tar rm -f /$(SNAME).tar @mkdir /tmp/sys - cd /tmp && tar cf /install/cdrom/$(SNAME)-$(VERSION).tlz $(TAR_OPTIONS) * && rm -rf * + cd /tmp && tar cf /install/cdrom/distro.img $(TAR_OPTIONS) * && rm -rf * # Other files touch /install/cdrom/$(SNAME)-$(VERSION)-core$(CORE).media diff --git a/lfs/installer b/lfs/installer index f25268bfd..86862b8bc 100644 --- a/lfs/installer +++ b/lfs/installer @@ -48,26 +48,20 @@ md5 : $(TARGET) : @$(PREBUILD) - -mkdir -p /install/initrd/bin - @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/install+setup/* $(DIR_APP) - for i in $(DIR_SRC)/langs/*/install/lang_*.c ; do \ - cp $$i $(DIR_APP)/libsmooth; \ - done - cd $(DIR_APP)/libsmooth && chmod 755 makelangs.pl - cd $(DIR_APP)/libsmooth && make CFLAGS="-Os -fomit-frame-pointer -Wall \ - -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \ - -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'" - cd $(DIR_APP)/install && make CFLAGS="-Os -std=gnu99 -fomit-frame-pointer -Wall \ - -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \ - -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"' -DKERNEL_VERSION='\"$(KVER)\"'" - cd $(DIR_APP)/install && install -v -m 0755 installer probenic.sh \ - downloadsource.sh mountdest.sh /usr/bin - rm -rvf /usr/lib/dracut/modules.d/99installer - cd $(DIR_APP)/install && cp -rvf dracut-module /usr/lib/dracut/modules.d/99installer + @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/installer/* $(DIR_APP) + + cd $(DIR_APP) && ./autogen.sh + cd $(DIR_APP) && ./configure \ + --prefix=/usr \ + --with-distro-name="$(NAME)" \ + --with-distro-sname="$(SNAME)" \ + --with-distro-slogan="$(SLOGAN)" \ + --with-config-root="$(CONFIG_ROOT)" + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install #Patch ISO Name for download ... - sed -i -e "s|ipfire.iso|download.ipfire.org/releases/ipfire-2.x/$(VERSION)-core$(CORE)/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso|g" \ - /usr/bin/downloadsource.sh - #Patch version for mediacheck ... + #sed -i -e "s|ipfire.iso|download.ipfire.org/releases/ipfire-2.x/$(VERSION)-core$(CORE)/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso|g" \ + # /usr/bin/downloadsource.sh @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/install+setup/install/config.c b/src/install+setup/install/config.c deleted file mode 100644 index b1d533e4f..000000000 --- a/src/install+setup/install/config.c +++ /dev/null @@ -1,87 +0,0 @@ -/* SmoothWall install program. - * - * This program is distributed under the terms of the GNU General Public - * Licence. See the file COPYING for details. - * - * (c) Lawrence Manning, 2001 - * Write the config and get password stuff. - * - */ - -#include "install.h" - -extern FILE *flog; -extern char *mylog; - -extern char **ctr; - -int write_lang_configs( char *lang) -{ - struct keyvalue *kv = initkeyvalues(); - - /* default stuff for main/settings. */ - replacekeyvalue(kv, "LANGUAGE", lang); - replacekeyvalue(kv, "HOSTNAME", SNAME); - replacekeyvalue(kv, "THEME", "ipfire"); - writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings"); - freekeyvalues(kv); - - return 1; -} - -int write_ethernet_configs(struct keyvalue *ethernetkv) -{ - /* Write out the network settings we got from a few mins ago. */ - writekeyvalues(ethernetkv, "/harddisk" CONFIG_ROOT "/ethernet/settings"); - return 1; -} - -/* Taken from the cdrom one. */ -int getpassword(char *password, char *text) -{ - char *values[] = { NULL, NULL, NULL }; /* pointers for the values. */ - struct newtWinEntry entries[] = - { - { ctr[TR_PASSWORD_PROMPT], &values[0], 2 }, - { ctr[TR_AGAIN_PROMPT], &values[1], 2 }, - { NULL, NULL, 0 } - }; - char title[STRING_SIZE]; - int rc; - int done; - - do - { - done = 1; - sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN); - rc = newtWinEntries(title, text, - 50, 5, 5, 20, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL); - - if (rc != 2) - { - if (strlen(values[0]) == 0 || strlen(values[1]) == 0) - { - errorbox(ctr[TR_PASSWORD_CANNOT_BE_BLANK]); - done = 0; - strcpy(values[0], ""); - strcpy(values[1], ""); - } - else if (strcmp(values[0], values[1]) != 0) - { - errorbox(ctr[TR_PASSWORDS_DO_NOT_MATCH]); - done = 0; - strcpy(values[0], ""); - strcpy(values[1], ""); - } - } - } - while (!done); - - strncpy(password, values[0], STRING_SIZE); - - if (values[0]) free(values[0]); - if (values[1]) free(values[1]); - - return rc; -} - diff --git a/src/install+setup/install/probenic.sh b/src/install+setup/install/probenic.sh deleted file mode 100644 index 6c01cbb45..000000000 --- a/src/install+setup/install/probenic.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2011 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -if [ -e /var/ipfire/ethernet/scanned_nics ]; then - rm -f /var/ipfire/ethernet/scanned_nics -fi -touch /var/ipfire/ethernet/scanned_nics - -for card in `ls /sys/class/net`; do - - #Check if this is an Ethernet device (type=1) - if [ `cat /sys/class/net/$card/type` == "1" ]; then - hwaddr=`cat /sys/class/net/$card/address` - - #Check that is no VLAN if - if [[ ! "$card" =~ "[.]" ]]; then - - #check if this not a bridge - if [ ! -e /sys/class/net/$card/brforward ]; then - - #Check if mac is valid (not 00:00... or FF:FF...) - if [ ! "$hwaddr" == "00:00:00:00:00:00" ];then - if [ ! "$hwaddr" == "ff:ff:ff:ff:ff:ff" ];then - - driver=`grep DRIVER= /sys/class/net/$card/device/uevent | cut -d"=" -f2` - type=`grep MODALIAS= /sys/class/net/$card/device/uevent | cut -d"=" -f2 | cut -d":" -f1` - - #Default if not available in /sys/class/net - if [ "a$type" == "a" ]; then - type="???" - fi - if [ "a$driver" == "a" ]; then - driver="Unknown Network Interface ($card)" - fi - description=`echo $type: $driver` - - #Get more details for pci and usb devices - if [ "$type" == "pci" ]; then - slotname=`grep PCI_SLOT_NAME= /sys/class/net/$card/device/uevent | cut -d"=" -f2` - name=`lspci -s $slotname | cut -d':' -f3 | cut -c 2-` - description=`echo $type: $name` - fi - if [ "$type" == "usb" ]; then - bus=`grep DEVICE= /sys/class/net/$card/device/uevent | cut -d"/" -f5` - dev=`grep DEVICE= /sys/class/net/$card/device/uevent | cut -d"/" -f6` - #work around the base8 convert - let bus=`echo 1$bus`-1000 - let dev=`echo 1$dev`-1000 - name=`lsusb -s $bus:$dev | cut -d':' -f3 | cut -c 6-` - #kernel higher 3.2 changes - if [ "$name" == "" ]; then - vid=`grep PRODUCT= /sys/class/net/$card/device/uevent | cut -d"=" -f2 | cut -d"/" -f1` - pid=`grep PRODUCT= /sys/class/net/$card/device/uevent | cut -d"=" -f2 | cut -d"/" -f2` - name=`lsusb -d $vid:$pid | cut -d':' -f3 | cut -c 6-` - fi - description=`echo $type: $name` - fi - - echo desc: \"$description\" >>/var/ipfire/ethernet/scanned_nics - echo driver: $driver >>/var/ipfire/ethernet/scanned_nics - echo network.hwaddr: $hwaddr >>/var/ipfire/ethernet/scanned_nics - fi - fi - fi - fi - fi -done - -# Revert Accesspoint marking at mac address -sed -i 's|hwaddr: 06:|hwaddr: 00:|g' /var/ipfire/ethernet/scanned_nics - -exit 0 diff --git a/src/install+setup/install/Makefile b/src/installer/Makefile similarity index 94% rename from src/install+setup/install/Makefile rename to src/installer/Makefile index a78611718..928520e41 100644 --- a/src/install+setup/install/Makefile +++ b/src/installer/Makefile @@ -25,7 +25,7 @@ INCLUDE = LD = gcc LDFLAGS = -LIBS = -lnewt -lslang -lpci -ludev -lblkid +LIBS = -lnewt -lslang -lpci -ludev -lblkid -lsmooth COMPILE = $(CC) -c $(INCLUDE) $(CFLAGS) @@ -40,7 +40,7 @@ clean : ###### -OBJS=main.o config.o ../libsmooth/libsmooth.o unattended.o hw.o +OBJS=main.o unattended.o hw.o installer: $(OBJS) $(LINK) $(OBJS) -o $@ $(LIBS) diff --git a/src/installer/Makefile.am b/src/installer/Makefile.am new file mode 100644 index 000000000..14436f0a4 --- /dev/null +++ b/src/installer/Makefile.am @@ -0,0 +1,80 @@ +# This file is part of the libsmooth library. +# +# libsmooth is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} +AM_MAKEFLAGS = --no-print-directory +AUTOMAKE_OPTIONS = color-tests parallel-tests + +SUBDIRS = . + +# remove targets if the command fails +.DELETE_ON_ERROR: + +# keep intermediate files +.SECONDARY: + +CLEANFILES = +EXTRA_DIST = +dracutmoduledir = $(prefix)/lib/dracut/modules.d/99installer + +AM_CPPFLAGS = \ + -include $(top_builddir)/config.h \ + -I $(top_srcdir)/include \ + $(OUR_CPPFLAGS) + +AM_CFLAGS = $(OUR_CFLAGS) +AM_LDFLAGS = $(OUR_LDFLAGS) + +bin_PROGRAMS = \ + installer + +bin_SCRIPTS = \ + downloadsource.sh + +#- installer ------------------------------------------------------------------- + +installer_SOURCES = \ + hw.c \ + hw.h \ + main.c \ + unattended.c + +installer_CFLAGS = \ + $(BLKID_CFLAGS) \ + $(LIBSMOOTH_CFLAGS) \ + $(PCI_CFLAGS) \ + $(UDEV_CFLAGS) + +installer_LDADD = \ + $(BLKID_LIBS) \ + $(LIBSMOOTH_LIBS) \ + $(NEWT_LIBS) \ + $(PCI_LIBS) \ + $(UDEV_LIBS) + +dracutmodule_DATA = \ + dracut-module/70-dhcpcd.exe \ + dracut-module/fake-root.sh \ + dracut-module/module-setup.sh \ + dracut-module/run-installer.sh + +#------------------------------------------------------------------------------- + +substitutions = \ + '|PACKAGE_NAME=$(PACKAGE_NAME)|' \ + '|PACKAGE_VERSION=$(PACKAGE_VERSION)|' \ + '|prefix=$(prefix)|' \ + '|exec_prefix=$(exec_prefix)|' \ + '|libdir=$(libdir)|' \ + '|includedir=$(includedir)|' + +SED_PROCESS = \ + $(AM_V_GEN)$(MKDIR_P) $(dir $@) && \ + $(SED) $(subst '|,-e 's|@,$(subst =,\@|,$(subst |',|g',$(substitutions)))) < $< > $@ + +%.pc: %.pc.in Makefile + $(SED_PROCESS) diff --git a/src/installer/autogen.sh b/src/installer/autogen.sh new file mode 100755 index 000000000..306548864 --- /dev/null +++ b/src/installer/autogen.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +autoreconf --force --install -I m4 diff --git a/src/installer/configure.ac b/src/installer/configure.ac new file mode 100644 index 000000000..9a3c45529 --- /dev/null +++ b/src/installer/configure.ac @@ -0,0 +1,95 @@ +# This file is part of the installer. +# +# installer is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +AC_PREREQ([2.64]) + +AC_INIT([installer], + [001], + [], + [installer], + [http://git.ipfire.org/?p=ipfire-2.x.git;a=summary]) + +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_AUX_DIR([build-aux]) + +AM_INIT_AUTOMAKE([ + foreign + 1.11 + -Wall + -Wno-portability + silent-rules + tar-pax + no-dist-gzip + dist-xz + subdir-objects +]) +AM_SILENT_RULES([yes]) + +LT_PREREQ(2.2) +LT_INIT([disable-static]) + +AC_PROG_SED + +AC_PROG_CC +AC_PROG_CC_C99 +AC_PROG_CC_C_O + +AC_PATH_PROG([M4], [m4]) + +AC_CHECK_HEADERS([libintl.h]) + +# This makes sure pkg.m4 is available. +m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config]) + +save_LIBS="$LIBS" + +# newt +LIBS= +AC_SEARCH_LIBS([newtWinMenu], [newt], [], [AC_MSG_ERROR([*** newt library not found])]) +NEWT_LIBS="$LIBS" +AC_SUBST(NEWT_LIBS) + +LIBS="$save_LIBS" + +PKG_CHECK_MODULES(BLKID, [blkid]) +PKG_CHECK_MODULES(PCI, [libpci]) +PKG_CHECK_MODULES(LIBSMOOTH, [libsmooth]) +PKG_CHECK_MODULES(UDEV, [libudev]) + +AC_ARG_WITH([distro-name], + AS_HELP_STRING([--with-distro-name] [The name of the distribution]), + AC_DEFINE_UNQUOTED([NAME], "$withval", [The name of the distribution]), + AC_MSG_ERROR([*** you need to set the name with --with-distro-name=])) + +AC_ARG_WITH([distro-sname], + AS_HELP_STRING([--with-distro-sname] [The short name of the distribution]), + AC_DEFINE_UNQUOTED([SNAME], "$withval", [The sname of the distribution]), + AC_MSG_ERROR([*** you need to set the sname with --with-distro-sname=])) + +AC_ARG_WITH([distro-slogan], + AS_HELP_STRING([--with-distro-slogan] [The slogan of the distribution]), + AC_DEFINE_UNQUOTED([SLOGAN], "$withval", [The slogan of the distribution]), + AC_MSG_ERROR([*** you need to set the slogan with --with-distro-slogan=])) + +AC_ARG_WITH([config-root], + AS_HELP_STRING([--with-distro-config-root] [The configuration directory]), + AC_DEFINE_UNQUOTED([CONFIG_ROOT], "$withval", [The config-root]), + AC_MSG_ERROR([*** you need to set CONFIG_ROOT with --with-config-root=])) + +AC_CONFIG_FILES([ + Makefile +]) + +AC_OUTPUT +AC_MSG_RESULT([ + $PACKAGE_NAME $VERSION + + CFLAGS: ${OUR_CFLAGS} ${CFLAGS} + CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS} + LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS} +]) diff --git a/src/install+setup/install/downloadsource.sh b/src/installer/downloadsource.sh similarity index 100% rename from src/install+setup/install/downloadsource.sh rename to src/installer/downloadsource.sh diff --git a/src/install+setup/install/dracut-module/70-dhcpcd.exe b/src/installer/dracut-module/70-dhcpcd.exe similarity index 100% rename from src/install+setup/install/dracut-module/70-dhcpcd.exe rename to src/installer/dracut-module/70-dhcpcd.exe diff --git a/src/install+setup/install/dracut-module/fake-root.sh b/src/installer/dracut-module/fake-root.sh similarity index 100% rename from src/install+setup/install/dracut-module/fake-root.sh rename to src/installer/dracut-module/fake-root.sh diff --git a/src/install+setup/install/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh similarity index 90% rename from src/install+setup/install/dracut-module/module-setup.sh rename to src/installer/dracut-module/module-setup.sh index ad8c4eab8..396cbdf3b 100755 --- a/src/install+setup/install/dracut-module/module-setup.sh +++ b/src/installer/dracut-module/module-setup.sh @@ -15,6 +15,7 @@ depends() { # called by dracut install() { + inst /etc/system-release inst /usr/bin/installer inst /usr/bin/downloadsource.sh inst /usr/local/bin/iowrap @@ -56,6 +57,10 @@ install() { done done + # Bash start files + inst_multiple /etc/profile /root/.bash_profile /etc/bashrc /root/.bashrc + inst_dir /etc/profile.d + inst_hook cmdline 99 "$moddir/fake-root.sh" inst_hook pre-mount 99 "$moddir/run-installer.sh" diff --git a/src/install+setup/install/dracut-module/run-installer.sh b/src/installer/dracut-module/run-installer.sh similarity index 100% rename from src/install+setup/install/dracut-module/run-installer.sh rename to src/installer/dracut-module/run-installer.sh diff --git a/src/install+setup/install/hw.c b/src/installer/hw.c similarity index 99% rename from src/install+setup/install/hw.c rename to src/installer/hw.c index 148523137..4976f5322 100644 --- a/src/install+setup/install/hw.c +++ b/src/installer/hw.c @@ -37,8 +37,9 @@ #include +#include + #include "hw.h" -#include "../libsmooth/libsmooth.h" const char* other_filesystems[] = { "/dev", @@ -97,16 +98,16 @@ static int hw_test_source_medium(const char* path) { // If the source could not be mounted we // cannot proceed. - if (ret) + if (ret != 0) return ret; // Check if the test file exists. - ret = access(SOURCE_TEST_FILE, F_OK); + ret = access(SOURCE_TEST_FILE, R_OK); // Umount the test device. hw_umount(SOURCE_MOUNT_PATH); - return ret; + return (ret == 0); } char* hw_find_source_medium(struct hw* hw) { @@ -131,7 +132,7 @@ char* hw_find_source_medium(struct hw* hw) { strstartswith(dev_path, "/dev/ram") || strstartswith(dev_path, "/dev/md")) continue; - if (hw_test_source_medium(dev_path)) { + if (hw_test_source_medium(dev_path) == 0) { ret = strdup(dev_path); } @@ -350,7 +351,7 @@ static int hw_calculate_partition_table(struct hw_destination* dest) { // Determine the size of the target block device if (dest->is_raid) { dest->size = (dest->disk1->size >= dest->disk2->size) ? - dest->disk1->size : dest->disk2->size; + dest->disk2->size : dest->disk1->size; // The RAID will install some metadata at the end of the disk // and we will save up some space for that. diff --git a/src/install+setup/install/hw.h b/src/installer/hw.h similarity index 100% rename from src/install+setup/install/hw.h rename to src/installer/hw.h diff --git a/src/install+setup/install/install.h b/src/installer/install.h similarity index 51% rename from src/install+setup/install/install.h rename to src/installer/install.h index 500d435f7..d21fbdecd 100644 --- a/src/install+setup/install/install.h +++ b/src/installer/install.h @@ -8,17 +8,7 @@ * */ -#include "../libsmooth/libsmooth.h" - -#define IDE_EMPTY 0 -#define IDE_CDROM 1 -#define IDE_HD 2 -#define IDE_UNKNOWN 3 - -/* config.c */ -int write_disk_configs(struct devparams *dp); -int write_lang_configs( char *lang); -int write_ethernet_configs(struct keyvalue *ethernetkv); +#include /* unattended.c */ int unattended_setup(struct keyvalue *unattendedkv); diff --git a/src/installer/m4/attributes.m4 b/src/installer/m4/attributes.m4 new file mode 100644 index 000000000..7e080da65 --- /dev/null +++ b/src/installer/m4/attributes.m4 @@ -0,0 +1,288 @@ +dnl Macros to check the presence of generic (non-typed) symbols. +dnl Copyright (c) 2006-2008 Diego Pettenò +dnl Copyright (c) 2006-2008 xine project +dnl Copyright (c) 2012 Lucas De Marchi +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +dnl 02110-1301, USA. +dnl +dnl As a special exception, the copyright owners of the +dnl macro gives unlimited permission to copy, distribute and modify the +dnl configure scripts that are the output of Autoconf when processing the +dnl Macro. You need not follow the terms of the GNU General Public +dnl License when using or distributing such scripts, even though portions +dnl of the text of the Macro appear in them. The GNU General Public +dnl License (GPL) does govern all other use of the material that +dnl constitutes the Autoconf Macro. +dnl +dnl This special exception to the GPL applies to versions of the +dnl Autoconf Macro released by this project. When you make and +dnl distribute a modified version of the Autoconf Macro, you may extend +dnl this special exception to the GPL to apply to your modified version as +dnl well. + +dnl Check if FLAG in ENV-VAR is supported by compiler and append it +dnl to WHERE-TO-APPEND variable +dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG]) + +AC_DEFUN([CC_CHECK_FLAG_APPEND], [ + AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2], + AS_TR_SH([cc_cv_$2_$3]), + [eval "AS_TR_SH([cc_save_$2])='${$2}'" + eval "AS_TR_SH([$2])='-Werror $3'" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a = 0; int main(void) { return a; } ])], + [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"], + [eval "AS_TR_SH([cc_cv_$2_$3])='no'"]) + eval "AS_TR_SH([$2])='$cc_save_$2'"]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes], + [eval "$1='${$1} $3'"]) +]) + +dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2]) +AC_DEFUN([CC_CHECK_FLAGS_APPEND], [ + for flag in $3; do + CC_CHECK_FLAG_APPEND($1, $2, $flag) + done +]) + +dnl Check if the flag is supported by linker (cacheable) +dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) + +AC_DEFUN([CC_CHECK_LDFLAGS], [ + AC_CACHE_CHECK([if $CC supports $1 flag], + AS_TR_SH([cc_cv_ldflags_$1]), + [ac_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $1" + AC_LINK_IFELSE([int main() { return 1; }], + [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"], + [eval "AS_TR_SH([cc_cv_ldflags_$1])="]) + LDFLAGS="$ac_save_LDFLAGS" + ]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes], + [$2], [$3]) +]) + +dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for +dnl the current linker to avoid undefined references in a shared object. +AC_DEFUN([CC_NOUNDEFINED], [ + dnl We check $host for which systems to enable this for. + AC_REQUIRE([AC_CANONICAL_HOST]) + + case $host in + dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads + dnl are requested, as different implementations are present; to avoid problems + dnl use -Wl,-z,defs only for those platform not behaving this way. + *-freebsd* | *-openbsd*) ;; + *) + dnl First of all check for the --no-undefined variant of GNU ld. This allows + dnl for a much more readable commandline, so that people can understand what + dnl it does without going to look for what the heck -z defs does. + for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do + CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"]) + break + done + ;; + esac + + AC_SUBST([LDFLAGS_NOUNDEFINED]) +]) + +dnl Check for a -Werror flag or equivalent. -Werror is the GCC +dnl and ICC flag that tells the compiler to treat all the warnings +dnl as fatal. We usually need this option to make sure that some +dnl constructs (like attributes) are not simply ignored. +dnl +dnl Other compilers don't support -Werror per se, but they support +dnl an equivalent flag: +dnl - Sun Studio compiler supports -errwarn=%all +AC_DEFUN([CC_CHECK_WERROR], [ + AC_CACHE_CHECK( + [for $CC way to treat warnings as errors], + [cc_cv_werror], + [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror], + [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])]) + ]) +]) + +AC_DEFUN([CC_CHECK_ATTRIBUTE], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))], + AS_TR_SH([cc_cv_attribute_$1]), + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])], + [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"], + [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"]) + CFLAGS="$ac_save_CFLAGS" + ]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes], + [AC_DEFINE( + AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1, + [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))] + ) + $4], + [$5]) +]) + +AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [ + CC_CHECK_ATTRIBUTE( + [constructor],, + [void __attribute__((constructor)) ctor() { int a; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_FORMAT], [ + CC_CHECK_ATTRIBUTE( + [format], [format(printf, n, n)], + [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [ + CC_CHECK_ATTRIBUTE( + [format_arg], [format_arg(printf)], + [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [ + CC_CHECK_ATTRIBUTE( + [visibility_$1], [visibility("$1")], + [void __attribute__((visibility("$1"))) $1_function() { }], + [$2], [$3]) +]) + +AC_DEFUN([CC_ATTRIBUTE_NONNULL], [ + CC_CHECK_ATTRIBUTE( + [nonnull], [nonnull()], + [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_UNUSED], [ + CC_CHECK_ATTRIBUTE( + [unused], , + [void some_function(void *foo, __attribute__((unused)) void *bar);], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [ + CC_CHECK_ATTRIBUTE( + [sentinel], , + [void some_function(void *foo, ...) __attribute__((sentinel));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [ + CC_CHECK_ATTRIBUTE( + [deprecated], , + [void some_function(void *foo, ...) __attribute__((deprecated));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_ALIAS], [ + CC_CHECK_ATTRIBUTE( + [alias], [weak, alias], + [void other_function(void *foo) { } + void some_function(void *foo) __attribute__((weak, alias("other_function")));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_MALLOC], [ + CC_CHECK_ATTRIBUTE( + [malloc], , + [void * __attribute__((malloc)) my_alloc(int n);], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_PACKED], [ + CC_CHECK_ATTRIBUTE( + [packed], , + [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_CONST], [ + CC_CHECK_ATTRIBUTE( + [const], , + [int __attribute__((const)) twopow(int n) { return 1 << n; } ], + [$1], [$2]) +]) + +AC_DEFUN([CC_FLAG_VISIBILITY], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([if $CC supports -fvisibility=hidden], + [cc_cv_flag_visibility], + [cc_flag_visibility_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden], + cc_cv_flag_visibility='yes', + cc_cv_flag_visibility='no') + CFLAGS="$cc_flag_visibility_save_CFLAGS"]) + + AS_IF([test "x$cc_cv_flag_visibility" = "xyes"], + [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1, + [Define this if the compiler supports the -fvisibility flag]) + $1], + [$2]) +]) + +AC_DEFUN([CC_FUNC_EXPECT], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([if compiler has __builtin_expect function], + [cc_cv_func_expect], + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + AC_COMPILE_IFELSE([AC_LANG_SOURCE( + [int some_function() { + int a = 3; + return (int)__builtin_expect(a, 3); + }])], + [cc_cv_func_expect=yes], + [cc_cv_func_expect=no]) + CFLAGS="$ac_save_CFLAGS" + ]) + + AS_IF([test "x$cc_cv_func_expect" = "xyes"], + [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1, + [Define this if the compiler supports __builtin_expect() function]) + $1], + [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported], + [cc_cv_attribute_aligned], + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + for cc_attribute_align_try in 64 32 16 8 4 2; do + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ + int main() { + static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0; + return c; + }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) + done + CFLAGS="$ac_save_CFLAGS" + ]) + + if test "x$cc_cv_attribute_aligned" != "x"; then + AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned], + [Define the highest alignment supported]) + fi +]) diff --git a/src/install+setup/install/main.c b/src/installer/main.c similarity index 74% rename from src/install+setup/install/main.c rename to src/installer/main.c index ce4716321..e32718b92 100644 --- a/src/install+setup/install/main.c +++ b/src/installer/main.c @@ -1,4 +1,3 @@ - /* SmoothWall install program. * * This program is distributed under the terms of the GNU General Public @@ -9,8 +8,6 @@ * */ -#define _GNU_SOURCE - #include #include #include @@ -19,7 +16,11 @@ #include "hw.h" #include "install.h" - + +// Translation +#include +#define _(x) dgettext("installer", x) + #define INST_FILECOUNT 21000 #define UNATTENDED_CONF "/cdrom/boot/unattended.conf" #define LICENSE_FILE "/cdrom/COPYING" @@ -31,18 +32,6 @@ char **ctr; extern char url[STRING_SIZE]; -struct nic nics[20] = { { "" , "" , "" } }; // only defined for compile -struct knic knics[20] = { { "" , "" , "" , "" } }; // only defined for compile - -extern char *en_tr[]; -extern char *es_tr[]; -extern char *de_tr[]; -extern char *fr_tr[]; -extern char *nl_tr[]; -extern char *pl_tr[]; -extern char *ru_tr[]; -extern char *tr_tr[]; - static int newtChecklist(const char* title, const char* message, unsigned int width, unsigned int height, unsigned int num_entries, const char** entries, int* states) { @@ -89,8 +78,8 @@ static int newtChecklist(const char* title, const char* message, newtFormAddComponents(form, textbox, subform, NULL); - newtComponent btn_okay = newtButton((width - 18) / 3, height - 4, ctr[TR_OK]); - newtComponent btn_cancel = newtButton((width - 18) / 3 * 2 + 9, height - 4, ctr[TR_CANCEL]); + newtComponent btn_okay = newtButton((width - 18) / 3, height - 4, _("OK")); + newtComponent btn_cancel = newtButton((width - 18) / 3 * 2 + 9, height - 4, _("Cancel")); newtFormAddComponents(form, btn_okay, btn_cancel, NULL); newtComponent answer = newtRunForm(form); @@ -157,10 +146,10 @@ static int newtLicenseBox(const char* title, const char* text, int width, int he newtFormAddComponent(form, textbox); char choice; - newtComponent checkbox = newtCheckbox(3, height - 3, ctr[TR_LICENSE_ACCEPT], + newtComponent checkbox = newtCheckbox(3, height - 3, _("I accept this license"), ' ', " *", &choice); - newtComponent btn = newtButton(width - 15, height - 4, ctr[TR_OK]); + newtComponent btn = newtButton(width - 15, height - 4, _("OK")); newtFormAddComponents(form, checkbox, btn, NULL); @@ -174,6 +163,19 @@ static int newtLicenseBox(const char* title, const char* text, int width, int he return ret; } +int write_lang_configs(const char *lang) { + struct keyvalue *kv = initkeyvalues(); + + /* default stuff for main/settings. */ + replacekeyvalue(kv, "LANGUAGE", lang); + replacekeyvalue(kv, "HOSTNAME", SNAME); + replacekeyvalue(kv, "THEME", "ipfire"); + writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings"); + freekeyvalues(kv); + + return 1; +} + int main(int argc, char *argv[]) { struct hw* hw = hw_init(); @@ -181,7 +183,6 @@ int main(int argc, char *argv[]) { char *langnames[] = { "Deutsch", "English", "Français", "Español", "Nederlands", "Polski", "Русский", "Türkçe", NULL }; char *shortlangnames[] = { "de", "en", "fr", "es", "nl", "pl", "ru", "tr", NULL }; - char **langtrs[] = { de_tr, en_tr, fr_tr, es_tr, nl_tr, pl_tr, ru_tr, tr_tr, NULL }; char* sourcedrive = NULL; int rc = 0; char commandstring[STRING_SIZE]; @@ -229,7 +230,7 @@ int main(int argc, char *argv[]) { // check if we have to make an unattended install if (strstr (line, "unattended") != NULL) { unattended = 1; - runcommandwithstatus("/bin/sleep 10", "WARNING: Unattended installation will start in 10 seconds..."); + runcommandwithstatus("/bin/sleep 10", title, "WARNING: Unattended installation will start in 10 seconds..."); } // check if we have to patch for serial console if (strstr (line, "console=ttyS0") != NULL) { @@ -255,14 +256,15 @@ int main(int argc, char *argv[]) { langnames, &choice, "Ok", NULL); } - ctr = langtrs[choice]; - strcpy(shortlangname, shortlangnames[choice]); + setlocale(LC_ALL, shortlangnames[choice]); - newtPushHelpLine(ctr[TR_HELPLINE]); + newtPushHelpLine(_("/ between elements | selects | next screen")); if (!unattended) { - sprintf(message, ctr[TR_WELCOME], NAME); - newtWinMessage(title, ctr[TR_OK], message); + snprintf(message, sizeof(message), + _("Welcome to the %s installation program. " + "Selecting Cancel on any of the following screens will reboot the computer."), NAME); + newtWinMessage(title, _("Start installation"), message); } /* Search for a source drive that holds the right @@ -271,10 +273,10 @@ int main(int argc, char *argv[]) { fprintf(flog, "Source drive: %s\n", sourcedrive); if (!sourcedrive) { - newtWinMessage(title, ctr[TR_OK], ctr[TR_NO_LOCAL_SOURCE]); - runcommandwithstatus("/bin/downloadsource.sh", ctr[TR_DOWNLOADING_ISO]); + newtWinMessage(title, _("OK"), _("No local source media found. Starting download.")); + runcommandwithstatus("/bin/downloadsource.sh", title, _("Downloading installation image ...")); if ((handle = fopen("/tmp/source_device", "r")) == NULL) { - errorbox(ctr[TR_DOWNLOAD_ERROR]); + errorbox(_("Download error")); goto EXIT; } @@ -309,7 +311,7 @@ int main(int argc, char *argv[]) { fclose(copying); if (newtLicenseBox(title, discl_msg, 75, 20)) { - errorbox(ctr[TR_LICENSE_NOT_ACCEPTED]); + errorbox(_("License not accepted!")); goto EXIT; } @@ -331,7 +333,7 @@ int main(int argc, char *argv[]) { while (1) { // no harddisks found if (num_disks == 0) { - errorbox(ctr[TR_NO_HARDDISK]); + errorbox(_("No hard disk found.")); goto EXIT; // exactly one disk has been found @@ -350,7 +352,10 @@ int main(int argc, char *argv[]) { } while (!selected_disks) { - rc = newtChecklist(ctr[TR_DISK_SELECTION], ctr[TR_DISK_SELECTION_MSG], + rc = newtChecklist(_("Disk Selection"), + _("Select the disk(s) you want to install IPFire on. " + "First those will be partitioned, and then the partitions will have a filesystem put on them.\n\n" + "ALL DATA ON THE DISK WILL BE DESTROYED."), 50, 20, num_disks, disk_names, disk_selection); // Error @@ -359,7 +364,8 @@ int main(int argc, char *argv[]) { // Nothing has been selected } else if (rc == 0) { - errorbox(ctr[TR_NO_DISK_SELECTED]); + errorbox(_("No disk has been selected.\n\n" + "Please select one or more disks you want to install IPFire on.")); } else { selected_disks = hw_select_disks(disks, disk_selection); @@ -370,18 +376,21 @@ int main(int argc, char *argv[]) { num_selected_disks = hw_count_disks(selected_disks); if (num_selected_disks == 1) { - snprintf(message, sizeof(message), ctr[TR_DISK_SETUP_DESC], (*selected_disks)->description); - rc = newtWinOkCancel(ctr[TR_DISK_SETUP], message, 50, 10, - ctr[TR_DELETE_ALL_DATA], ctr[TR_CANCEL]); + snprintf(message, sizeof(message), + _("The installation program will now prepare the chosen harddisk:\n\n %s\n\n" + "Do you agree to continue?"), (*selected_disks)->description); + rc = newtWinOkCancel(_("Disk Setup"), message, 50, 10, + _("Delete all data"), _("Cancel")); if (rc == 0) break; } else if (num_selected_disks == 2) { - snprintf(message, sizeof(message), ctr[TR_RAID_SETUP_DESC], - (*selected_disks)->description, (*selected_disks + 1)->description); - rc = newtWinOkCancel(ctr[TR_RAID_SETUP], message, 50, 14, - ctr[TR_DELETE_ALL_DATA], ctr[TR_CANCEL]); + snprintf(message, sizeof(message), + _("The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\n" + "Do you agree to continue?"), (*selected_disks)->description, (*selected_disks + 1)->description); + rc = newtWinOkCancel(_("RAID Setup"), message, 50, 14, + _("Delete all data"), _("Cancel")); if (rc == 0) { part_type = HW_PART_TYPE_RAID1; @@ -391,7 +400,7 @@ int main(int argc, char *argv[]) { // Currently not supported } else { - errorbox(ctr[TR_DISK_CONFIGURATION_NOT_SUPPORTED]); + errorbox(_("You disk configuration is currently not supported.")); } if (selected_disks) { @@ -405,7 +414,7 @@ int main(int argc, char *argv[]) { struct hw_destination* destination = hw_make_destination(part_type, selected_disks); if (!destination) { - errorbox(ctr[TR_DISK_TOO_SMALL]); + errorbox(_("Your harddisk is too small.")); goto EXIT; } @@ -418,7 +427,8 @@ int main(int argc, char *argv[]) { // Warn the user if there is not enough space to create a swap partition if (!unattended && !*destination->part_swap) { - rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], ctr[TR_CONTINUE_NO_SWAP]); + rc = newtWinChoice(title, _("OK"), _("Cancel"), + _("Your harddisk is very small, but you can continue with an very small swap. (Use with caution).")); if (rc != 1) goto EXIT; @@ -430,10 +440,10 @@ int main(int argc, char *argv[]) { int fstype; const char* description; } filesystems[] = { - { HW_FS_EXT4, ctr[TR_EXT4FS] }, - { HW_FS_EXT4_WO_JOURNAL, ctr[TR_EXT4FS_WO_JOURNAL] }, - { HW_FS_XFS, ctr[TR_XFS] }, - { HW_FS_REISERFS, ctr[TR_REISERFS] }, + { HW_FS_EXT4, _("ext4 Filesystem") }, + { HW_FS_EXT4_WO_JOURNAL, _("ext4 Filesystem without journal") }, + { HW_FS_XFS, _("XFS Filesystem") }, + { HW_FS_REISERFS, _("ReiserFS Filesystem") }, { 0, NULL }, }; unsigned int num_filesystems = sizeof(filesystems) / sizeof(*filesystems); @@ -447,8 +457,8 @@ int main(int argc, char *argv[]) { fs_names[i] = filesystems[i].description; } - rc = newtWinMenu(ctr[TR_CHOOSE_FILESYSTEM], ctr[TR_CHOOSE_FILESYSTEM], - 50, 5, 5, 6, fs_names, &fs_choice, ctr[TR_OK], ctr[TR_CANCEL], NULL); + rc = newtWinMenu(_("Filesystem Selection"), _("Please choose your filesystem:"), + 50, 5, 5, 6, fs_names, &fs_choice, _("OK"), _("Cancel"), NULL); if (rc == 0) destination->filesystem = filesystems[fs_choice].fstype; @@ -459,11 +469,11 @@ int main(int argc, char *argv[]) { // Setting up RAID if needed. if (destination->is_raid) { - statuswindow(60, 4, title, ctr[TR_BUILDING_RAID]); + statuswindow(60, 4, title, _("Building RAID...")); rc = hw_setup_raid(destination); if (rc) { - errorbox(ctr[TR_UNABLE_TO_BUILD_RAID]); + errorbox(_("Unable to build the RAID.")); goto EXIT; } @@ -471,28 +481,28 @@ int main(int argc, char *argv[]) { } // Execute the partitioning... - statuswindow(60, 4, title, ctr[TR_PARTITIONING_DISK]); + statuswindow(60, 4, title, _("Partitioning disk...")); rc = hw_create_partitions(destination); if (rc) { - errorbox(ctr[TR_UNABLE_TO_PARTITION]); + errorbox(_("Unable to partition the disk.")); goto EXIT; } newtPopWindow(); // Execute the formatting... - statuswindow(60, 4, title, ctr[TR_CREATING_FILESYSTEMS]); + statuswindow(60, 4, title, _("Creating filesystems...")); rc = hw_create_filesystems(destination); if (rc) { - errorbox(ctr[TR_UNABLE_TO_CREATE_FILESYSTEMS]); + errorbox(_("Unable to create filesystems.")); goto EXIT; } rc = hw_mount_filesystems(destination, DESTINATION_MOUNT_PATH); if (rc) { - errorbox(ctr[TR_UNABLE_TO_MOUNT_FILESYSTEMS]); + errorbox(_("Unable to mount filesystems.")); goto EXIT; } @@ -500,12 +510,11 @@ int main(int argc, char *argv[]) { // Extract files... snprintf(commandstring, STRING_SIZE, - "/bin/tar -C /harddisk -xvf /cdrom/" SNAME "-" VERSION ".tlz --lzma 2>/dev/null"); - + "/bin/tar -C /harddisk -xvf /cdrom/distro.img --lzma 2>/dev/null"); + if (runcommandwithprogress(60, 4, title, commandstring, INST_FILECOUNT, - ctr[TR_INSTALLING_FILES])) - { - errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]); + _("Installing the system..."))) { + errorbox(_("Unable to install the system.")); goto EXIT; } @@ -521,18 +530,17 @@ int main(int argc, char *argv[]) { /* Build cache lang file */ snprintf(commandstring, STRING_SIZE, "/usr/sbin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\""); - if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_LANG_CACHE])) - { - errorbox(ctr[TR_UNABLE_TO_INSTALL_LANG_CACHE]); + if (runcommandwithstatus(commandstring, title, _("Installing the language cache..."))) { + errorbox(_("Unable to install the language cache.")); goto EXIT; } // Installing bootloader... - statuswindow(60, 4, title, ctr[TR_INSTALLING_GRUB]); + statuswindow(60, 4, title, _("Installing the bootloader...")); rc = hw_install_bootloader(destination); if (rc) { - errorbox(ctr[TR_UNABLE_TO_INSTALL_GRUB]); + errorbox(_("Unable to install the bootloader.")); goto EXIT; } @@ -574,9 +582,13 @@ int main(int argc, char *argv[]) { mysystem(commandstring); if (!unattended) { - sprintf(message, ctr[TR_CONGRATULATIONS_LONG], - NAME, SNAME, NAME); - newtWinMessage(ctr[TR_CONGRATULATIONS], ctr[TR_PRESS_OK_TO_REBOOT], message); + snprintf(message, sizeof(message), _("%s was successfully installed. " + "Please remove any installation mediums from this system. " + "Setup will now run where you may configure networking and the system passwords. " + "After Setup has been completed, you should point your web browser at https://%s:444 " + "(or whatever you name your %s), and configure dialup networking (if required) and " + "remote access."), NAME, SNAME, NAME); + newtWinMessage(_("Congratulations!"), _("Reboot"), message); } allok = 1; @@ -585,7 +597,7 @@ EXIT: fprintf(flog, "Install program ended.\n"); if (!(allok)) - newtWinMessage(title, ctr[TR_OK], ctr[TR_PRESS_OK_TO_REBOOT]); + newtWinMessage(title, _("OK"), _("Press Ok to reboot.")); if (allok) { fflush(flog); diff --git a/src/install+setup/install/mountdest.sh b/src/installer/mountdest.sh similarity index 100% rename from src/install+setup/install/mountdest.sh rename to src/installer/mountdest.sh diff --git a/src/install+setup/install/unattended.c b/src/installer/unattended.c similarity index 98% rename from src/install+setup/install/unattended.c rename to src/installer/unattended.c index 77e1eabbd..d0267f6d5 100644 --- a/src/install+setup/install/unattended.c +++ b/src/installer/unattended.c @@ -80,7 +80,7 @@ int unattended_setup(struct keyvalue *unattendedkv) { replacekeyvalue(ethernetkv, "GREEN_BROADCAST", green_broadcast); replacekeyvalue(ethernetkv, "CONFIG_TYPE", "0"); replacekeyvalue(ethernetkv, "GREEN_DEV", "eth0"); - write_ethernet_configs(ethernetkv); + writekeyvalues(ethernetkv, "/harddisk" CONFIG_ROOT "/ethernet/settings"); freekeyvalues(ethernetkv); /* timezone */ From b83b8f70922fcea6aecbb012e673d5c55a35dfe2 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 30 Jul 2014 22:37:16 +0200 Subject: [PATCH 053/297] installer: Center root line and help line. --- src/installer/main.c | 52 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index e32718b92..2e0c7dd41 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -176,9 +177,42 @@ int write_lang_configs(const char *lang) { return 1; } +static char* get_system_release() { + char system_release[STRING_SIZE] = "\0"; + + FILE* f = fopen("/etc/system-release", "r"); + if (f) { + fgets(system_release, sizeof(system_release), f); + fclose(f); + } + + return strdup(system_release); +} + +static char* center_string(const char* str, int width) { + unsigned int str_len = strlen(str); + + unsigned int indent_length = (width - str_len) / 2; + char indent[indent_length + 1]; + + for (unsigned int i = 0; i < indent_length; i++) { + indent[i] = ' '; + } + indent[indent_length] = '\0'; + + char* string = NULL; + if (asprintf(&string, "%s%s", indent, str) < 0) + return NULL; + + return string; +} + int main(int argc, char *argv[]) { struct hw* hw = hw_init(); + // Read /etc/system-release + char* system_release = get_system_release(); + char discl_msg[40000] = "Disclaimer\n"; char *langnames[] = { "Deutsch", "English", "Français", "Español", "Nederlands", "Polski", "Русский", "Türkçe", NULL }; @@ -218,7 +252,16 @@ int main(int argc, char *argv[]) { newtInit(); newtCls(); - newtDrawRootText(14, 0, NAME " " VERSION " - " SLOGAN ); + // Determine the size of the screen + int screen_cols = 0; + int screen_rows = 0; + + newtGetScreenSize(&screen_cols, &screen_rows); + + // Draw title + char* roottext = center_string(system_release, screen_cols); + newtDrawRootText(0, 0, roottext); + sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN); if (! (cmdfile = fopen("/proc/cmdline", "r"))) @@ -258,7 +301,8 @@ int main(int argc, char *argv[]) { setlocale(LC_ALL, shortlangnames[choice]); - newtPushHelpLine(_("/ between elements | selects | next screen")); + char* helpline = center_string(_("/ between elements | selects | next screen"), screen_cols); + newtPushHelpLine(helpline); if (!unattended) { snprintf(message, sizeof(message), @@ -607,6 +651,10 @@ EXIT: newtFinished(); // Free resources + free(system_release); + free(roottext); + free(helpline); + free(sourcedrive); if (destination) { From 4c812463e4d7bc47b47ab99454fb8d58a7005e59 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 30 Jul 2014 23:14:17 +0200 Subject: [PATCH 054/297] installer: Improve formatting of disk vendors/models. --- src/installer/hw.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 4976f5322..048aeaaf5 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -228,10 +228,11 @@ struct hw_disk** hw_find_disks(struct hw* hw) { vendor = udev_device_get_sysattr_value(dev, "vendor"); if (!vendor) vendor = udev_device_get_sysattr_value(dev, "manufacturer"); - if (!vendor) - vendor = "N/A"; - strncpy(disk->vendor, vendor, sizeof(disk->vendor)); + if (vendor) + strncpy(disk->vendor, vendor, sizeof(disk->vendor)); + else + *disk->vendor = '\0'; // Model const char* model = udev_device_get_property_value(dev, "ID_MODEL"); @@ -239,14 +240,28 @@ struct hw_disk** hw_find_disks(struct hw* hw) { model = udev_device_get_sysattr_value(dev, "model"); if (!model) model = udev_device_get_sysattr_value(dev, "product"); - if (!model) - model = "N/A"; - strncpy(disk->model, model, sizeof(disk->model)); + if (model) + strncpy(disk->model, model, sizeof(disk->model)); + else + *disk->model = '\0'; - snprintf(disk->description, sizeof(disk->description), - "%4.1fGB %s - %s", (double)disk->size / pow(1024, 3), - disk->vendor, disk->model); + // Format description + char size_str[STRING_SIZE]; + snprintf(size_str, sizeof(size_str), "%4.1fGB", (double)disk->size / pow(1024, 3)); + + if (*disk->vendor && *disk->model) { + snprintf(disk->description, sizeof(disk->description), + "%s | %s - %s", size_str, disk->vendor, disk->model); + + } else if (*disk->vendor || *disk->model) { + snprintf(disk->description, sizeof(disk->description), + "%s | %s", size_str, (*disk->vendor) ? disk->vendor : disk->model); + + } else { + snprintf(disk->description, sizeof(disk->description), + "%s | N/A", size_str); + } *disks++ = disk; From 139cb500118a70b5dd3e24e6ffaa32efeabb34eb Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 30 Jul 2014 23:15:25 +0200 Subject: [PATCH 055/297] installer: Go on when OK button is hit in FS selection Hitting just the enter key proceeded. Navigating to the OK button and hitting that one aborted the installation. --- src/installer/main.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index 2e0c7dd41..2a5122e1a 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -504,11 +504,10 @@ int main(int argc, char *argv[]) { rc = newtWinMenu(_("Filesystem Selection"), _("Please choose your filesystem:"), 50, 5, 5, 6, fs_names, &fs_choice, _("OK"), _("Cancel"), NULL); - if (rc == 0) - destination->filesystem = filesystems[fs_choice].fstype; - - else + if (rc != 1) goto EXIT; + + destination->filesystem = filesystems[fs_choice].fstype; } // Setting up RAID if needed. From a4c4d9c8197f1dc20d554003ed6abc3187c68ae1 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Fri, 1 Aug 2014 13:19:59 +0200 Subject: [PATCH 056/297] kernel: update to 3.10.51. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index c60d19805..e2b5ad2b8 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.50 +VER = 3.10.51 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.50-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.51-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = d63e68805a7df388d27eb686beff8f01 +$(DL_FILE)_MD5 = 4ab70c265ffd2f670dc7108008b6b5fe rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = 10f332348f61e2275a19a8c3087adceb +$(GRS_PATCHES)_MD5 = 32e1252d83110dacbce49c56a1d98d5f install : $(TARGET) From af39690185dedb82ad5ccfb88c574d04465ef12d Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Fri, 1 Aug 2014 20:34:21 +0200 Subject: [PATCH 057/297] intel_kmod: update intel vendor modules. --- lfs/e1000e | 4 +-- lfs/igb | 4 +-- lfs/ixgbe | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ make.sh | 7 ++++- 4 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 lfs/ixgbe diff --git a/lfs/e1000e b/lfs/e1000e index 10a42ee76..78dbec1c6 100644 --- a/lfs/e1000e +++ b/lfs/e1000e @@ -27,7 +27,7 @@ include Config VERSUFIX = ipfire$(KCFG) MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/e1000e -VER = 3.0.4 +VER = 3.1.0.2 THISAPP = e1000e-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -43,7 +43,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 2d8364cd2043ef5c71291a4ca8b8084e +$(DL_FILE)_MD5 = b8d770160691edd247a90070f45642ce install : $(TARGET) diff --git a/lfs/igb b/lfs/igb index b8aadc48b..fa762e093 100644 --- a/lfs/igb +++ b/lfs/igb @@ -27,7 +27,7 @@ include Config VERSUFIX = ipfire$(KCFG) MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/intel/igb/ -VER = 5.1.2 +VER = 5.2.9.3 THISAPP = igb-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -43,7 +43,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = c222b04f7e43afffc105d0d0db60c6c0 +$(DL_FILE)_MD5 = 814395d3b76090f378002bddecfd2dfc install : $(TARGET) diff --git a/lfs/ixgbe b/lfs/ixgbe new file mode 100644 index 000000000..00dd32080 --- /dev/null +++ b/lfs/ixgbe @@ -0,0 +1,85 @@ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007-2014 IPFire Team # +# # +# 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 3 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, see . # +# # +############################################################################### + +############################################################################### +# Definitions +############################################################################### + +include Config + +VERSUFIX = ipfire$(KCFG) +MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/intel/ixgbe + +VER = 3.21.2 + +THISAPP = ixgbe-$(VER) +DL_FILE = $(THISAPP).tar.gz +DL_FROM = $(URL_IPFIRE) +DIR_APP = $(DIR_SRC)/$(THISAPP) +TARGET = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX) + +############################################################################### +# Top-level Rules +############################################################################### + +objects = $(DL_FILE) + +$(DL_FILE) = $(DL_FROM)/$(DL_FILE) + +$(DL_FILE)_MD5 = dc635736d7e0ef5373131753f6609f38 + +install : $(TARGET) + +check : $(patsubst %,$(DIR_CHK)/%,$(objects)) + +download :$(patsubst %,$(DIR_DL)/%,$(objects)) + +md5 : $(subst %,%_MD5,$(objects)) + +dist: + $(PAK) + +############################################################################### +# Downloading, checking, md5sum +############################################################################### + +$(patsubst %,$(DIR_CHK)/%,$(objects)) : + @$(CHECK) + +$(patsubst %,$(DIR_DL)/%,$(objects)) : + @$(LOAD) + +$(subst %,%_MD5,$(objects)) : + @$(MD5) + +############################################################################### +# Installation Details +############################################################################### + +$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) + @$(PREBUILD) + #Save original ixgbe module + -mv $(MODPATH)/ixgbe.ko \ + $(MODPATH)/ixgbe.ko.org + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP)/src && make BUILD_KERNEL=$(KVER)-$(VERSUFIX) + cd $(DIR_APP)/src && install -m 644 ixgbe.ko $(MODPATH) + @rm -rf $(DIR_APP) + @$(POSTBUILD) diff --git a/make.sh b/make.sh index b50a07b23..b424bed2d 100755 --- a/make.sh +++ b/make.sh @@ -413,6 +413,8 @@ buildipfire() { # ipfiremake r8101 KCFG="-pae" ipfiremake e1000e KCFG="-pae" ipfiremake igb KCFG="-pae" + ipfiremake ixgbe KCFG="-pae" + # x86 kernel build ipfiremake linux KCFG="" @@ -426,6 +428,7 @@ buildipfire() { # ipfiremake r8101 KCFG="" ipfiremake e1000e KCFG="" ipfiremake igb KCFG="" + ipfiremake ixgbe KCFG="" ;; armv5tel) @@ -441,6 +444,7 @@ buildipfire() { ipfiremake cryptodev KCFG="-multi" ipfiremake e1000e KCFG="-multi" ipfiremake igb KCFG="-multi" + ipfiremake ixgbe KCFG="-multi" # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build ipfiremake linux KCFG="-kirkwood" @@ -451,8 +455,9 @@ buildipfire() { # ipfiremake r8169 KCFG="-kirkwood" # ipfiremake r8168 KCFG="-kirkwood" # ipfiremake r8101 KCFG="-kirkwood" -# ipfiremake e1000e KCFG="-kirkwood" + ipfiremake e1000e KCFG="-kirkwood" ipfiremake igb KCFG="-kirkwood" + ipfiremake ixgbe KCFG="-kirkwood" ;; esac ipfiremake pkg-config From d156e682d4242c2255d34bf76fb82e144f22ea16 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Fri, 8 Aug 2014 08:58:28 +0200 Subject: [PATCH 058/297] kernel: update to 3.10.52. --- config/kernel/kernel.config.i586-ipfire | 5 ++++- config/kernel/kernel.config.i586-ipfire-pae | 5 ++++- lfs/linux | 8 ++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/config/kernel/kernel.config.i586-ipfire b/config/kernel/kernel.config.i586-ipfire index 74ee01397..3c83b945b 100644 --- a/config/kernel/kernel.config.i586-ipfire +++ b/config/kernel/kernel.config.i586-ipfire @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.10.44-ipfire Kernel Configuration +# Linux/x86 3.10.52 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -313,6 +313,7 @@ CONFIG_INLINE_READ_UNLOCK=y CONFIG_INLINE_READ_UNLOCK_IRQ=y CONFIG_INLINE_WRITE_UNLOCK=y CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -407,6 +408,8 @@ CONFIG_X86_MCE_THRESHOLD=y # CONFIG_X86_MCE_INJECT is not set CONFIG_X86_THERMAL_VECTOR=y CONFIG_VM86=y +CONFIG_X86_16BIT=y +CONFIG_X86_ESPFIX32=y CONFIG_TOSHIBA=m CONFIG_I8K=m # CONFIG_X86_REBOOTFIXUPS is not set diff --git a/config/kernel/kernel.config.i586-ipfire-pae b/config/kernel/kernel.config.i586-ipfire-pae index 8ab80816b..ce5b039d6 100644 --- a/config/kernel/kernel.config.i586-ipfire-pae +++ b/config/kernel/kernel.config.i586-ipfire-pae @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.10.44-ipfire Kernel Configuration +# Linux/x86 3.10.52 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -312,6 +312,7 @@ CONFIG_INLINE_READ_UNLOCK=y CONFIG_INLINE_READ_UNLOCK_IRQ=y CONFIG_INLINE_WRITE_UNLOCK=y CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -417,6 +418,8 @@ CONFIG_X86_MCE_THRESHOLD=y # CONFIG_X86_MCE_INJECT is not set CONFIG_X86_THERMAL_VECTOR=y CONFIG_VM86=y +CONFIG_X86_16BIT=y +CONFIG_X86_ESPFIX32=y CONFIG_TOSHIBA=m CONFIG_I8K=m # CONFIG_X86_REBOOTFIXUPS is not set diff --git a/lfs/linux b/lfs/linux index e2b5ad2b8..d2c9f8317 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.51 +VER = 3.10.52 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.51-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.52-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 4ab70c265ffd2f670dc7108008b6b5fe +$(DL_FILE)_MD5 = 7583dad19efc7e3153fafe43f1022245 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = 32e1252d83110dacbce49c56a1d98d5f +$(GRS_PATCHES)_MD5 = b73279bfc45be304cf065c402e4ec0b2 install : $(TARGET) From 56774f9ed2bc6698fe47394fd445b43ead355a90 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 11:10:37 +0200 Subject: [PATCH 059/297] mdadm: Update to 3.3.1. --- config/rootfiles/common/mdadm | 3 +- lfs/mdadm | 9 +- ...il-auto-assemble-in-face-of-mdadm.co.patch | 85 +++++++++++++++++++ 3 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch diff --git a/config/rootfiles/common/mdadm b/config/rootfiles/common/mdadm index d593cac25..d2d87267d 100644 --- a/config/rootfiles/common/mdadm +++ b/config/rootfiles/common/mdadm @@ -1,7 +1,8 @@ etc/rc.d/rc0.d/S85mdadm etc/rc.d/rc6.d/S75mdadm etc/rc.d/rcsysinit.d/S11mdadm -lib/udev/rules.d/64-md-raid.rules +lib/udev/rules.d/63-md-raid-arrays.rules +lib/udev/rules.d/64-md-raid-assembly.rules sbin/mdadm sbin/mdmon #usr/share/man/man4/md.4 diff --git a/lfs/mdadm b/lfs/mdadm index 5c4024700..46dbf2c2f 100644 --- a/lfs/mdadm +++ b/lfs/mdadm @@ -24,10 +24,10 @@ include Config -VER = 3.2.1 +VER = 3.3.1 THISAPP = mdadm-$(VER) -DL_FILE = $(THISAPP).tar.bz2 +DL_FILE = $(THISAPP).tar.xz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) @@ -44,7 +44,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = d1e2549202bd79d9e99f1498d1109530 +$(DL_FILE)_MD5 = 4227d48de62dfb217c92fa0c54171bbe install : $(TARGET) @@ -76,7 +76,8 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install ln -sf ../init.d/mdadm /etc/rc.d/rcsysinit.d/S11mdadm diff --git a/src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch b/src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch new file mode 100644 index 000000000..521578921 --- /dev/null +++ b/src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch @@ -0,0 +1,85 @@ +From 5141638c54535b4ac80b8481404d868a63a18ecd Mon Sep 17 00:00:00 2001 +From: NeilBrown +Date: Tue, 29 Jul 2014 13:48:23 +1000 +Subject: [PATCH] Assemble: Only fail auto-assemble in face of mdadm.conf + conflicts. + +We should never auto-assemble things that conflict with mdadm.conf +However explicit assembly requests should be allowed. + +Reported-by: olovopb +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1070245 +Signed-off-by: NeilBrown +--- + Assemble.c | 47 ++++++++++++++++++++++++++--------------------- + 1 file changed, 26 insertions(+), 21 deletions(-) + +diff --git a/Assemble.c b/Assemble.c +index aca28be..cdcdb0f 100644 +--- a/Assemble.c ++++ b/Assemble.c +@@ -366,9 +366,6 @@ static int select_devices(struct mddev_dev *devlist, + tmpdev = NULL; + goto loop; + } else { +- int rv = 0; +- struct mddev_ident *match; +- + content = *contentp; + tst->ss->getinfo_super(tst, content, NULL); + +@@ -377,25 +374,33 @@ static int select_devices(struct mddev_dev *devlist, + report_mismatch ? devname : NULL)) + goto loop; + +- match = conf_match(tst, content, devname, +- report_mismatch ? c->verbose : -1, +- &rv); +- if (!match && rv == 2) +- goto loop; +- if (match && match->devname && +- strcasecmp(match->devname, "") == 0) { +- if (report_mismatch) +- pr_err("%s is a member of an explicitly ignored array\n", +- devname); +- goto loop; +- } +- if (match && !ident_matches(match, content, tst, +- c->homehost, c->update, +- report_mismatch ? devname : NULL)) +- /* Array exists in mdadm.conf but some +- * details don't match, so reject it ++ if (auto_assem) { ++ /* Never auto-assemble things that conflict ++ * with mdadm.conf in some way + */ +- goto loop; ++ struct mddev_ident *match; ++ int rv = 0; ++ ++ match = conf_match(tst, content, devname, ++ report_mismatch ? c->verbose : -1, ++ &rv); ++ if (!match && rv == 2) ++ goto loop; ++ if (match && match->devname && ++ strcasecmp(match->devname, "") == 0) { ++ if (report_mismatch) ++ pr_err("%s is a member of an explicitly ignored array\n", ++ devname); ++ goto loop; ++ } ++ if (match && !ident_matches(match, content, tst, ++ c->homehost, c->update, ++ report_mismatch ? devname : NULL)) ++ /* Array exists in mdadm.conf but some ++ * details don't match, so reject it ++ */ ++ goto loop; ++ } + + /* should be safe to try an exclusive open now, we + * have rejected anything that some other mdadm might +-- +1.9.3 + From e1457ba014db6c29620f1aad525cc8fea5027716 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 12:19:10 +0200 Subject: [PATCH 060/297] setup: Migrate to autotool and use gettext. --- config/rootfiles/common/setup | 5 +- lfs/setup | 16 +- src/setup/Makefile | 2 +- src/setup/Makefile.am | 58 ++++ src/setup/autogen.sh | 3 + src/setup/configure.ac | 92 ++++++ src/setup/dhcp.c | 81 +++-- src/setup/domainname.c | 23 +- src/setup/hostname.c | 20 +- src/setup/keymap.c | 15 +- src/setup/m4/attributes.m4 | 288 +++++++++++++++++ src/setup/main.c | 60 ++-- src/setup/misc.c | 28 +- src/setup/netstuff.c | 81 ++--- src/setup/networking.c | 180 ++++++----- src/setup/passwords.c | 35 +- src/setup/po/LINGUAS | 1 + src/setup/po/Makevars | 41 +++ src/setup/po/POTFILES.in | 11 + src/setup/po/de.po | 582 ++++++++++++++++++++++++++++++++++ src/setup/probenic.sh | 90 ++++++ src/setup/setup.h | 3 +- src/setup/timezone.c | 12 +- 23 files changed, 1474 insertions(+), 253 deletions(-) create mode 100644 src/setup/Makefile.am create mode 100755 src/setup/autogen.sh create mode 100644 src/setup/configure.ac create mode 100644 src/setup/m4/attributes.m4 create mode 100644 src/setup/po/LINGUAS create mode 100644 src/setup/po/Makevars create mode 100644 src/setup/po/POTFILES.in create mode 100644 src/setup/po/de.po create mode 100644 src/setup/probenic.sh diff --git a/config/rootfiles/common/setup b/config/rootfiles/common/setup index 1e3306812..334c243a4 100644 --- a/config/rootfiles/common/setup +++ b/config/rootfiles/common/setup @@ -1,2 +1,3 @@ -usr/local/sbin/setup -bin/probenic.sh +usr/bin/probenic.sh +usr/sbin/setup +usr/share/locale/de/LC_MESSAGES/setup.mo diff --git a/lfs/setup b/lfs/setup index a5dee7359..764d0edb3 100644 --- a/lfs/setup +++ b/lfs/setup @@ -49,12 +49,14 @@ md5 : $(TARGET) : @$(PREBUILD) @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/setup/* $(DIR_APP) - - cd $(DIR_APP) && make CFLAGS="$(CFLAGS) -Wall \ - -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \ - -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'" - - cd $(DIR_APP) && install -m 0755 setup /usr/local/sbin - cd $(DIR_APP) && install -m 0755 probenic.sh /bin + cd $(DIR_APP) && bash autogen.sh + cd $(DIR_APP) && ./configure \ + --prefix=/usr \ + --with-distro-name="$(NAME)" \ + --with-distro-sname="$(SNAME)" \ + --with-distro-slogan="$(SLOGAN)" \ + --with-config-root="$(CONFIG_ROOT)" + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/setup/Makefile b/src/setup/Makefile index 9bbd47941..fe42e915d 100644 --- a/src/setup/Makefile +++ b/src/setup/Makefile @@ -40,7 +40,7 @@ clean : ###### OBJS=main.o hostname.o domainname.o passwords.o networking.o misc.o \ - dhcp.o keymap.o timezone.o + dhcp.o keymap.o timezone.o netstuff.o setup: $(OBJS) $(LINK) $(OBJS) -o $@ $(LIBS) diff --git a/src/setup/Makefile.am b/src/setup/Makefile.am new file mode 100644 index 000000000..0ead63195 --- /dev/null +++ b/src/setup/Makefile.am @@ -0,0 +1,58 @@ +# This file is part of the setup tool. +# +# setup is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} +AM_MAKEFLAGS = --no-print-directory +AUTOMAKE_OPTIONS = color-tests parallel-tests + +SUBDIRS = . po + +# remove targets if the command fails +.DELETE_ON_ERROR: + +# keep intermediate files +.SECONDARY: + +AM_CPPFLAGS = \ + -include $(top_builddir)/config.h \ + $(OUR_CPPFLAGS) + +AM_CFLAGS = $(OUR_CFLAGS) +AM_CXXFLAGS = $(OUR_CXXFLAGS) +AM_LDFLAGS = $(OUR_LDFLAGS) + +bin_SCRIPTS = +sbin_PROGRAMS = + +#- setup ----------------------------------------------------------------------- + +sbin_PROGRAMS += \ + setup + +setup_SOURCES = \ + dhcp.c \ + domainname.c \ + hostname.c \ + keymap.c \ + main.c \ + misc.c \ + netstuff.c \ + networking.c \ + passwords.c \ + setup.h \ + timezone.c + +setup_CFLAGS = \ + $(AM_CFLAGS) \ + $(LIBSMOOTH_CFLAGS) + +setup_LDADD = \ + $(LIBSMOOTH_LIBS) \ + $(NEWT_LIBS) + +bin_SCRIPTS += \ + probenic.sh diff --git a/src/setup/autogen.sh b/src/setup/autogen.sh new file mode 100755 index 000000000..306548864 --- /dev/null +++ b/src/setup/autogen.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +autoreconf --force --install -I m4 diff --git a/src/setup/configure.ac b/src/setup/configure.ac new file mode 100644 index 000000000..6f7c31be2 --- /dev/null +++ b/src/setup/configure.ac @@ -0,0 +1,92 @@ +# This file is part of the setup tool. +# +# setup is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +AC_PREREQ([2.64]) + +AC_INIT([setup], + [001], + [], + [setup], + [http://git.ipfire.org/?p=ipfire-2.x.git;a=summary]) + +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_AUX_DIR([build-aux]) + +AM_INIT_AUTOMAKE([ + foreign + 1.11 + -Wall + -Wno-portability + silent-rules + tar-pax + no-dist-gzip + dist-xz + subdir-objects +]) +AM_SILENT_RULES([yes]) + +LT_PREREQ(2.2) +LT_INIT([disable-static]) + +AC_PROG_CC +AC_PROG_CC_C99 +AC_PROG_CC_C_O + +AC_PATH_PROG([M4], [m4]) + +# Gettext +AM_GNU_GETTEXT([external]) +AM_GNU_GETTEXT_VERSION([0.18]) +AC_CHECK_HEADERS([libintl.h]) + +# This makes sure pkg.m4 is available. +m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config]) + +# newt +LIBS= +AC_SEARCH_LIBS([newtWinMenu], [newt], [], [AC_MSG_ERROR([*** newt library not found])]) +NEWT_LIBS="$LIBS" +AC_SUBST(NEWT_LIBS) + +LIBS="$save_LIBS" + +PKG_CHECK_MODULES(LIBSMOOTH, [libsmooth]) + +AC_ARG_WITH([distro-name], + AS_HELP_STRING([--with-distro-name] [The name of the distribution]), + AC_DEFINE_UNQUOTED([NAME], "$withval", [The name of the distribution]), + AC_MSG_ERROR([*** you need to set the name with --with-distro-name=])) + +AC_ARG_WITH([distro-sname], + AS_HELP_STRING([--with-distro-sname] [The short name of the distribution]), + AC_DEFINE_UNQUOTED([SNAME], "$withval", [The sname of the distribution]), + AC_MSG_ERROR([*** you need to set the sname with --with-distro-sname=])) + +AC_ARG_WITH([distro-slogan], + AS_HELP_STRING([--with-distro-slogan] [The slogan of the distribution]), + AC_DEFINE_UNQUOTED([SLOGAN], "$withval", [The slogan of the distribution]), + AC_MSG_ERROR([*** you need to set the slogan with --with-distro-slogan=])) + +AC_ARG_WITH([config-root], + AS_HELP_STRING([--with-distro-config-root] [The configuration directory]), + AC_DEFINE_UNQUOTED([CONFIG_ROOT], "$withval", [The config-root]), + AC_MSG_ERROR([*** you need to set CONFIG_ROOT with --with-config-root=])) + +AC_CONFIG_FILES([ + Makefile + po/Makefile.in +]) + +AC_OUTPUT +AC_MSG_RESULT([ + $PACKAGE_NAME $VERSION + + CFLAGS: ${OUR_CFLAGS} ${CFLAGS} + CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS} + LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS} +]) diff --git a/src/setup/dhcp.c b/src/setup/dhcp.c index 332a807e7..4cda9cec9 100644 --- a/src/setup/dhcp.c +++ b/src/setup/dhcp.c @@ -7,7 +7,11 @@ * Stuff for setting up the DHCP server from the setup prog. * */ - + +// Translation +#include +#define _(x) dgettext("setup", x) + #include "setup.h" #define TOP 4 @@ -24,8 +28,6 @@ extern FILE *flog; extern char *mylog; -extern char **ctr; - extern int automode; newtComponent dhcpform; @@ -44,13 +46,24 @@ int handledhcp(void) newtComponent labels[MAX_BOXES]; newtComponent ok, cancel; char message[1000]; - char *labeltexts[MAX_BOXES] = { ctr[TR_START_ADDRESS], ctr[TR_END_ADDRESS], - ctr[TR_PRIMARY_DNS], ctr[TR_SECONDARY_DNS], ctr[TR_DEFAULT_LEASE], - ctr[TR_MAX_LEASE], ctr[TR_DOMAIN_NAME_SUFFIX] }; - char *varnames[MAX_BOXES] = { "START_ADDR_GREEN", "END_ADDR_GREEN", - "DNS1_GREEN", "DNS2_GREEN", - "DEFAULT_LEASE_TIME_GREEN", "MAX_LEASE_TIME_GREEN", - "DOMAIN_NAME_GREEN"}; + char *labeltexts[MAX_BOXES] = { + _("Start address:"), + _("End address:"), + _("Primary DNS:"), + _("Secondary DNS:"), + _("Default lease (mins):"), + _("Max lease (mins):"), + _("Domain name suffix:") + }; + char *varnames[MAX_BOXES] = { + "START_ADDR_GREEN", + "END_ADDR_GREEN", + "DNS1_GREEN", + "DNS2_GREEN", + "DEFAULT_LEASE_TIME_GREEN", + "MAX_LEASE_TIME_GREEN", + "DOMAIN_NAME_GREEN" + }; char defaults[MAX_BOXES][STRING_SIZE]; int result; int c; @@ -70,14 +83,14 @@ int handledhcp(void) { freekeyvalues(dhcpkv); freekeyvalues(ethernetkv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } if (!(readkeyvalues(ethernetkv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(dhcpkv); freekeyvalues(ethernetkv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } if (!(readkeyvalues(mainkv, CONFIG_ROOT "/main/settings"))) @@ -85,7 +98,7 @@ int handledhcp(void) freekeyvalues(dhcpkv); freekeyvalues(ethernetkv); freekeyvalues(mainkv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -95,13 +108,13 @@ int handledhcp(void) strcpy(defaults[DEFAULT_LEASE_TIME], "60"); strcpy(defaults[MAX_LEASE_TIME], "120"); - sprintf(message, ctr[TR_DHCP_SERVER_CONFIGURATION]); - newtCenteredWindow(55, 18, message); + newtCenteredWindow(55, 18, _("DHCP server configuration")); dhcpform = newtForm(NULL, NULL, 0); - - sprintf(message, ctr[TR_CONFIGURE_DHCP]); - header = newtTextboxReflowed(1, 1, message, 52, 0, 0, 0); + + header = newtTextboxReflowed(1, 1, + _("Configure the DHCP server by entering the settings information."), + 52, 0, 0, 0); newtFormAddComponent(dhcpform, header); strcpy(temp, ""); findkey(dhcpkv, "ENABLE_GREEN", temp); @@ -109,7 +122,7 @@ int handledhcp(void) startenabled = '*'; else startenabled = ' '; - enabledcheckbox = newtCheckbox(2, TOP + 0, ctr[TR_ENABLED], startenabled, " *", &enabledresult); + enabledcheckbox = newtCheckbox(2, TOP + 0, _("Enabled"), startenabled, " *", &enabledresult); newtFormAddComponent(dhcpform, enabledcheckbox); newtComponentAddCallback(enabledcheckbox, dhcpdialogcallbackdhcp, NULL); @@ -126,13 +139,12 @@ int handledhcp(void) } - ok = newtButton(10, c + 7, ctr[TR_OK]); - cancel = newtButton(34, c + 7, ctr[TR_CANCEL]); + ok = newtButton(10, c + 7, _("OK")); + cancel = newtButton(34, c + 7, _("Cancel")); newtFormAddComponents(dhcpform, ok, cancel, NULL); - do - { + do { error = 0; newtFormRun(dhcpform, &es); @@ -141,22 +153,25 @@ int handledhcp(void) /* OK was pressed; verify the contents of each entry. */ if (enabledresult == '*') { - strcpy(message, ctr[TR_INVALID_FIELDS]); + strcpy(message, _("The following fields are invalid:\n\n")); if (inet_addr(results[START_ADDRESS]) == INADDR_NONE) { - strcat(message, ctr[TR_START_ADDRESS_CR]); + strcat(message, _("Start address")); + strcat(message, "\n"); error = 1; } if (inet_addr(results[END_ADDRESS]) == INADDR_NONE) { - strcat(message, ctr[TR_END_ADDRESS_CR]); + strcat(message, _("End address")); + strcat(message, "\n"); error = 1; } if (strlen(results[SECONDARY_DNS])) { if (inet_addr(results[PRIMARY_DNS]) == INADDR_NONE) { - strcat(message, ctr[TR_PRIMARY_DNS_CR]); + strcat(message, _("Primary DNS")); + strcat(message, "\n"); error = 1; } } @@ -164,18 +179,21 @@ int handledhcp(void) { if (inet_addr(results[SECONDARY_DNS]) == INADDR_NONE) { - strcat(message, ctr[TR_SECONDARY_DNS_CR]); + strcat(message, _("Secondary DNS")); + strcat(message, "\n"); error = 1; } } if (!(atol(results[DEFAULT_LEASE_TIME]))) { - strcat(message, ctr[TR_DEFAULT_LEASE_CR]); + strcat(message, _("Default lease time")); + strcat(message, "\n"); error = 1; } if (!(atol(results[MAX_LEASE_TIME]))) { - strcat(message, ctr[TR_MAX_LEASE_CR]); + strcat(message, _("Max. lease time")); + strcat(message, "\n"); error = 1; } } @@ -236,8 +254,7 @@ int handledhcp(void) } else result = 0; - } - while (error); + } while (error); newtFormDestroy(dhcpform); newtPopWindow(); diff --git a/src/setup/domainname.c b/src/setup/domainname.c index 9aedd9b49..38269d2a3 100644 --- a/src/setup/domainname.c +++ b/src/setup/domainname.c @@ -6,14 +6,16 @@ * $Id: domainname.c * */ - + +// Translation +#include +#define _(x) dgettext("setup", x) + #include "setup.h" extern FILE *flog; extern char *mylog; -extern char **ctr; - extern int automode; int handledomainname(void) @@ -29,7 +31,7 @@ int handledomainname(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -37,19 +39,18 @@ int handledomainname(void) for (;;) { - rc = newtWinEntries(ctr[TR_DOMAINNAME], ctr[TR_ENTER_DOMAINNAME], - 50, 5, 5, 40, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL); + rc = newtWinEntries(_("Domain name"), _("Enter Domain name"), + 50, 5, 5, 40, entries, _("OK"), _("Cancel"), NULL); - if (rc == 1) - { + if (rc == 1) { strcpy(domainname, values[0]); if (!(strlen(domainname))) - errorbox(ctr[TR_DOMAINNAME_CANNOT_BE_EMPTY]); + errorbox(_("Domain name cannot be empty.")); else if (strchr(domainname, ' ')) - errorbox(ctr[TR_DOMAINNAME_CANNOT_CONTAIN_SPACES]); + errorbox(_("Domain name cannot contain spaces.")); else if (strlen(domainname) != strspn(domainname, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.")) - errorbox(ctr[TR_DOMAINNAME_NOT_VALID_CHARS]); + errorbox(_("Domain name may only contain letters, numbers, hyphens and periods.")); else { replacekeyvalue(kv, "DOMAINNAME", domainname); diff --git a/src/setup/hostname.c b/src/setup/hostname.c index 016525736..7d7edc56b 100644 --- a/src/setup/hostname.c +++ b/src/setup/hostname.c @@ -9,14 +9,16 @@ * $Id: hostname.c,v 1.6.2.1 2004/04/14 22:05:41 gespinasse Exp $ * */ - + +// Translation +#include +#define _(x) dgettext("setup", x) + #include "setup.h" extern FILE *flog; extern char *mylog; -extern char **ctr; - extern int automode; int handlehostname(void) @@ -32,7 +34,7 @@ int handlehostname(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -41,19 +43,19 @@ int handlehostname(void) for (;;) { - rc = newtWinEntries(ctr[TR_HOSTNAME], ctr[TR_ENTER_HOSTNAME], - 50, 5, 5, 40, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL); + rc = newtWinEntries(_("Hostname"), _("Enter the machine's hostname."), + 50, 5, 5, 40, entries, _("OK"), _("Cancel"), NULL); if (rc == 1) { strcpy(hostname, values[0]); if (!(strlen(hostname))) - errorbox(ctr[TR_HOSTNAME_CANNOT_BE_EMPTY]); + errorbox(_("Hostname cannot be empty.")); else if (strchr(hostname, ' ')) - errorbox(ctr[TR_HOSTNAME_CANNOT_CONTAIN_SPACES]); + errorbox(_("Hostname cannot contain spaces.")); else if (strlen(hostname) != strspn(hostname, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-")) - errorbox(ctr[TR_HOSTNAME_NOT_VALID_CHARS]); + errorbox(_("Hostname may only contain letters, numbers and hyphens.")); else { replacekeyvalue(kv, "HOSTNAME", hostname); diff --git a/src/setup/keymap.c b/src/setup/keymap.c index b143492a1..1f687d26b 100644 --- a/src/setup/keymap.c +++ b/src/setup/keymap.c @@ -9,14 +9,16 @@ * $Id: keymap.c,v 1.9.2.1 2004/04/14 22:05:41 gespinasse Exp $ * */ - + +// Translation +#include +#define _(x) dgettext("setup", x) + #include "setup.h" extern FILE *flog; extern char *mylog; -extern char **ctr; - extern int automode; #define MAX_FILENAMES 5000 @@ -65,7 +67,7 @@ int handlekeymap(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -79,8 +81,9 @@ int handlekeymap(void) choice = c; } - rc = newtWinMenu(ctr[TR_KEYBOARD_MAPPING], ctr[TR_KEYBOARD_MAPPING_LONG], 50, 5, 5, 6, displaynames, &choice, - ctr[TR_OK], ctr[TR_CANCEL], NULL); + rc = newtWinMenu(_("Keyboard mapping"), + _("Choose the type of keyboard you are using from the list below."), + 50, 5, 5, 6, displaynames, &choice, _("OK"), _("Cancel"), NULL); strcpy(keymap, filenames[choice]); diff --git a/src/setup/m4/attributes.m4 b/src/setup/m4/attributes.m4 new file mode 100644 index 000000000..7e080da65 --- /dev/null +++ b/src/setup/m4/attributes.m4 @@ -0,0 +1,288 @@ +dnl Macros to check the presence of generic (non-typed) symbols. +dnl Copyright (c) 2006-2008 Diego Pettenò +dnl Copyright (c) 2006-2008 xine project +dnl Copyright (c) 2012 Lucas De Marchi +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +dnl 02110-1301, USA. +dnl +dnl As a special exception, the copyright owners of the +dnl macro gives unlimited permission to copy, distribute and modify the +dnl configure scripts that are the output of Autoconf when processing the +dnl Macro. You need not follow the terms of the GNU General Public +dnl License when using or distributing such scripts, even though portions +dnl of the text of the Macro appear in them. The GNU General Public +dnl License (GPL) does govern all other use of the material that +dnl constitutes the Autoconf Macro. +dnl +dnl This special exception to the GPL applies to versions of the +dnl Autoconf Macro released by this project. When you make and +dnl distribute a modified version of the Autoconf Macro, you may extend +dnl this special exception to the GPL to apply to your modified version as +dnl well. + +dnl Check if FLAG in ENV-VAR is supported by compiler and append it +dnl to WHERE-TO-APPEND variable +dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG]) + +AC_DEFUN([CC_CHECK_FLAG_APPEND], [ + AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2], + AS_TR_SH([cc_cv_$2_$3]), + [eval "AS_TR_SH([cc_save_$2])='${$2}'" + eval "AS_TR_SH([$2])='-Werror $3'" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a = 0; int main(void) { return a; } ])], + [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"], + [eval "AS_TR_SH([cc_cv_$2_$3])='no'"]) + eval "AS_TR_SH([$2])='$cc_save_$2'"]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes], + [eval "$1='${$1} $3'"]) +]) + +dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2]) +AC_DEFUN([CC_CHECK_FLAGS_APPEND], [ + for flag in $3; do + CC_CHECK_FLAG_APPEND($1, $2, $flag) + done +]) + +dnl Check if the flag is supported by linker (cacheable) +dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) + +AC_DEFUN([CC_CHECK_LDFLAGS], [ + AC_CACHE_CHECK([if $CC supports $1 flag], + AS_TR_SH([cc_cv_ldflags_$1]), + [ac_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $1" + AC_LINK_IFELSE([int main() { return 1; }], + [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"], + [eval "AS_TR_SH([cc_cv_ldflags_$1])="]) + LDFLAGS="$ac_save_LDFLAGS" + ]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes], + [$2], [$3]) +]) + +dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for +dnl the current linker to avoid undefined references in a shared object. +AC_DEFUN([CC_NOUNDEFINED], [ + dnl We check $host for which systems to enable this for. + AC_REQUIRE([AC_CANONICAL_HOST]) + + case $host in + dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads + dnl are requested, as different implementations are present; to avoid problems + dnl use -Wl,-z,defs only for those platform not behaving this way. + *-freebsd* | *-openbsd*) ;; + *) + dnl First of all check for the --no-undefined variant of GNU ld. This allows + dnl for a much more readable commandline, so that people can understand what + dnl it does without going to look for what the heck -z defs does. + for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do + CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"]) + break + done + ;; + esac + + AC_SUBST([LDFLAGS_NOUNDEFINED]) +]) + +dnl Check for a -Werror flag or equivalent. -Werror is the GCC +dnl and ICC flag that tells the compiler to treat all the warnings +dnl as fatal. We usually need this option to make sure that some +dnl constructs (like attributes) are not simply ignored. +dnl +dnl Other compilers don't support -Werror per se, but they support +dnl an equivalent flag: +dnl - Sun Studio compiler supports -errwarn=%all +AC_DEFUN([CC_CHECK_WERROR], [ + AC_CACHE_CHECK( + [for $CC way to treat warnings as errors], + [cc_cv_werror], + [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror], + [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])]) + ]) +]) + +AC_DEFUN([CC_CHECK_ATTRIBUTE], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))], + AS_TR_SH([cc_cv_attribute_$1]), + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])], + [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"], + [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"]) + CFLAGS="$ac_save_CFLAGS" + ]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes], + [AC_DEFINE( + AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1, + [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))] + ) + $4], + [$5]) +]) + +AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [ + CC_CHECK_ATTRIBUTE( + [constructor],, + [void __attribute__((constructor)) ctor() { int a; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_FORMAT], [ + CC_CHECK_ATTRIBUTE( + [format], [format(printf, n, n)], + [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [ + CC_CHECK_ATTRIBUTE( + [format_arg], [format_arg(printf)], + [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [ + CC_CHECK_ATTRIBUTE( + [visibility_$1], [visibility("$1")], + [void __attribute__((visibility("$1"))) $1_function() { }], + [$2], [$3]) +]) + +AC_DEFUN([CC_ATTRIBUTE_NONNULL], [ + CC_CHECK_ATTRIBUTE( + [nonnull], [nonnull()], + [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_UNUSED], [ + CC_CHECK_ATTRIBUTE( + [unused], , + [void some_function(void *foo, __attribute__((unused)) void *bar);], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [ + CC_CHECK_ATTRIBUTE( + [sentinel], , + [void some_function(void *foo, ...) __attribute__((sentinel));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [ + CC_CHECK_ATTRIBUTE( + [deprecated], , + [void some_function(void *foo, ...) __attribute__((deprecated));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_ALIAS], [ + CC_CHECK_ATTRIBUTE( + [alias], [weak, alias], + [void other_function(void *foo) { } + void some_function(void *foo) __attribute__((weak, alias("other_function")));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_MALLOC], [ + CC_CHECK_ATTRIBUTE( + [malloc], , + [void * __attribute__((malloc)) my_alloc(int n);], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_PACKED], [ + CC_CHECK_ATTRIBUTE( + [packed], , + [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));], + [$1], [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_CONST], [ + CC_CHECK_ATTRIBUTE( + [const], , + [int __attribute__((const)) twopow(int n) { return 1 << n; } ], + [$1], [$2]) +]) + +AC_DEFUN([CC_FLAG_VISIBILITY], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([if $CC supports -fvisibility=hidden], + [cc_cv_flag_visibility], + [cc_flag_visibility_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden], + cc_cv_flag_visibility='yes', + cc_cv_flag_visibility='no') + CFLAGS="$cc_flag_visibility_save_CFLAGS"]) + + AS_IF([test "x$cc_cv_flag_visibility" = "xyes"], + [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1, + [Define this if the compiler supports the -fvisibility flag]) + $1], + [$2]) +]) + +AC_DEFUN([CC_FUNC_EXPECT], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([if compiler has __builtin_expect function], + [cc_cv_func_expect], + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + AC_COMPILE_IFELSE([AC_LANG_SOURCE( + [int some_function() { + int a = 3; + return (int)__builtin_expect(a, 3); + }])], + [cc_cv_func_expect=yes], + [cc_cv_func_expect=no]) + CFLAGS="$ac_save_CFLAGS" + ]) + + AS_IF([test "x$cc_cv_func_expect" = "xyes"], + [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1, + [Define this if the compiler supports __builtin_expect() function]) + $1], + [$2]) +]) + +AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported], + [cc_cv_attribute_aligned], + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + for cc_attribute_align_try in 64 32 16 8 4 2; do + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ + int main() { + static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0; + return c; + }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) + done + CFLAGS="$ac_save_CFLAGS" + ]) + + if test "x$cc_cv_attribute_aligned" != "x"; then + AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned], + [Define the highest alignment supported]) + fi +]) diff --git a/src/setup/main.c b/src/setup/main.c index d6531bdf0..3d47f58f4 100644 --- a/src/setup/main.c +++ b/src/setup/main.c @@ -8,36 +8,22 @@ * */ +// Translation +#include +#define _(x) dgettext("setup", x) + #include "setup.h" FILE *flog = NULL; char *mylog; -char **ctr = NULL; - int automode = 0; struct nic nics[20] = { { "" , "" , "" , "" } }; struct knic knics[20] = { { "" , "" , "" , "" } }; -extern char *en_tr[]; -extern char *de_tr[]; -extern char *fr_tr[]; -extern char *es_tr[]; -extern char *pl_tr[]; -extern char *ru_tr[]; -extern char *nl_tr[]; -extern char *tr_tr[]; - int main(int argc, char *argv[]) { -#ifdef LANG_EN_ONLY - char *shortlangnames[] = { "en", NULL }; - char **langtrs[] = { en_tr, NULL }; -#else - char *shortlangnames[] = { "de", "en", "fr", "es", "nl", "pl", "ru", "tr", NULL }; - char **langtrs[] = { de_tr, en_tr, fr_tr, es_tr, nl_tr, pl_tr, ru_tr, tr_tr, NULL }; -#endif int choice; char *sections[11]; /* need to fill this out AFTER knowning lang */ int rc; @@ -67,6 +53,7 @@ int main(int argc, char *argv[]) if (!setlocale(LC_CTYPE,"")) fprintf(flog, "Locale not spezified. Check LANG, LC_CTYPE, RC_ALL."); +#if 0 kv = initkeyvalues(); if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings"))) { @@ -95,15 +82,16 @@ int main(int argc, char *argv[]) goto EXIT; ctr = langtrs[choice]; } +#endif - sections[0] = ctr[TR_KEYBOARD_MAPPING]; - sections[1] = ctr[TR_TIMEZONE]; - sections[2] = ctr[TR_HOSTNAME]; - sections[3] = ctr[TR_DOMAINNAME]; - sections[4] = ctr[TR_NETWORKING]; - sections[5] = ctr[TR_ISDN]; - sections[6] = ctr[TR_ROOT_PASSWORD]; - sections[7] = ctr[TR_ADMIN_PASSWORD]; + sections[0] = _("Keyboard mapping"); + sections[1] = _("Timezone"); + sections[2] = _("Hostname"); + sections[3] = _("Domain name"); + sections[4] = _("Networking"); + sections[5] = _("ISDN"); + sections[6] = _("'root' password"); + sections[7] = _("'admin' password"); sections[8] = NULL; newtInit(); @@ -119,16 +107,16 @@ int main(int argc, char *argv[]) sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN); } newtDrawRootText(14, 0, title); - newtPushHelpLine(ctr[TR_HELPLINE]); + newtPushHelpLine(_(" / between elements | selects")); if (automode == 0) { choice = 0; for (;;) { - rc = newtWinMenu(ctr[TR_SECTION_MENU], - ctr[TR_SELECT_THE_ITEM], 50, 5, 5, 11, - sections, &choice, ctr[TR_OK], ctr[TR_QUIT], NULL); + rc = newtWinMenu(_("Section menu"), + _("Select the item you wish to configure."), 50, 5, 5, 11, + sections, &choice, _("OK"), _("Quit"), NULL); if (rc == 2) break; @@ -196,15 +184,17 @@ int main(int argc, char *argv[]) autook = 1; } -EXIT: +EXIT: if (automode != 0) { sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN); if (autook) - newtWinMessage(title, ctr[TR_OK], ctr[TR_SETUP_FINISHED]); - else - { - newtWinMessage(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_SETUP_NOT_COMPLETE]); + newtWinMessage(title, _("OK"), _("Setup is complete.")); + else { + newtWinMessage(_("Warning"), _("OK"), + _("Initial setup was not entirely complete. " + "You must ensure that Setup is properly finished by running " + "setup again at the shell.")); fprintf(flog, "Setup program has not finished.\n"); fflush(flog); diff --git a/src/setup/misc.c b/src/setup/misc.c index 58e9bb275..2a9f1312f 100644 --- a/src/setup/misc.c +++ b/src/setup/misc.c @@ -7,14 +7,16 @@ * Misc. stuff for the lib. * */ - + +// Translation +#include +#define _(x) dgettext("setup", x) + #include "setup.h" extern FILE *flog; extern char *mylog; -extern char **ctr; - extern int automode; /* This will rewrite /etc/hosts, /etc/hosts.*, and the apache ServerName file. */ @@ -35,7 +37,7 @@ int writehostsfiles(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } findkey(kv, "GREEN_ADDRESS", address); @@ -47,7 +49,7 @@ int writehostsfiles(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } strcpy(hostname, SNAME ); @@ -57,7 +59,7 @@ int writehostsfiles(void) if (!(file = fopen(CONFIG_ROOT "/main/hostname.conf", "w"))) { - sprintf (message, ctr[TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF], CONFIG_ROOT); + sprintf (message, _("Unable to write %s/main/hostname.conf"), CONFIG_ROOT); errorbox(message); return 0; } @@ -66,12 +68,12 @@ int writehostsfiles(void) if (!(file = fopen(CONFIG_ROOT "/main/hosts", "r"))) { - errorbox(ctr[TR_UNABLE_TO_OPEN_HOSTS_FILE]); + errorbox(_("Unable to open main hosts file.")); return 0; } if (!(hosts = fopen("/etc/hosts", "w"))) { - errorbox(ctr[TR_UNABLE_TO_WRITE_ETC_HOSTS]); + errorbox(_("Unable to write /etc/hosts.")); return 0; } fprintf(hosts, "127.0.0.1\tlocalhost\n"); @@ -112,7 +114,7 @@ int writehostsfiles(void) /* TCP wrappers stuff. */ if (!(file = fopen("/etc/hosts.deny", "w"))) { - errorbox(ctr[TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY]); + errorbox(_("Unable to write /etc/hosts.deny.")); return 0; } fprintf(file, "ALL : ALL\n"); @@ -120,7 +122,7 @@ int writehostsfiles(void) if (!(file = fopen("/etc/hosts.allow", "w"))) { - errorbox(ctr[TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW]); + errorbox(_("Unable to write /etc/hosts.allow.")); return 0; } fprintf(file, "sshd : ALL\n"); @@ -131,7 +133,7 @@ int writehostsfiles(void) sprintf(commandstring, "/bin/hostname %s.%s", hostname, domainname); if (mysystem(commandstring)) { - errorbox(ctr[TR_UNABLE_TO_SET_HOSTNAME]); + errorbox(_("Unable to set hostname.")); return 0; } @@ -142,8 +144,8 @@ int handleisdn(void) { char command[STRING_SIZE]; sprintf(command, "/etc/rc.d/init.d/mISDN config"); - if (runcommandwithstatus(command, ctr[TR_PROBING_ISDN])) - errorbox(ctr[TR_ERROR_PROBING_ISDN]); + if (runcommandwithstatus(command, _("ISDN"), _("Scanning and configuring ISDN devices."))) + errorbox(_("Unable to scan for ISDN devices.")); // Need to write some lines that count the cards and say the names... return 1; } diff --git a/src/setup/netstuff.c b/src/setup/netstuff.c index 8c6f3fa90..3ab5835a8 100644 --- a/src/setup/netstuff.c +++ b/src/setup/netstuff.c @@ -8,14 +8,18 @@ * */ -#include "libsmooth.h" +#include #include +// Translation +#include +#define _(x) dgettext("setup", x) + +#include "setup.h" + extern FILE *flog; extern char *mylog; -extern char **ctr; - extern struct nic nics[]; extern struct knic knics[]; @@ -79,12 +83,12 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, sprintf(dhcphostnamefield, "%s_DHCP_HOSTNAME", colour); sprintf(dhcpforcemtufield, "%s_DHCP_FORCE_MTU", colour); - sprintf(message, ctr[TR_INTERFACE], colour); + sprintf(message, _("Interface - %s"), colour); newtCenteredWindow(44, (typeflag ? 18 : 12), message); networkform = newtForm(NULL, NULL, 0); - sprintf(message, ctr[TR_ENTER_THE_IP_ADDRESS_INFORMATION], colour); + sprintf(message, _("Enter the IP address information for the %s interface."), colour); header = newtTextboxReflowed(1, 1, message, 42, 0, 0, 0); newtFormAddComponent(networkform, header); @@ -96,18 +100,19 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, if (strcmp(temp, "STATIC") == 0) startstatictype = 1; if (strcmp(temp, "DHCP") == 0) startdhcptype = 1; if (strcmp(temp, "PPPOE") == 0) startpppoetype = 1; - statictyperadio = newtRadiobutton(2, 4, ctr[TR_STATIC], startstatictype, NULL); - dhcptyperadio = newtRadiobutton(2, 5, ctr[TR_DHCP], startdhcptype, statictyperadio); - pppoetyperadio = newtRadiobutton(2, 6, ctr[TR_PPP_DIALUP], startpppoetype, dhcptyperadio); + statictyperadio = newtRadiobutton(2, 4, _("Static"), startstatictype, NULL); + dhcptyperadio = newtRadiobutton(2, 5, _("DHCP"), startdhcptype, statictyperadio); + pppoetyperadio = newtRadiobutton(2, 6, _("PPP DIALUP (PPPoE, modem, ATM ...)"), + startpppoetype, dhcptyperadio); newtFormAddComponents(networkform, statictyperadio, dhcptyperadio, pppoetyperadio, NULL); newtComponentAddCallback(statictyperadio, networkdialogcallbacktype, NULL); newtComponentAddCallback(dhcptyperadio, networkdialogcallbacktype, NULL); newtComponentAddCallback(pppoetyperadio, networkdialogcallbacktype, NULL); dhcphostnamelabel = newtTextbox(2, 8, 18, 1, 0); - newtTextboxSetText(dhcphostnamelabel, ctr[TR_DHCP_HOSTNAME]); + newtTextboxSetText(dhcphostnamelabel, _("DHCP Hostname:")); dhcpforcemtulabel = newtTextbox(2, 9, 18, 1, 0); - newtTextboxSetText(dhcpforcemtulabel, ctr[TR_DHCP_FORCE_MTU]); + newtTextboxSetText(dhcpforcemtulabel, _("Force DHCP MTU:")); strcpy(temp, defaultdhcphostname); findkey(kv, dhcphostnamefield, temp); dhcphostnameentry = newtEntry(20, 8, temp, 20, &dhcphostnameresult, 0); @@ -126,7 +131,7 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, } /* Address */ addresslabel = newtTextbox(2, (typeflag ? 11 : 4) + 0, 18, 1, 0); - newtTextboxSetText(addresslabel, ctr[TR_IP_ADDRESS_PROMPT]); + newtTextboxSetText(addresslabel, _("IP address:")); strcpy(temp, ""); findkey(kv, addressfield, temp); addressentry = newtEntry(20, (typeflag ? 11 : 4) + 0, temp, 20, &addressresult, 0); @@ -138,7 +143,7 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, /* Netmask */ netmasklabel = newtTextbox(2, (typeflag ? 11 : 4) + 1, 18, 1, 0); - newtTextboxSetText(netmasklabel, ctr[TR_NETMASK_PROMPT]); + newtTextboxSetText(netmasklabel, _("Network mask:")); strcpy(temp, "255.255.255.0"); findkey(kv, netmaskfield, temp); netmaskentry = newtEntry(20, (typeflag ? 11 : 4) + 1, temp, 20, &netmaskresult, 0); newtEntrySetFilter(netmaskentry, ip_input_filter, NULL); @@ -149,8 +154,8 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, newtFormAddComponent(networkform, netmaskentry); /* Buttons. */ - ok = newtButton(8, (typeflag ? 14 : 7), ctr[TR_OK]); - cancel = newtButton(26, (typeflag ? 14 : 7), ctr[TR_CANCEL]); + ok = newtButton(8, (typeflag ? 14 : 7), _("OK")); + cancel = newtButton(26, (typeflag ? 14 : 7), _("Cancel")); newtFormAddComponents(networkform, ok, cancel, NULL); @@ -165,7 +170,8 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, if (es.u.co == ok) { /* OK was pressed; verify the contents of each entry. */ - strcpy(message, ctr[TR_INVALID_FIELDS]); + strcpy(message, _("The following fields are invalid:")); + strcat(message, "\n\n"); strcpy(type, "STATIC"); if (typeflag) @@ -174,12 +180,14 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, { if (inet_addr(addressresult) == INADDR_NONE) { - strcat(message, ctr[TR_IP_ADDRESS_CR]); + strcat(message, _("IP address")); + strcat(message, "\n"); error = 1; } if (inet_addr(netmaskresult) == INADDR_NONE) { - strcat(message, ctr[TR_NETWORK_MASK_CR]); + strcat(message, _("Network mask")); + strcat(message, "\n"); error = 1; } } @@ -187,7 +195,8 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, { if (!strlen(dhcphostnameresult)) { - strcat(message, ctr[TR_DHCP_HOSTNAME_CR]); + strcat(message, _("DHCP hostname")); + strcat(message, "\n"); error = 1; } } @@ -365,7 +374,7 @@ int get_knic(int card) //returns "0" for zero cards or error and "1" card is fo if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -384,7 +393,7 @@ int get_knic(int card) //returns "0" for zero cards or error and "1" card is fo strcpy(knics[ card ].driver, temp); ret_value = 1; } else { - strcpy(knics[ card ].description, ctr[TR_UNSET]); + strcpy(knics[ card ].description, _("Unset")); ret_value = 0; } freekeyvalues(kv); @@ -554,7 +563,7 @@ int write_configs_netudev(int card , int colour) if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -657,16 +666,17 @@ int nicmenu(int colour) pMenuInhalt[mcount] = NULL; - sprintf(message, ctr[TR_CHOOSE_NETCARD], ucolourcard[colour]); + sprintf(message, _("Please choose a networkcard for the following interface - %s."), ucolourcard[colour]); rc=2; while ( rc == 2 ) { - rc = newtWinMenu( ctr[TR_NETCARDMENU2], message, 50, 5, 5, 6, pMenuInhalt, &choise, ctr[TR_SELECT], ctr[TR_IDENTIFY], ctr[TR_CANCEL], NULL); + rc = newtWinMenu(_("Extended Network Menu"), message, 50, 5, 5, 6, pMenuInhalt, &choise, + _("Select"), _("Identify"), _("Cancel"), NULL); if ( rc == 2 ) { sprintf(temp, "/sbin/ip link set %s up", nics[found_NIC_as_Card[choise]].nic); mysystem(temp); sprintf(temp, "/usr/sbin/ethtool -p %s 10", nics[found_NIC_as_Card[choise]].nic); - if (runcommandwithstatus(temp,ctr[TR_IDENTIFY_SHOULD_BLINK]) != 0) { - errorbox(ctr[TR_IDENTIFY_NOT_SUPPORTED]); + if (runcommandwithstatus(temp, _("Device Identification"), _("The lights on the selected port should flash now for 10 seconds...")) != 0) { + errorbox(_("Identification is not supported by this interface.")); sprintf(temp, "/sbin/ip link set %s down", nics[found_NIC_as_Card[choise]].nic); mysystem(temp); } @@ -678,7 +688,7 @@ int nicmenu(int colour) return 0; } else { // We have to add here that you can manually add a device - errorbox( ctr[TR_ERROR_INTERFACES]); + errorbox(_("There are no unassigned interfaces on your system.")); return 1; } } @@ -691,12 +701,12 @@ int clear_card_entry(int card) if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } strcpy(knics[card].driver, ""); - strcpy(knics[card].description, ctr[TR_UNSET]); + strcpy(knics[card].description, _("Unset")); strcpy(knics[card].macaddr, ""); strcpy(knics[card].colour, ""); sprintf(temp, "%s_DRIVER", ucolourcard[card]); @@ -719,8 +729,8 @@ int ask_clear_card_entry(int card) char message[STRING_SIZE]; int rc; - sprintf(message, ctr[TR_REMOVE_CARD], ucolourcard[card]); - rc = newtWinChoice(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_CANCEL], message); + sprintf(message, _("Do you really want to remove the assigned %s interface?"), ucolourcard[card]); + rc = newtWinChoice(_("Warning"), _("OK"), _("Cancel"), message); if ( rc = 0 || rc == 1) { clear_card_entry(card); @@ -742,15 +752,14 @@ int manualdriver(char *driver, char *driveroptions) strcpy(driver, ""); strcpy(driveroptions, ""); - rc = newtWinEntries(ctr[TR_SELECT_NETWORK_DRIVER], - ctr[TR_MODULE_PARAMETERS], 50, 5, 5, 40, entries, - ctr[TR_OK], ctr[TR_CANCEL], NULL); + rc = newtWinEntries(_("Select network driver"), _("Set additional module parameters"), + 50, 5, 5, 40, entries, _("OK"), _("Cancel"), NULL); if (rc == 0 || rc == 1) { if (strlen(values[0])) { sprintf(commandstring, "/sbin/modprobe %s", values[0]); - if (runcommandwithstatus(commandstring, ctr[TR_LOADING_MODULE]) == 0) + if (runcommandwithstatus(commandstring, _("Loading module..."), _("Loading module...")) == 0) { if ((driverend = strchr(values[0], ' '))) { @@ -765,10 +774,10 @@ int manualdriver(char *driver, char *driveroptions) } } else - errorbox(ctr[TR_UNABLE_TO_LOAD_DRIVER_MODULE]); + errorbox(_("Unable to load driver module.")); } else - errorbox(ctr[TR_MODULE_NAME_CANNOT_BE_BLANK]); + errorbox(_("Module name cannot be blank.")); } free(values[0]); diff --git a/src/setup/networking.c b/src/setup/networking.c index edd3c71af..169a40719 100644 --- a/src/setup/networking.c +++ b/src/setup/networking.c @@ -7,7 +7,11 @@ * The big one: networking. * */ - + +// Translation +#include +#define _(x) dgettext("setup", x) + #include "setup.h" #define DNS1 0 @@ -18,8 +22,6 @@ extern FILE *flog; extern char *mylog; -extern char **ctr; - extern int automode; #define HAS_GREEN 1 @@ -105,12 +107,12 @@ int handlenetworking(void) if (netaddresschange) { runcommandwithstatus("/etc/rc.d/init.d/network stop", - ctr[TR_PUSHING_NETWORK_DOWN]); + _("Networking"), _("Stopping network...")); rename_nics(); runcommandwithstatus("/etc/rc.d/init.d/network start", - ctr[TR_PULLING_NETWORK_UP]); + _("Networking"), _("Restarting network...")); } } else { rename_nics(); @@ -129,7 +131,7 @@ int oktoleave(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -141,13 +143,13 @@ int oktoleave(void) strcpy(temp, ""); findkey(kv, "GREEN_DEV", temp); if (!(strlen(temp))) { - errorbox(ctr[TR_NO_GREEN_INTERFACE]); + errorbox(_("No GREEN interface assigned.")); freekeyvalues(kv); return 0; } if (!(interfacecheck(kv, "GREEN"))) { - errorbox(ctr[TR_MISSING_GREEN_IP]); + errorbox(_("Missing an IP address on GREEN.")); freekeyvalues(kv); return 0; } @@ -158,7 +160,8 @@ int oktoleave(void) strcpy(temp, ""); findkey(kv, "RED_DEV", temp); if (!(strlen(temp))) { - rc = newtWinChoice(ctr[TR_ERROR], ctr[TR_OK], ctr[TR_IGNORE], ctr[TR_NO_RED_INTERFACE]); + rc = newtWinChoice(_("Error"), _("OK"), _("Ignore"), + _("No RED interface assigned.")); if (rc == 0 || rc == 1) { freekeyvalues(kv); @@ -167,7 +170,7 @@ int oktoleave(void) } if (!(interfacecheck(kv, "RED"))) { - errorbox(ctr[TR_MISSING_RED_IP]); + errorbox(_("Missing an IP address on RED.")); freekeyvalues(kv); return 0; } @@ -177,13 +180,13 @@ int oktoleave(void) strcpy(temp, ""); findkey(kv, "ORANGE_DEV", temp); if (!(strlen(temp))) { - errorbox(ctr[TR_NO_ORANGE_INTERFACE]); + errorbox(_("No ORANGE interface assigned.")); freekeyvalues(kv); return 0; } if (!(interfacecheck(kv, "ORANGE"))) { - errorbox(ctr[TR_MISSING_ORANGE_IP]); + errorbox(_("Missing an IP address on ORANGE.")); freekeyvalues(kv); return 0; } @@ -193,13 +196,13 @@ int oktoleave(void) strcpy(temp, ""); findkey(kv, "BLUE_DEV", temp); if (!(strlen(temp))) { - errorbox(ctr[TR_NO_BLUE_INTERFACE]); + errorbox(_("No BLUE interface assigned.")); freekeyvalues(kv); return 0; } if (!(interfacecheck(kv, "BLUE"))) { - errorbox(ctr[TR_MISSING_BLUE_IP]); + errorbox(_("Missing an IP address on BLUE.")); freekeyvalues(kv); return 0; } @@ -211,14 +214,14 @@ int oktoleave(void) strcpy(temp, ""); findkey(kv, "DNS1", temp); if (!(strlen(temp))) { - errorbox(ctr[TR_MISSING_DNS]); + errorbox(_("Misssing DNS.")); freekeyvalues(kv); return 0; } strcpy(temp, ""); findkey(kv, "DEFAULT_GATEWAY", temp); if (!(strlen(temp))) { - errorbox(ctr[TR_MISSING_DEFAULT]); + errorbox(_("Missing Default Gateway.")); freekeyvalues(kv); return 0; } @@ -230,10 +233,13 @@ int oktoleave(void) /* Shows the main menu and a summary of the current settings. */ int firstmenu(void) { - char *sections[] = { ctr[TR_NETWORK_CONFIGURATION_TYPE], - ctr[TR_DRIVERS_AND_CARD_ASSIGNMENTS], - ctr[TR_ADDRESS_SETTINGS], - ctr[TR_DNS_AND_GATEWAY_SETTINGS], NULL }; + char *sections[] = { + _("Network configuration type"), + _("Drivers and card assignments"), + _("Address settings"), + _("DNS and Gateway settings"), + NULL + }; int rc; static int choice = 0; struct keyvalue *kv = initkeyvalues(); @@ -246,22 +252,22 @@ int firstmenu(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } if (netaddresschange) - strcpy(networkrestart, ctr[TR_RESTART_REQUIRED]); + strcpy(networkrestart, _("When configuration is complete, a network restart will be required.")); strcpy(temp, ""); findkey(kv, "CONFIG_TYPE", temp); x = atol(temp); x--; if (x < 0 || x > 4) x = 0; /* Format heading bit. */ - snprintf(message, 1000, ctr[TR_CURRENT_CONFIG], configtypenames[x], + snprintf(message, 1000, _("Current config: %s%s"), configtypenames[x], networkrestart); - rc = newtWinMenu(ctr[TR_NETWORK_CONFIGURATION_MENU], message, 50, 5, 5, 6, - sections, &choice, ctr[TR_OK], ctr[TR_DONE], NULL); + rc = newtWinMenu(_("Network configuration menu"), message, 50, 5, 5, 6, + sections, &choice, _("OK"), _("Done"), NULL); if (rc == 0 || rc == 1) result = choice + 1; @@ -283,7 +289,7 @@ int configtypemenu(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -292,11 +298,15 @@ int configtypemenu(void) findkey(kv, "CONFIG_TYPE", temp); choise = atol(temp); choise--; - sprintf(message, ctr[TR_NETWORK_CONFIGURATION_TYPE_LONG], NAME); - rc = newtWinMenu(ctr[TR_NETWORK_CONFIGURATION_TYPE], message, 50, 5, 5, - 6, configtypenames, &choise, ctr[TR_OK], ctr[TR_CANCEL], NULL); + sprintf(message, _("Select the network configuration for %s. " + "The following configuration types list those interfaces which have ethernet attached. " + "If you change this setting, a network restart will be required, and you will have to " + "reconfigure the network driver assignments."), NAME); + rc = newtWinMenu(_("Network configuration type"), message, 50, 5, 5, + 6, configtypenames, &choise, _("OK"), _("Cancel"), NULL); if ( configtypecards[choise] > found ) { - sprintf(message, ctr[TR_NOT_ENOUGH_INTERFACES] , configtypecards[choise], found); + sprintf(message, _("Not enough netcards for your choice.\n\nNeeded: %d - Available: %d\n"), + configtypecards[choise], found); errorbox(message); } @@ -334,7 +344,7 @@ int drivermenu(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -347,42 +357,43 @@ int drivermenu(void) writekeyvalues(kv, CONFIG_ROOT "/ethernet/settings"); } - strcpy(message, ctr[TR_CONFIGURE_NETWORK_DRIVERS]); + strcpy(message, _("Configure network drivers, and which interface each card is assigned to. " + "The current configuration is as follows:\n\n")); kcount = 0; neednics = 0; if (HAS_GREEN) { - sprintf(temp, "GREEN: %s\n", knics[_GREEN_CARD_].description); + sprintf(temp, "%-6s: %s\n", "GREEN", knics[_GREEN_CARD_].description); strcat(message, temp); if (strlen(knics[_GREEN_CARD_].macaddr) ) { - sprintf(temp, "GREEN: (%s) %s green0\n", knics[_GREEN_CARD_].macaddr, ctr[TR_AS]); + sprintf(temp, "%-6s: (%s)\n", "GREEN", knics[_GREEN_CARD_].macaddr); strcat(message, temp); } neednics++; } if (HAS_RED) { - sprintf(temp, "RED: %s\n", knics[_RED_CARD_].description); + sprintf(temp, "%-6s: %s\n", "RED", knics[_RED_CARD_].description); strcat(message, temp); if (strlen(knics[_RED_CARD_].macaddr) ) { - sprintf(temp, "RED: (%s) %s red0\n", knics[_RED_CARD_].macaddr, ctr[TR_AS]); + sprintf(temp, "%-6s: (%s)\n", "RED", knics[_RED_CARD_].macaddr); strcat(message, temp); } neednics++; } if (HAS_ORANGE) { - sprintf(temp, "ORANGE: %s\n", knics[_ORANGE_CARD_].description); + sprintf(temp, "%-6s: %s\n", "ORANGE", knics[_ORANGE_CARD_].description); strcat(message, temp); if ( strlen(knics[_ORANGE_CARD_].macaddr) ) { - sprintf(temp, "ORANGE: (%s) %s orange0\n", knics[_ORANGE_CARD_].macaddr, ctr[TR_AS]); + sprintf(temp, "%-6s: (%s)\n", "ORANGE", knics[_ORANGE_CARD_].macaddr); strcat(message, temp); } neednics++; } if (HAS_BLUE) { - sprintf(temp, "BLUE: %s\n", knics[_BLUE_CARD_].description); + sprintf(temp, "%-6s: %s\n", "BLUE", knics[_BLUE_CARD_].description); strcat(message, temp); if (strlen(knics[_BLUE_CARD_].macaddr)) { - sprintf(temp, "BLUE: (%s) %s blue0\n", knics[_BLUE_CARD_].macaddr, ctr[TR_AS]); + sprintf(temp, "%-6s: (%s)\n", "BLUE", knics[_BLUE_CARD_].macaddr); strcat(message, temp); } neednics++; @@ -394,9 +405,10 @@ int drivermenu(void) if (neednics = kcount) { - strcat(message, ctr[TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS]); - rc = newtWinChoice(ctr[TR_DRIVERS_AND_CARD_ASSIGNMENTS], ctr[TR_OK], - ctr[TR_CANCEL], message); + strcat(message, "\n"); + strcat(message, _("Do you wish to change these settings?")); + rc = newtWinChoice(_("Drivers and card assignments"), _("OK"), + _("Cancel"), message); if (rc == 0 || rc == 1) { changedrivers(); @@ -428,12 +440,12 @@ int changedrivers(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } if (automode == 0) runcommandwithstatus("/etc/rc.d/init.d/network stop red blue orange", - ctr[TR_PUSHING_NON_LOCAL_NETWORK_DOWN]); + _("Networking"), _("Restarting non-local network...")); findkey(kv, "CONFIG_TYPE", temp); configtype = atol(temp); if (configtype == 1) @@ -450,16 +462,16 @@ int changedrivers(void) do { count = 0; - strcpy(message, ctr[TR_INTERFACE_CHANGE]); + strcpy(message, _("Please choose the interface you wish to change.\n\n")); if (green) { strcpy(MenuInhalt[count], "GREEN"); pMenuInhalt[count] = MenuInhalt[count]; NicEntry[_GREEN_CARD_] = count; - sprintf(temp, "GREEN: %s\n", knics[_GREEN_CARD_].description); + sprintf(temp, "%-6s: %s\n", "GREEN", knics[_GREEN_CARD_].description); strcat(message, temp); if ( strlen(knics[_GREEN_CARD_].macaddr) ) { - sprintf(temp, "GREEN: (%s) %s green0\n", knics[_GREEN_CARD_].macaddr, ctr[TR_AS]); + sprintf(temp, "%-6s: (%s)\n", "GREEN", knics[_GREEN_CARD_].macaddr); strcat(message, temp); } count++; @@ -469,10 +481,10 @@ int changedrivers(void) strcpy(MenuInhalt[count], "RED"); pMenuInhalt[count] = MenuInhalt[count]; NicEntry[_RED_CARD_] = count; - sprintf(temp, "RED: %s\n", knics[_RED_CARD_].description); + sprintf(temp, "%-6s: %s\n", "RED", knics[_RED_CARD_].description); strcat(message, temp); if ( strlen(knics[_RED_CARD_].macaddr) ) { - sprintf(temp, "RED: (%s) %s red0\n", knics[_RED_CARD_].macaddr, ctr[TR_AS]); + sprintf(temp, "%-6s: (%s)\n", "RED", knics[_RED_CARD_].macaddr); strcat(message, temp); } count++; @@ -482,10 +494,10 @@ int changedrivers(void) strcpy(MenuInhalt[count], "ORANGE"); pMenuInhalt[count] = MenuInhalt[count]; NicEntry[_ORANGE_CARD_] = count; - sprintf(temp, "ORANGE: %s\n", knics[_ORANGE_CARD_].description); + sprintf(temp, "%-6s: %s\n", "ORANGE", knics[_ORANGE_CARD_].description); strcat(message, temp); if ( strlen(knics[_ORANGE_CARD_].macaddr) ) { - sprintf(temp, "ORANGE: (%s) %s orange0\n", knics[_ORANGE_CARD_].macaddr, ctr[TR_AS]); + sprintf(temp, "%-6s: (%s)\n", "ORANGE", knics[_ORANGE_CARD_].macaddr); strcat(message, temp); } count++; @@ -495,17 +507,18 @@ int changedrivers(void) strcpy(MenuInhalt[count], "BLUE"); pMenuInhalt[count] = MenuInhalt[count]; NicEntry[_BLUE_CARD_] = count; - sprintf(temp, "BLUE: %s\n", knics[_BLUE_CARD_].description); + sprintf(temp, "%-6s: %s\n", "BLUE", knics[_BLUE_CARD_].description); strcat(message, temp); if ( strlen(knics[_BLUE_CARD_].macaddr) ) { - sprintf(temp, "BLUE: (%s) %s blue0\n", knics[_BLUE_CARD_].macaddr, ctr[TR_AS]); + sprintf(temp, "%-6s: (%s)\n", "BLUE", knics[_BLUE_CARD_].macaddr); strcat(message, temp); } count++; } pMenuInhalt[count] = NULL; - rc = newtWinMenu( ctr[TR_NETCARD_COLOR], message, 70, 5, 5, 6, pMenuInhalt, &choise, ctr[TR_SELECT], ctr[TR_REMOVE], ctr[TR_DONE], NULL); + rc = newtWinMenu(_("Assigned Cards"), message, 70, 5, 5, 6, pMenuInhalt, + &choise, _("Select"), _("Remove"), _("Done"), NULL); if ( rc == 0 || rc == 1) { if ((green) && ( choise == NicEntry[0])) nicmenu(_GREEN_CARD_); @@ -537,12 +550,15 @@ int greenaddressmenu(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } - sprintf(message, ctr[TR_WARNING_LONG], NAME); - rc = newtWinChoice(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_CANCEL], message); + sprintf(message, _("If you change this IP address, and you are logged in remotely, " + "your connection to the %s machine will be broken, and you will have to reconnect " + "on the new IP. This is a risky operation, and should only be attempted if you " + "have physical access to the machine, should something go wrong."), NAME); + rc = newtWinChoice(_("Warning"), _("OK"), _("Cancel"), message); if (rc == 0 || rc == 1) { @@ -585,14 +601,14 @@ int addressesmenu(void) { freekeyvalues(kv); freekeyvalues(mainkv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } if (!(readkeyvalues(mainkv, CONFIG_ROOT "/main/settings"))) { freekeyvalues(kv); freekeyvalues(mainkv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -622,18 +638,20 @@ int addressesmenu(void) done = 0; while (!done) { - rc = newtWinMenu(ctr[TR_ADDRESS_SETTINGS], - ctr[TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE], 50, 5, - 5, 6, sections, &choice, ctr[TR_OK], ctr[TR_DONE], NULL); + rc = newtWinMenu(_("Address settings"), + _("Select the interface you wish to reconfigure."), 50, 5, + 5, 6, sections, &choice, _("OK"), _("Done"), NULL); if (rc == 0 || rc == 1) { if (strcmp(sections[choice], "GREEN") == 0) { findkey(kv, "GREEN_ADDRESS", oldgreenaddress); - sprintf(message, ctr[TR_WARNING_LONG], NAME); - rc = newtWinChoice(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_CANCEL], - message); + sprintf(message, _("If you change this IP address, and you are logged in remotely, " + "your connection to the %s machine will be broken, and you will have to reconnect " + "on the new IP. This is a risky operation, and should only be attempted if you " + "have physical access to the machine, should something go wrong."), NAME); + rc = newtWinChoice(_("Warning"), _("OK"), _("Cancel"), message); if (rc == 0 || rc == 1) { if (changeaddress(kv, "GREEN", 0, "")) @@ -693,23 +711,23 @@ int dnsgatewaymenu(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } - entries[DNS1].text = ctr[TR_PRIMARY_DNS]; + entries[DNS1].text = _("Primary DNS:"); strcpy(temp, ""); findkey(kv, "DNS1", temp); values[DNS1] = strdup(temp); entries[DNS1].value = &values[DNS1]; entries[DNS1].flags = 0; - entries[DNS2].text = ctr[TR_SECONDARY_DNS]; + entries[DNS2].text = _("Secondary DNS:"); strcpy(temp, ""); findkey(kv, "DNS2", temp); values[DNS2] = strdup(temp); entries[DNS2].value = &values[DNS2]; entries[DNS2].flags = 0; - entries[DEFAULT_GATEWAY].text = ctr[TR_DEFAULT_GATEWAY]; + entries[DEFAULT_GATEWAY].text = _("Default gateway:"); strcpy(temp, ""); findkey(kv, "DEFAULT_GATEWAY", temp); values[DEFAULT_GATEWAY] = strdup(temp); entries[DEFAULT_GATEWAY].value = &values[DEFAULT_GATEWAY]; @@ -723,17 +741,20 @@ int dnsgatewaymenu(void) { error = 0; - rc = newtWinEntries(ctr[TR_DNS_AND_GATEWAY_SETTINGS], - ctr[TR_DNS_AND_GATEWAY_SETTINGS_LONG], 50, 5, 5, 18, entries, - ctr[TR_OK], ctr[TR_CANCEL], NULL); + rc = newtWinEntries(_("DNS and Gateway settings"), + _("Enter the DNS and gateway information. " + "These settings are used only with Static IP (and DHCP if DNS set) on the RED interface."), + 50, 5, 5, 18, entries, _("OK"), _("Cancel"), NULL); if (rc == 0 || rc == 1) { - strcpy(message, ctr[TR_INVALID_FIELDS]); + strcpy(message, _("The following fields are invalid:")); + strcpy(message, "\n\n"); if (strlen(values[DNS1])) { if (inet_addr(values[DNS1]) == INADDR_NONE) { - strcat(message, ctr[TR_PRIMARY_DNS_CR]); + strcat(message, _("Primary DNS")); + strcat(message, "\n"); error = 1; } } @@ -741,7 +762,8 @@ int dnsgatewaymenu(void) { if (inet_addr(values[DNS2]) == INADDR_NONE) { - strcat(message, ctr[TR_SECONDARY_DNS_CR]); + strcat(message, _("Secondary DNS")); + strcat(message, "\n"); error = 1; } } @@ -749,13 +771,15 @@ int dnsgatewaymenu(void) { if (inet_addr(values[DEFAULT_GATEWAY]) == INADDR_NONE) { - strcat(message, ctr[TR_DEFAULT_GATEWAY_CR]); + strcat(message, _("Default gateway")); + strcat(message, "\n"); error = 1; } } if (!strlen(values[DNS1]) && strlen(values[DNS2])) { - strcpy(message, ctr[TR_SECONDARY_WITHOUT_PRIMARY_DNS]); + strcpy(message, _("Secondary DNS specified without a Primary DNS")); + strcat(message, "\n"); error = 1; } diff --git a/src/setup/passwords.c b/src/setup/passwords.c index f5a686b48..5b21a9795 100644 --- a/src/setup/passwords.c +++ b/src/setup/passwords.c @@ -10,13 +10,15 @@ * */ +// Translation +#include +#define _(x) dgettext("setup", x) + #include "setup.h" extern FILE *flog; extern char *mylog; -extern char **ctr; - extern int automode; int getpassword(char *password, char *text); @@ -28,14 +30,13 @@ int handlerootpassword(void) char commandstring[STRING_SIZE]; /* Root password. */ - if (getpassword(password, ctr[TR_ENTER_ROOT_PASSWORD]) == 2) + if (getpassword(password, _("Enter the 'root' user password. Login as this user for commandline access.")) == 2) return 0; snprintf(commandstring, STRING_SIZE, "/bin/echo 'root:%s' | /usr/sbin/chpasswd", password); - if (runhiddencommandwithstatus(commandstring, ctr[TR_SETTING_ROOT_PASSWORD])) - { - errorbox(ctr[TR_PROBLEM_SETTING_ROOT_PASSWORD]); + if (runhiddencommandwithstatus(commandstring, _("Setting password"), _("Setting 'root' password...."))) { + errorbox(_("Problem setting 'root' password.")); return 0; } @@ -49,16 +50,16 @@ int handleadminpassword(void) char message[1000]; /* web interface admin password. */ - sprintf(message, ctr[TR_ENTER_ADMIN_PASSWORD], NAME, NAME); + sprintf(message, _("Enter %s 'admin' user password. " + "This is the user to use for logging into the %s web administration pages."), NAME, NAME); if (getpassword(password, message) == 2) return 0; snprintf(commandstring, STRING_SIZE, "/usr/sbin/htpasswd -c -m -b " CONFIG_ROOT "/auth/users admin '%s'", password); - sprintf(message, ctr[TR_SETTING_ADMIN_PASSWORD], NAME); - if (runhiddencommandwithstatus(commandstring, message)) - { - sprintf(message, ctr[TR_PROBLEM_SETTING_ADMIN_PASSWORD], NAME); + sprintf(message, _("Setting %s 'admin' user password..."), NAME); + if (runhiddencommandwithstatus(commandstring, _("Setting password"), message)) { + sprintf(message, _("Problem setting %s 'admin' user password."), NAME); errorbox(message); return 0; } @@ -72,8 +73,8 @@ int getpassword(char *password, char *text) char *values[] = { NULL, NULL, NULL }; /* pointers for the values. */ struct newtWinEntry entries[] = { - { ctr[TR_PASSWORD_PROMPT], &values[0], 2 }, - { ctr[TR_AGAIN_PROMPT], &values[1], 2 }, + { _("Password:"), &values[0], 2 }, + { _("Again:"), &values[1], 2 }, { NULL, NULL, 0 } }; char title[STRING_SIZE]; @@ -85,27 +86,27 @@ int getpassword(char *password, char *text) done = 1; sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN); rc = newtWinEntries(title, text, - 65, 5, 5, 50, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL); + 65, 5, 5, 50, entries, _("OK"), _("Cancel"), NULL); if (rc != 2) { if (strlen(values[0]) == 0 || strlen(values[1]) == 0) { - errorbox(ctr[TR_PASSWORD_CANNOT_BE_BLANK]); + errorbox(_("Password cannot be blank.")); done = 0; strcpy(values[0], ""); strcpy(values[1], ""); } else if (strcmp(values[0], values[1]) != 0) { - errorbox(ctr[TR_PASSWORDS_DO_NOT_MATCH]); + errorbox(_("Passwords do not match.")); done = 0; strcpy(values[0], ""); strcpy(values[1], ""); } else if (strchr(values[0], ' ')) { - errorbox(ctr[TR_PASSWORD_CANNOT_CONTAIN_SPACES]); + errorbox(_("Password cannot contain spaces.")); done = 0; strcpy(values[0], ""); strcpy(values[1], ""); diff --git a/src/setup/po/LINGUAS b/src/setup/po/LINGUAS new file mode 100644 index 000000000..7673daa94 --- /dev/null +++ b/src/setup/po/LINGUAS @@ -0,0 +1 @@ +de diff --git a/src/setup/po/Makevars b/src/setup/po/Makevars new file mode 100644 index 000000000..cf8c600c0 --- /dev/null +++ b/src/setup/po/Makevars @@ -0,0 +1,41 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = The IPFire Project (www.ipfire.org) + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = diff --git a/src/setup/po/POTFILES.in b/src/setup/po/POTFILES.in new file mode 100644 index 000000000..675adda0d --- /dev/null +++ b/src/setup/po/POTFILES.in @@ -0,0 +1,11 @@ +dhcp.c +domainname.c +hostname.c +keymap.c +main.c +misc.c +netstuff.c +networking.c +passwords.c +setup.h +timezone.c diff --git a/src/setup/po/de.po b/src/setup/po/de.po new file mode 100644 index 000000000..2aab9e176 --- /dev/null +++ b/src/setup/po/de.po @@ -0,0 +1,582 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Michael Tremer , 2014 +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-12 10:05+0000\n" +"PO-Revision-Date: 2014-08-12 10:10+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: German (http://www.transifex.com/projects/p/ipfire/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:718 +msgid "Primary DNS:" +msgstr "Primärer DNS:" + +#: dhcp.c:53 networking.c:724 +msgid "Secondary DNS:" +msgstr "Sekundärer DNS:" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:292 networking.c:347 +#: networking.c:443 networking.c:553 networking.c:604 networking.c:611 +#: networking.c:714 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:119 main.c:192 +#: main.c:194 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:270 networking.c:306 networking.c:410 networking.c:561 +#: networking.c:643 networking.c:654 networking.c:747 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "OK" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:306 +#: networking.c:411 networking.c:561 networking.c:654 networking.c:747 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "Abbrechen" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "Startadresse" + +#: dhcp.c:165 +msgid "End address" +msgstr "Endadresse" + +#: dhcp.c:173 networking.c:756 +msgid "Primary DNS" +msgstr "Primärer DNS" + +#: dhcp.c:182 networking.c:765 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:90 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:89 +msgid "Hostname" +msgstr "Hostname" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:87 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:88 timezone.c:77 +msgid "Timezone" +msgstr "Zeitzone" + +#: main.c:91 networking.c:110 networking.c:115 networking.c:448 +msgid "Networking" +msgstr "Netzwerk" + +#: main.c:92 misc.c:147 +msgid "ISDN" +msgstr "ISDN" + +#: main.c:93 +msgid "'root' password" +msgstr "" + +#: main.c:94 +msgid "'admin' password" +msgstr "" + +#: main.c:110 +msgid " / between elements | selects" +msgstr "" + +#: main.c:117 +msgid "Section menu" +msgstr "" + +#: main.c:118 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:119 +msgid "Quit" +msgstr "Beenden" + +#: main.c:192 +msgid "Setup is complete." +msgstr "" + +#: main.c:194 netstuff.c:733 networking.c:561 networking.c:654 +msgid "Warning" +msgstr "Warnung" + +#: main.c:195 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:750 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:521 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:305 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:410 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:641 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:744 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "Current config: %s%s" +msgstr "" + +#: networking.c:269 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:270 networking.c:521 networking.c:643 +msgid "Done" +msgstr "" + +#: networking.c:301 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:308 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:360 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:409 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:448 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:465 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:520 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:521 +msgid "Remove" +msgstr "" + +#: networking.c:557 networking.c:650 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:642 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:730 +msgid "Default gateway:" +msgstr "" + +#: networking.c:745 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:774 +msgid "Default gateway" +msgstr "" + +#: networking.c:781 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/probenic.sh b/src/setup/probenic.sh new file mode 100644 index 000000000..6c01cbb45 --- /dev/null +++ b/src/setup/probenic.sh @@ -0,0 +1,90 @@ +#!/bin/sh +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2011 IPFire Team # +# # +# 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 3 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, see . # +# # +############################################################################### + +if [ -e /var/ipfire/ethernet/scanned_nics ]; then + rm -f /var/ipfire/ethernet/scanned_nics +fi +touch /var/ipfire/ethernet/scanned_nics + +for card in `ls /sys/class/net`; do + + #Check if this is an Ethernet device (type=1) + if [ `cat /sys/class/net/$card/type` == "1" ]; then + hwaddr=`cat /sys/class/net/$card/address` + + #Check that is no VLAN if + if [[ ! "$card" =~ "[.]" ]]; then + + #check if this not a bridge + if [ ! -e /sys/class/net/$card/brforward ]; then + + #Check if mac is valid (not 00:00... or FF:FF...) + if [ ! "$hwaddr" == "00:00:00:00:00:00" ];then + if [ ! "$hwaddr" == "ff:ff:ff:ff:ff:ff" ];then + + driver=`grep DRIVER= /sys/class/net/$card/device/uevent | cut -d"=" -f2` + type=`grep MODALIAS= /sys/class/net/$card/device/uevent | cut -d"=" -f2 | cut -d":" -f1` + + #Default if not available in /sys/class/net + if [ "a$type" == "a" ]; then + type="???" + fi + if [ "a$driver" == "a" ]; then + driver="Unknown Network Interface ($card)" + fi + description=`echo $type: $driver` + + #Get more details for pci and usb devices + if [ "$type" == "pci" ]; then + slotname=`grep PCI_SLOT_NAME= /sys/class/net/$card/device/uevent | cut -d"=" -f2` + name=`lspci -s $slotname | cut -d':' -f3 | cut -c 2-` + description=`echo $type: $name` + fi + if [ "$type" == "usb" ]; then + bus=`grep DEVICE= /sys/class/net/$card/device/uevent | cut -d"/" -f5` + dev=`grep DEVICE= /sys/class/net/$card/device/uevent | cut -d"/" -f6` + #work around the base8 convert + let bus=`echo 1$bus`-1000 + let dev=`echo 1$dev`-1000 + name=`lsusb -s $bus:$dev | cut -d':' -f3 | cut -c 6-` + #kernel higher 3.2 changes + if [ "$name" == "" ]; then + vid=`grep PRODUCT= /sys/class/net/$card/device/uevent | cut -d"=" -f2 | cut -d"/" -f1` + pid=`grep PRODUCT= /sys/class/net/$card/device/uevent | cut -d"=" -f2 | cut -d"/" -f2` + name=`lsusb -d $vid:$pid | cut -d':' -f3 | cut -c 6-` + fi + description=`echo $type: $name` + fi + + echo desc: \"$description\" >>/var/ipfire/ethernet/scanned_nics + echo driver: $driver >>/var/ipfire/ethernet/scanned_nics + echo network.hwaddr: $hwaddr >>/var/ipfire/ethernet/scanned_nics + fi + fi + fi + fi + fi +done + +# Revert Accesspoint marking at mac address +sed -i 's|hwaddr: 06:|hwaddr: 00:|g' /var/ipfire/ethernet/scanned_nics + +exit 0 diff --git a/src/setup/setup.h b/src/setup/setup.h index 71f7e6f11..388d2edcf 100644 --- a/src/setup/setup.h +++ b/src/setup/setup.h @@ -10,7 +10,8 @@ * */ -#include "../libsmooth/libsmooth.h" +#include +#include /* hostname.c */ int handlehostname(void); diff --git a/src/setup/timezone.c b/src/setup/timezone.c index d0a848378..619ebf26a 100644 --- a/src/setup/timezone.c +++ b/src/setup/timezone.c @@ -10,13 +10,15 @@ * */ +// Translation +#include +#define _(x) dgettext("setup", x) + #include "setup.h" extern FILE *flog; extern char *mylog; -extern char **ctr; - extern int automode; #define MAX_FILENAMES 5000 @@ -58,7 +60,7 @@ int handletimezone(void) if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings"))) { freekeyvalues(kv); - errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + errorbox(_("Unable to open settings file")); return 0; } @@ -72,8 +74,8 @@ int handletimezone(void) choice = c; } - rc = newtWinMenu(ctr[TR_TIMEZONE], ctr[TR_TIMEZONE_LONG], 50, 5, 5, 6, displaynames, &choice, - ctr[TR_OK], ctr[TR_CANCEL], NULL); + rc = newtWinMenu(_("Timezone"), _("Choose the timezone you are in from the list below."), + 50, 5, 5, 6, displaynames, &choice, _("OK"), _("Cancel"), NULL); strcpy(timezone, filenames[choice]); From 5a2ac8f7013d23a62bd8d3705160606b33b7281b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 12:23:44 +0200 Subject: [PATCH 061/297] misc-progs: Dynamically link against libsmooth. --- lfs/misc-progs | 12 +--- src/misc-progs/Makefile | 131 ++++------------------------------------ 2 files changed, 15 insertions(+), 128 deletions(-) diff --git a/lfs/misc-progs b/lfs/misc-progs index 6902ccac1..c0e3919f5 100644 --- a/lfs/misc-progs +++ b/lfs/misc-progs @@ -48,16 +48,8 @@ md5 : $(TARGET) : @$(PREBUILD) - @rm -rf $(DIR_APP) $(DIR_SRC)/install+setup && cp -R $(DIR_SRC)/src/misc-progs/ $(DIR_SRC) - cp -R $(DIR_SRC)/src/install+setup/ $(DIR_SRC) - for i in $(DIR_SRC)/langs/*/install/lang_*.c ; do \ - cp $$i $(DIR_SRC)/install+setup/libsmooth; \ - done - cd $(DIR_SRC)/install+setup/libsmooth && chmod 755 makelangs.pl - cd $(DIR_SRC)/install+setup/libsmooth && make CFLAGS="$(CFLAGS) -Wall \ - -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \ - -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'" + @rm -rf $(DIR_APP) && cp -R $(DIR_SRC)/src/misc-progs/ $(DIR_SRC) cd $(DIR_APP) && make CFLAGS="$(CFLAGS) -Wall -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"' -DSNAME='\"$(SNAME)\"'" cd $(DIR_APP) && make install - @rm -rf $(DIR_APP) $(DIR_SRC)/install+setup + @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/misc-progs/Makefile b/src/misc-progs/Makefile index b4474355a..f5802d26a 100644 --- a/src/misc-progs/Makefile +++ b/src/misc-progs/Makefile @@ -18,10 +18,9 @@ # # ############################################################################### -CC=gcc -CFLAGS=-O2 -Wall - -COMPILE=$(CC) $(CFLAGS) +CC = gcc +CFLAGS ?= -O2 -Wall +LIBS = -lsmooth -lnewt PROGS = iowrap SUID_PROGS = squidctrl sshctrl ipfirereboot \ @@ -35,128 +34,24 @@ SUID_PROGS = squidctrl sshctrl ipfirereboot \ getconntracktable wirelessclient dnsmasqctrl torctrl SUID_UPDX = updxsetperms -install : all +OBJS = $(patsubst %,%.o,$(PROGS) $(SUID_PROGS)) + +install: all install -m 755 $(PROGS) /usr/local/bin install -m 4750 -g nobody $(SUID_PROGS) /usr/local/bin -all : $(PROGS) $(SUID_PROGS) +all: $(PROGS) $(SUID_PROGS) -clean : +clean: -rm -f $(PROGS) $(SUID_PROGS) *.o core ###### -% : %.c - $(COMPILE) $< setuid.o -o $@ +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ setuid.o: setuid.c setuid.h - $(COMPILE) $< -c -o $@ + $(CC) $(CFLAGS) -c $< -o $@ -$(SUID_PROGS): setuid.o - -$(PROGS): setuid.o - -logwatch: logwatch.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ logwatch.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -openvpnctrl: openvpnctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ openvpnctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -qosctrl: qosctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ qosctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -redctrl: redctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ redctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -extrahdctrl: extrahdctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ extrahdctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -upnpctrl: upnpctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ upnpctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -sambactrl: sambactrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ sambactrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -tripwirectrl: tripwirectrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ tripwirectrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -smartctrl: smartctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ smartctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -clamavctrl: clamavctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ clamavctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -firewallctrl: firewallctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ firewallctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -timectrl: timectrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ timectrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -launch-ether-wake: launch-ether-wake.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ launch-ether-wake.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -rebuildhosts: rebuildhosts.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ rebuildhosts.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -applejuicectrl: applejuicectrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ applejuicectrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -dhcpctrl: dhcpctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ dhcpctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -sshctrl: sshctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ sshctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -squidctrl: squidctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ squidctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -snortctrl: snortctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ snortctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -wirelessctrl: wirelessctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ wirelessctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -ipsecctrl: ipsecctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ ipsecctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -getipstat: getipstat.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ getipstat.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -pakfire: pakfire.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ pakfire.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -mpfirectrl: mpfirectrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ mpfirectrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -backupctrl: backupctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ backupctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -addonctrl: addonctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ addonctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -syslogdctrl: syslogdctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ syslogdctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -wlanapctrl: wlanapctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ wlanapctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -setaliases: setaliases.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ setaliases.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -fireinfoctrl: fireinfoctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ fireinfoctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -rebuildroutes: rebuildroutes.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ rebuildroutes.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -getconntracktable: getconntracktable.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ getconntracktable.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -wirelessclient: wirelessclient.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ wirelessclient.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -dnsmasqctrl: dnsmasqctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ dnsmasqctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ - -torctrl: torctrl.c setuid.o ../install+setup/libsmooth/varval.o - $(COMPILE) -I../install+setup/libsmooth/ torctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ +$(PROGS) $(SUID_PROGS): setuid.o | $(OBJS) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $@.o $< $(LIBS) From a8d8b5576c992af39603d6f505cb6777c03c5cb9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 14:47:32 +0200 Subject: [PATCH 062/297] installer: Umount everything right away. --- src/installer/hw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 048aeaaf5..375226496 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -90,7 +90,7 @@ int hw_mount(const char* source, const char* target, const char* fs, int flags) } int hw_umount(const char* target) { - return umount2(target, MNT_DETACH); + return umount2(target, 0); } static int hw_test_source_medium(const char* path) { From d2f993a7dd37ebca4abf12a7d98694a8d0f1f494 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 14:57:23 +0200 Subject: [PATCH 063/297] installer: Wipe first bytes of partitions and disks before partitioning. --- src/installer/hw.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 375226496..854069f5c 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -505,9 +505,38 @@ unsigned long long hw_memory() { return memory * 1024; } -int hw_create_partitions(struct hw_destination* dest) { - char* cmd = NULL; +static int hw_zero_out_device(const char* path, int bytes) { + char block[512]; + memset(block, 0, sizeof(block)); + int blocks = bytes / sizeof(block); + + int fd = open(path, O_WRONLY); + if (fd < 0) + return -1; + + unsigned int bytes_written = 0; + while (blocks-- > 0) { + bytes_written += write(fd, block, sizeof(block)); + } + + fsync(fd); + close(fd); + + return bytes_written; +} + +int hw_create_partitions(struct hw_destination* dest) { + // Before we write a new partition table to the disk, we will erase + // the first couple of megabytes at the beginning of the device to + // get rid of all left other things like bootloaders and partition tables. + // This solves some problems when changing from MBR to GPT partitions or + // the other way around. + int r = hw_zero_out_device(dest->path, MB2BYTES(10)); + if (r <= 0) + return r; + + char* cmd = NULL; asprintf(&cmd, "/usr/sbin/parted -s %s -a optimal", dest->path); // Set partition type @@ -798,10 +827,20 @@ int hw_setup_raid(struct hw_destination* dest) { if (dest->disk1) { asprintf(&cmd, "%s %s", cmd, dest->disk1->path); + + // Clear all data at the beginning + r = hw_zero_out_device(dest->disk1->path, MB2BYTES(10)); + if (r <= 0) + return r; } if (dest->disk2) { asprintf(&cmd, "%s %s", cmd, dest->disk2->path); + + // Clear all data at the beginning + r = hw_zero_out_device(dest->disk2->path, MB2BYTES(10)); + if (r <= 0) + return r; } int r = mysystem(cmd); From 39a36d7d734c32368830ee4b8e27987e7dc64809 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 14:58:13 +0200 Subject: [PATCH 064/297] installer: Drop user to an emergency shell if the installer crashes. --- src/installer/dracut-module/run-installer.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/installer/dracut-module/run-installer.sh b/src/installer/dracut-module/run-installer.sh index 53f7cd331..d0611ce37 100644 --- a/src/installer/dracut-module/run-installer.sh +++ b/src/installer/dracut-module/run-installer.sh @@ -13,8 +13,17 @@ echo "Starting shells on tty2 and tty3 ..." echo "Loading Installer..." /bin/bash --login -c "/usr/bin/installer /dev/tty2" +ret=$? -sleep 60 +case "${ret}" in + 0) + # The installer has finished without a problem. + ;; + *) + echo "The installer has crashed. You will be dropped to a debugging shell" + /bin/bash --login + ;; +esac # Reboot the system /shutdown reboot From 37f3421a58f167d086acd5df11b28328a95ee1f9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 15:09:47 +0200 Subject: [PATCH 065/297] installer: Rewrite language selection. --- src/installer/Makefile.am | 6 +- src/installer/configure.ac | 4 + src/installer/dracut-module/module-setup.sh | 3 + src/installer/main.c | 53 +++-- src/installer/po/LINGUAS | 1 + src/installer/po/Makevars | 41 ++++ src/installer/po/POTFILES.in | 1 + src/installer/po/de.po | 229 ++++++++++++++++++++ 8 files changed, 318 insertions(+), 20 deletions(-) create mode 100644 src/installer/po/LINGUAS create mode 100644 src/installer/po/Makevars create mode 100644 src/installer/po/POTFILES.in create mode 100644 src/installer/po/de.po diff --git a/src/installer/Makefile.am b/src/installer/Makefile.am index 14436f0a4..259db0610 100644 --- a/src/installer/Makefile.am +++ b/src/installer/Makefile.am @@ -1,6 +1,6 @@ -# This file is part of the libsmooth library. +# This file is part of the installer. # -# libsmooth is free software; you can redistribute it and/or modify it +# installer is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. @@ -9,7 +9,7 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} AM_MAKEFLAGS = --no-print-directory AUTOMAKE_OPTIONS = color-tests parallel-tests -SUBDIRS = . +SUBDIRS = . po # remove targets if the command fails .DELETE_ON_ERROR: diff --git a/src/installer/configure.ac b/src/installer/configure.ac index 9a3c45529..da968f637 100644 --- a/src/installer/configure.ac +++ b/src/installer/configure.ac @@ -41,6 +41,9 @@ AC_PROG_CC_C_O AC_PATH_PROG([M4], [m4]) +# Gettext +AM_GNU_GETTEXT([external]) +AM_GNU_GETTEXT_VERSION([0.18]) AC_CHECK_HEADERS([libintl.h]) # This makes sure pkg.m4 is available. @@ -83,6 +86,7 @@ AC_ARG_WITH([config-root], AC_CONFIG_FILES([ Makefile + po/Makefile.in ]) AC_OUTPUT diff --git a/src/installer/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh index 396cbdf3b..545c2cd68 100755 --- a/src/installer/dracut-module/module-setup.sh +++ b/src/installer/dracut-module/module-setup.sh @@ -56,6 +56,9 @@ install() { inst "${file}" done done + for file in /usr/share/locale/*/LC_MESSAGES/installer.mo; do + inst "${file}" + done # Bash start files inst_multiple /etc/profile /root/.bash_profile /etc/bashrc /root/.bashrc diff --git a/src/installer/main.c b/src/installer/main.c index 2a5122e1a..e3ed7957e 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -29,8 +29,6 @@ FILE *flog = NULL; char *mylog; -char **ctr; - extern char url[STRING_SIZE]; static int newtChecklist(const char* title, const char* message, @@ -207,6 +205,24 @@ static char* center_string(const char* str, int width) { return string; } +#define DEFAULT_LANG "English" +#define NUM_LANGS 8 + +static struct lang { + const char* code; + char* name; +} languages[NUM_LANGS + 1] = { + { "nl", "Dutch (Nederlands)" }, + { "en", "English" }, + { "fr", "French (Français)" }, + { "de", "German (Deutsch)" }, + { "pl", "Polish (Polski)" }, + { "ru", "Russian (Русский)" }, + { "es", "Spanish (Español)" }, + { "tr", "Turkish (Türkçe)" }, + { NULL, NULL }, +}; + int main(int argc, char *argv[]) { struct hw* hw = hw_init(); @@ -215,8 +231,6 @@ int main(int argc, char *argv[]) { char discl_msg[40000] = "Disclaimer\n"; - char *langnames[] = { "Deutsch", "English", "Français", "Español", "Nederlands", "Polski", "Русский", "Türkçe", NULL }; - char *shortlangnames[] = { "de", "en", "fr", "es", "nl", "pl", "ru", "tr", NULL }; char* sourcedrive = NULL; int rc = 0; char commandstring[STRING_SIZE]; @@ -285,21 +299,26 @@ int main(int argc, char *argv[]) { mysystem("/sbin/modprobe vfat"); // USB key hw_stop_all_raid_arrays(); - /* German is the default */ - for (choice = 0; langnames[choice]; choice++) - { - if (strcmp(langnames[choice], "English") == 0) - break; - } - if (!langnames[choice]) - goto EXIT; - if (!unattended) { - rc = newtWinMenu("Language selection", "Select the language you wish to use for the " NAME ".", 50, 5, 5, 8, - langnames, &choice, "Ok", NULL); - } + // Language selection + char* langnames[NUM_LANGS + 1]; - setlocale(LC_ALL, shortlangnames[choice]); + for (unsigned int i = 0; i < NUM_LANGS; i++) { + if (strcmp(languages[i].name, DEFAULT_LANG) == 0) + choice = i; + + langnames[i] = languages[i].name; + } + langnames[NUM_LANGS] = NULL; + + rc = newtWinMenu(_("Language selection"), _("Select the language you wish to use for the installation."), + 50, 5, 5, 8, langnames, &choice, _("OK"), NULL); + + assert(choice <= NUM_LANGS); + + fprintf(flog, "Selected language: %s (%s)\n", languages[choice].name, languages[choice].code); + setlocale(LC_ALL, languages[choice].code); + } char* helpline = center_string(_("/ between elements | selects | next screen"), screen_cols); newtPushHelpLine(helpline); diff --git a/src/installer/po/LINGUAS b/src/installer/po/LINGUAS new file mode 100644 index 000000000..7673daa94 --- /dev/null +++ b/src/installer/po/LINGUAS @@ -0,0 +1 @@ +de diff --git a/src/installer/po/Makevars b/src/installer/po/Makevars new file mode 100644 index 000000000..cf8c600c0 --- /dev/null +++ b/src/installer/po/Makevars @@ -0,0 +1,41 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = The IPFire Project (www.ipfire.org) + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = diff --git a/src/installer/po/POTFILES.in b/src/installer/po/POTFILES.in new file mode 100644 index 000000000..e241137f9 --- /dev/null +++ b/src/installer/po/POTFILES.in @@ -0,0 +1 @@ +main.c diff --git a/src/installer/po/de.po b/src/installer/po/de.po new file mode 100644 index 000000000..51ec1e1e9 --- /dev/null +++ b/src/installer/po/de.po @@ -0,0 +1,229 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Michael Tremer , 2014 +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-07-31 09:28+0000\n" +"PO-Revision-Date: 2014-07-31 09:44+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: German (http://www.transifex.com/projects/p/ipfire/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:82 main.c:153 main.c:320 main.c:474 main.c:505 main.c:643 +msgid "OK" +msgstr "OK" + +#: main.c:83 main.c:427 main.c:437 main.c:474 main.c:505 +msgid "Cancel" +msgstr "Abbrechen" + +#: main.c:150 +msgid "I accept this license" +msgstr "Ich akzeptiere die Lizenz" + +#: main.c:304 +msgid "/ between elements | selects | next screen" +msgstr "/ um zu wechseln | wählt aus | nächster Bildschirm" + +#: main.c:309 +#, c-format +msgid "" +"Welcome to the %s installation program. Selecting Cancel on any of the " +"following screens will reboot the computer." +msgstr "" + +#: main.c:311 +msgid "Start installation" +msgstr "Installation beginnen" + +#: main.c:320 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:321 +msgid "Downloading installation image ..." +msgstr "Lade Installationsimage herunter..." + +#: main.c:323 +msgid "Download error" +msgstr "Fehler beim Download" + +#: main.c:358 +msgid "License not accepted!" +msgstr "Lizenz nicht akzeptiert!" + +#: main.c:380 +msgid "No hard disk found." +msgstr "Es wurde keine Festplatte gefunden." + +#: main.c:399 +msgid "Disk Selection" +msgstr "Festplattenauswahl" + +#: main.c:400 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:411 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:424 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:426 +msgid "Disk Setup" +msgstr "Disk-Setup" + +#: main.c:427 main.c:437 +msgid "Delete all data" +msgstr "Alle Daten löschen" + +#: main.c:434 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:436 +msgid "RAID Setup" +msgstr "RAID-Setup" + +#: main.c:447 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:461 +msgid "Your harddisk is too small." +msgstr "Ihre Festplatte ist zu klein." + +#: main.c:475 +msgid "" +"Your harddisk is very small, but you can continue with an very small swap. " +"(Use with caution)." +msgstr "" + +#: main.c:487 +msgid "ext4 Filesystem" +msgstr "ext4-Dateisystem" + +#: main.c:488 +msgid "ext4 Filesystem without journal" +msgstr "ext4-Dateisystem ohne Journal" + +#: main.c:489 +msgid "XFS Filesystem" +msgstr "XFS-Dateisystem" + +#: main.c:490 +msgid "ReiserFS Filesystem" +msgstr "ReiserFS-Dateisystem" + +#: main.c:504 +msgid "Filesystem Selection" +msgstr "Dateisystemauswahl" + +#: main.c:504 +msgid "Please choose your filesystem:" +msgstr "Bitte wählen Sie ein Dateisystem:" + +#: main.c:515 +msgid "Building RAID..." +msgstr "Erstelle RAID..." + +#: main.c:519 +msgid "Unable to build the RAID." +msgstr "Das RAID konnte nicht erstellt werden." + +#: main.c:527 +msgid "Partitioning disk..." +msgstr "Partitioniere die Festplatte..." + +#: main.c:531 +msgid "Unable to partition the disk." +msgstr "Die Festplatte konnte nicht partitioniert werden." + +#: main.c:538 +msgid "Creating filesystems..." +msgstr "Erstelle Dateisysteme..." + +#: main.c:542 +msgid "Unable to create filesystems." +msgstr "Die Dateisysteme konnten nicht erstellt werden." + +#: main.c:548 +msgid "Unable to mount filesystems." +msgstr "Die Dateisysteme konnten nicht eingehangen werden." + +#: main.c:559 +msgid "Installing the system..." +msgstr "Installiere das System..." + +#: main.c:560 +msgid "Unable to install the system." +msgstr "Das System konnte nicht installiert werden." + +#: main.c:576 +msgid "Installing the language cache..." +msgstr "Installiere den Sprachdateicache..." + +#: main.c:577 +msgid "Unable to install the language cache." +msgstr "Der Sprachdateicache konnte nicht erstellt werden." + +#: main.c:582 +msgid "Installing the bootloader..." +msgstr "Installiere den Bootloader..." + +#: main.c:586 +msgid "Unable to install the bootloader." +msgstr "Der Bootloader konnte nicht installiert werden." + +#: main.c:628 +#, c-format +msgid "" +"%s was successfully installed. Please remove any installation mediums from " +"this system. Setup will now run where you may configure networking and the " +"system passwords. After Setup has been completed, you should point your web " +"browser at https://%s:444 (or whatever you name your %s), and configure " +"dialup networking (if required) and remote access." +msgstr "" + +#: main.c:634 +msgid "Congratulations!" +msgstr "Herzlichen Glückwunsch!" + +#: main.c:634 +msgid "Reboot" +msgstr "Neustarten" + +#: main.c:643 +msgid "Press Ok to reboot." +msgstr "Drücken Sie OK um neuzustarten." From bee06cd410813a928ae0c6019f2dce65f4744316 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 15:12:25 +0200 Subject: [PATCH 066/297] installer: Change separator in disk description to dash. --- src/installer/hw.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 854069f5c..2caf2afde 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -252,15 +252,15 @@ struct hw_disk** hw_find_disks(struct hw* hw) { if (*disk->vendor && *disk->model) { snprintf(disk->description, sizeof(disk->description), - "%s | %s - %s", size_str, disk->vendor, disk->model); + "%s - %s - %s", size_str, disk->vendor, disk->model); } else if (*disk->vendor || *disk->model) { snprintf(disk->description, sizeof(disk->description), - "%s | %s", size_str, (*disk->vendor) ? disk->vendor : disk->model); + "%s - %s", size_str, (*disk->vendor) ? disk->vendor : disk->model); } else { snprintf(disk->description, sizeof(disk->description), - "%s | N/A", size_str); + "%s - N/A", size_str); } *disks++ = disk; From 7b4790d3fc1620a1e7e0167227d0cca9e214ddc1 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 15:14:45 +0200 Subject: [PATCH 067/297] installer: Downgrade RAID metadata format to 1.0. --- src/installer/hw.c | 6 ++++-- src/installer/hw.h | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 2caf2afde..52d051181 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -811,10 +811,12 @@ int hw_umount_filesystems(struct hw_destination* dest, const char* prefix) { int hw_setup_raid(struct hw_destination* dest) { char* cmd = NULL; + int r; assert(dest->is_raid); - asprintf(&cmd, "echo \"y\" | /sbin/mdadm --create --verbose --metadata=1.2 %s", dest->path); + asprintf(&cmd, "echo \"y\" | /sbin/mdadm --create --verbose --metadata=%s --auto=mdp %s", + RAID_METADATA, dest->path); switch (dest->raid_level) { case 1: @@ -843,7 +845,7 @@ int hw_setup_raid(struct hw_destination* dest) { return r; } - int r = mysystem(cmd); + r = mysystem(cmd); free(cmd); // Wait a moment until the device has been properly brought up diff --git a/src/installer/hw.h b/src/installer/hw.h index ddaceb6ef..48d24bf47 100644 --- a/src/installer/hw.h +++ b/src/installer/hw.h @@ -48,6 +48,8 @@ #define HW_FS_DEFAULT HW_FS_EXT4 +#define RAID_METADATA "1.0" + #define BYTES2MB(x) ((x) / 1024 / 1024) #define MB2BYTES(x) ((unsigned long long)(x) * 1024 * 1024) From 282ec35e9b6c6af03fe564f0feef13420a81a8d2 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 15:15:52 +0200 Subject: [PATCH 068/297] installer: Flush all disk buffers after the installation has finished. --- src/installer/hw.c | 6 ++++++ src/installer/hw.h | 2 ++ src/installer/main.c | 2 ++ 3 files changed, 10 insertions(+) diff --git a/src/installer/hw.c b/src/installer/hw.c index 52d051181..0d5fe2fb0 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -969,3 +969,9 @@ int hw_write_fstab(struct hw_destination* dest) { return 0; } + +void hw_sync() { + sync(); + sync(); + sync(); +} diff --git a/src/installer/hw.h b/src/installer/hw.h index 48d24bf47..96fc0919b 100644 --- a/src/installer/hw.h +++ b/src/installer/hw.h @@ -124,4 +124,6 @@ int hw_stop_all_raid_arrays(); int hw_install_bootloader(struct hw_destination* dest); int hw_write_fstab(struct hw_destination* dest); +void hw_sync(); + #endif /* HEADER_HW_H */ diff --git a/src/installer/main.c b/src/installer/main.c index e3ed7957e..ad4e0c54b 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -676,6 +676,8 @@ EXIT: free(sourcedrive); if (destination) { + hw_sync(); + hw_umount_filesystems(destination, DESTINATION_MOUNT_PATH); free(destination); } From eb3ff46eaa94c123f7874e2b9e97f5796db9f904 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 15:16:37 +0200 Subject: [PATCH 069/297] installer: Fix filesystem selection. When the user selected the OK button, the installation aborted instead of continuing. --- src/installer/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installer/main.c b/src/installer/main.c index ad4e0c54b..77c1d67d7 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -523,7 +523,7 @@ int main(int argc, char *argv[]) { rc = newtWinMenu(_("Filesystem Selection"), _("Please choose your filesystem:"), 50, 5, 5, 6, fs_names, &fs_choice, _("OK"), _("Cancel"), NULL); - if (rc != 1) + if (rc == 2) goto EXIT; destination->filesystem = filesystems[fs_choice].fstype; From e9cf574d50b5cce21ee9e03f0ba24dbfeed031a7 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 12 Aug 2014 15:17:29 +0200 Subject: [PATCH 070/297] installer: Mark the GRUB boot partition as bootable on GPT. --- src/installer/hw.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 0d5fe2fb0..0025e7d75 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -587,17 +587,17 @@ int hw_create_partitions(struct hw_destination* dest) { part_start += dest->size_data; } - if (dest->part_table == HW_PART_TABLE_MSDOS && dest->part_boot_idx > 0) { + if (dest->part_boot_idx > 0) asprintf(&cmd, "%s set %d boot on", cmd, dest->part_boot_idx); - } else if (dest->part_table == HW_PART_TABLE_GPT) { + if (dest->part_table == HW_PART_TABLE_GPT) { if (*dest->part_bootldr) { asprintf(&cmd, "%s set %d bios_grub on", cmd, dest->part_boot_idx); } asprintf(&cmd, "%s disk_set pmbr_boot on", cmd); } - int r = mysystem(cmd); + r = mysystem(cmd); // Wait until the system re-read the partition table if (r == 0) { @@ -885,7 +885,7 @@ int hw_install_bootloader(struct hw_destination* dest) { char cmd_grub[STRING_SIZE]; snprintf(cmd_grub, sizeof(cmd_grub), "/usr/sbin/grub-install --no-floppy --recheck"); - if (dest->is_raid && (dest->part_table == HW_PART_TABLE_MSDOS)) { + if (dest->is_raid) { snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->disk1->path); r = system_chroot(DESTINATION_MOUNT_PATH, cmd); if (r) From d2fafe03168085ba6782d8d6c45b4a51d940169f Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 13 Aug 2014 12:04:08 +0200 Subject: [PATCH 071/297] installer: Try harder to stop pre-existing software raids. --- src/installer/hw.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 0025e7d75..9e8e13eb2 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -809,12 +809,36 @@ int hw_umount_filesystems(struct hw_destination* dest, const char* prefix) { return 0; } +static int hw_destroy_raid_superblocks(const struct hw_destination* dest) { + char cmd[STRING_SIZE]; + + hw_stop_all_raid_arrays(); + hw_stop_all_raid_arrays(); + + if (dest->disk1) { + snprintf(cmd, sizeof(cmd), "/sbin/mdadm --zero-superblock %s", dest->disk1); + mysystem(cmd); + } + + if (dest->disk2) { + snprintf(cmd, sizeof(cmd), "/sbin/mdadm --zero-superblock %s", dest->disk2); + mysystem(cmd); + } + + return 0; +} + int hw_setup_raid(struct hw_destination* dest) { char* cmd = NULL; int r; assert(dest->is_raid); + // Stop all RAID arrays that might be around (again). + // It seems that there is some sort of race-condition with udev re-enabling + // the raid arrays and therefore locking the disks. + r = hw_destroy_raid_superblocks(dest); + asprintf(&cmd, "echo \"y\" | /sbin/mdadm --create --verbose --metadata=%s --auto=mdp %s", RAID_METADATA, dest->path); @@ -869,7 +893,7 @@ int hw_setup_raid(struct hw_destination* dest) { } int hw_stop_all_raid_arrays() { - return mysystem("/sbin/mdadm --stop --scan"); + return mysystem("/sbin/mdadm --stop --scan --verbose"); } int hw_install_bootloader(struct hw_destination* dest) { From 6db1d94c209a9632f79de35fed3b7eee35bd393e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 12:52:11 +0200 Subject: [PATCH 072/297] setup: Fix path to probenic.sh script --- src/setup/netstuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/setup/netstuff.c b/src/setup/netstuff.c index 3ab5835a8..08d144eac 100644 --- a/src/setup/netstuff.c +++ b/src/setup/netstuff.c @@ -594,7 +594,7 @@ int scan_network_cards(void) if (!(scanned_nics_read_done)) { - mysystem("/bin/probenic.sh"); + mysystem("/usr/bin/probenic.sh"); if( (fp = fopen(SCANNED_NICS, "r")) == NULL ) { fprintf(stderr,"Couldn't open "SCANNED_NICS); From 8deed24e4ebedf99c2a33d8d295535c9216a2029 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 12:54:10 +0200 Subject: [PATCH 073/297] slang: Update to 2.2.4 --- config/rootfiles/common/slang | 156 +++- lfs/slang | 22 +- src/patches/slang-1.4.5-utf8-segv.patch | 15 - src/patches/slang-debian-utf8.patch | 917 ------------------------ src/patches/slang-utf8-acs.patch | 417 ----------- src/patches/slang-utf8-fix.patch | 34 - 6 files changed, 145 insertions(+), 1416 deletions(-) delete mode 100644 src/patches/slang-1.4.5-utf8-segv.patch delete mode 100644 src/patches/slang-debian-utf8.patch delete mode 100644 src/patches/slang-utf8-acs.patch delete mode 100644 src/patches/slang-utf8-fix.patch diff --git a/config/rootfiles/common/slang b/config/rootfiles/common/slang index c6afc2c79..0ebef78c7 100644 --- a/config/rootfiles/common/slang +++ b/config/rootfiles/common/slang @@ -1,20 +1,140 @@ -#usr/doc -#usr/doc/slang -#usr/doc/slang/COPYING -#usr/doc/slang/COPYING.ART -#usr/doc/slang/COPYING.GPL -#usr/doc/slang/COPYRIGHT -#usr/doc/slang/changes.txt -#usr/doc/slang/cref.txt -#usr/doc/slang/cslang.txt -#usr/doc/slang/slang.txt -#usr/doc/slang/slangdoc.html -#usr/doc/slang/slangfun.txt +#etc/slsh.rc +#usr/bin/slsh #usr/include/slang.h #usr/include/slcurses.h -#usr/lib/libslang-utf8.a -usr/lib/libslang-utf8.so -usr/lib/libslang-utf8.so.1 -usr/lib/libslang-utf8.so.1.4.9 -#usr/lib/libslang.a -usr/lib/libslang.so +#usr/lib/libslang.so +usr/lib/libslang.so.2 +usr/lib/libslang.so.2.2.4 +#usr/lib/pkgconfig/slang.pc +#usr/lib/slang +#usr/lib/slang/v2 +#usr/lib/slang/v2/modules +usr/lib/slang/v2/modules/csv-module.so +usr/lib/slang/v2/modules/fcntl-module.so +usr/lib/slang/v2/modules/fork-module.so +usr/lib/slang/v2/modules/iconv-module.so +usr/lib/slang/v2/modules/pcre-module.so +usr/lib/slang/v2/modules/png-module.so +usr/lib/slang/v2/modules/rand-module.so +usr/lib/slang/v2/modules/select-module.so +usr/lib/slang/v2/modules/slsmg-module.so +usr/lib/slang/v2/modules/socket-module.so +usr/lib/slang/v2/modules/sysconf-module.so +usr/lib/slang/v2/modules/termios-module.so +usr/lib/slang/v2/modules/varray-module.so +usr/lib/slang/v2/modules/zlib-module.so +#usr/share/doc/slang +#usr/share/doc/slang/v2 +#usr/share/doc/slang/v2/COPYING +#usr/share/doc/slang/v2/changes.txt +#usr/share/doc/slang/v2/cref.txt +#usr/share/doc/slang/v2/cslang.txt +#usr/share/doc/slang/v2/slang.txt +#usr/share/doc/slang/v2/slangdoc.html +#usr/share/doc/slang/v2/slangfun.txt +#usr/share/doc/slsh +#usr/share/doc/slsh/html +#usr/share/doc/slsh/html/slshfun-1.html +#usr/share/doc/slsh/html/slshfun-2.html +#usr/share/doc/slsh/html/slshfun-3.html +#usr/share/doc/slsh/html/slshfun-4.html +#usr/share/doc/slsh/html/slshfun-5.html +#usr/share/doc/slsh/html/slshfun-6.html +#usr/share/doc/slsh/html/slshfun-7.html +#usr/share/doc/slsh/html/slshfun-8.html +#usr/share/doc/slsh/html/slshfun-9.html +#usr/share/doc/slsh/html/slshfun.html +#usr/share/man/man1/slsh.1 +#usr/share/slsh +#usr/share/slsh/arrayfuns.sl +#usr/share/slsh/autoload.sl +#usr/share/slsh/cmaps +#usr/share/slsh/cmaps/cool.map +#usr/share/slsh/cmaps/coolwarm.map +#usr/share/slsh/cmaps/copper.map +#usr/share/slsh/cmaps/drywet.map +#usr/share/slsh/cmaps/ds9b.map +#usr/share/slsh/cmaps/ds9sls.map +#usr/share/slsh/cmaps/gebco.map +#usr/share/slsh/cmaps/globe.map +#usr/share/slsh/cmaps/gray.map +#usr/share/slsh/cmaps/haxby.map +#usr/share/slsh/cmaps/hot.map +#usr/share/slsh/cmaps/jet.map +#usr/share/slsh/cmaps/no_green.map +#usr/share/slsh/cmaps/ocean.map +#usr/share/slsh/cmaps/polar.map +#usr/share/slsh/cmaps/rainbow.map +#usr/share/slsh/cmaps/red2green.map +#usr/share/slsh/cmaps/relief.map +#usr/share/slsh/cmaps/sealand.map +#usr/share/slsh/cmaps/seis.map +#usr/share/slsh/cmaps/split.map +#usr/share/slsh/cmaps/topo.map +#usr/share/slsh/cmaps/wysiwyg.map +#usr/share/slsh/cmdopt.sl +#usr/share/slsh/csv.sl +#usr/share/slsh/fcntl.sl +#usr/share/slsh/fork.sl +#usr/share/slsh/glob.sl +#usr/share/slsh/help +#usr/share/slsh/help/arrayfuns.hlp +#usr/share/slsh/help/cmdopt.hlp +#usr/share/slsh/help/csvfuns.hlp +#usr/share/slsh/help/forkfuns.hlp +#usr/share/slsh/help/glob.hlp +#usr/share/slsh/help/onigfuns.hlp +#usr/share/slsh/help/pcrefuns.hlp +#usr/share/slsh/help/pngfuns.hlp +#usr/share/slsh/help/print.hlp +#usr/share/slsh/help/process.hlp +#usr/share/slsh/help/profile.hlp +#usr/share/slsh/help/randfuns.hlp +#usr/share/slsh/help/readascii.hlp +#usr/share/slsh/help/require.hlp +#usr/share/slsh/help/setfuns.hlp +#usr/share/slsh/help/slsmg.hlp +#usr/share/slsh/help/sockfuns.hlp +#usr/share/slsh/help/structfuns.hlp +#usr/share/slsh/iconv.sl +#usr/share/slsh/local-packages +#usr/share/slsh/onig.sl +#usr/share/slsh/pcre.sl +#usr/share/slsh/png.sl +#usr/share/slsh/print.sl +#usr/share/slsh/process.sl +#usr/share/slsh/profile.sl +#usr/share/slsh/rand.sl +#usr/share/slsh/readascii.sl +#usr/share/slsh/require.sl +#usr/share/slsh/rline +#usr/share/slsh/rline/complete.sl +#usr/share/slsh/rline/editfuns.sl +#usr/share/slsh/rline/editor.sl +#usr/share/slsh/rline/emacskeys.sl +#usr/share/slsh/rline/history.sl +#usr/share/slsh/rline/histsrch.sl +#usr/share/slsh/rline/slrline.rc +#usr/share/slsh/rline/vikeys.sl +#usr/share/slsh/scripts +#usr/share/slsh/scripts/jpegsize +#usr/share/slsh/scripts/lsrpm +#usr/share/slsh/scripts/sldb +#usr/share/slsh/scripts/slprof +#usr/share/slsh/scripts/slstkchk +#usr/share/slsh/scripts/svnsh +#usr/share/slsh/select.sl +#usr/share/slsh/setfuns.sl +#usr/share/slsh/sldb.sl +#usr/share/slsh/sldbcore.sl +#usr/share/slsh/sldbsock.sl +#usr/share/slsh/slshhelp.sl +#usr/share/slsh/slshrl.sl +#usr/share/slsh/slsmg.sl +#usr/share/slsh/socket.sl +#usr/share/slsh/stkcheck.sl +#usr/share/slsh/structfuns.sl +#usr/share/slsh/sysconf.sl +#usr/share/slsh/termios.sl +#usr/share/slsh/varray.sl +#usr/share/slsh/zlib.sl diff --git a/lfs/slang b/lfs/slang index e6c8cc88d..55590f7cb 100644 --- a/lfs/slang +++ b/lfs/slang @@ -24,10 +24,10 @@ include Config -VER = 1.4.9 +VER = 2.2.4 THISAPP = slang-$(VER) -DL_FILE = $(THISAPP).tar.bz2 +DL_FILE = $(THISAPP).tar.gz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 4fbb1a7f1257e065ca830deefe13d350 +$(DL_FILE)_MD5 = 86cd8689cd71e281b4720fef8453ceeb install : $(TARGET) @@ -69,17 +69,9 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-debian-utf8.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-utf8-acs.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-1.4.5-utf8-segv.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-utf8-fix.patch - perl -p -i -e 's/(ELF_CFLAGS=\"[^\"]*)-O2([^\"]*\".*)/$1'"$(CFLAGS)"' $2/gs' configure - cd $(DIR_APP) && ./configure --prefix=/usr - cd $(DIR_APP) && make elf all - cd $(DIR_APP) && make install-elf - ln -sf libslang-utf8.so.1.4.9 /usr/lib/libslang-utf8.so.1 - ln -sf libslang-utf8.so /usr/lib/libslang.so - ln -sf libslang-utf8.a /usr/lib/libslang.a + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && ./configure --prefix=/usr --sysconfdir=/etc + cd $(DIR_APP) && make #$(MAKETUNING) + cd $(DIR_APP) && make install @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/patches/slang-1.4.5-utf8-segv.patch b/src/patches/slang-1.4.5-utf8-segv.patch deleted file mode 100644 index f8df90a4e..000000000 --- a/src/patches/slang-1.4.5-utf8-segv.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -ru slang-1.4.5/src/slsmg.c slang-1.4.5-new/src/slsmg.c ---- slang-1.4.5/src/slsmg.c 2002-07-25 00:09:00.000000000 -0400 -+++ slang-1.4.5-new/src/slsmg.c 2002-07-25 00:04:02.000000000 -0400 -@@ -369,7 +369,10 @@ - - max_len = Start_Col + Screen_Cols; - len = This_Col; -- p = SL_Screen[This_Row - Start_Row].neew + len - Start_Col; -+ -+ -+ p = SL_Screen[This_Row - Start_Row].neew; -+ if (len > Start_Col) p += len - Start_Col; - prev = 0; - - for (i = 0; i < n; i++, str) { diff --git a/src/patches/slang-debian-utf8.patch b/src/patches/slang-debian-utf8.patch deleted file mode 100644 index 62eb67056..000000000 --- a/src/patches/slang-debian-utf8.patch +++ /dev/null @@ -1,917 +0,0 @@ ---- slang-1.4.4.orig/src/slinclud.h -+++ slang-1.4.4/src/slinclud.h -@@ -23,4 +23,12 @@ - # include - #endif - -+#define UTF8 1 -+ -+#ifdef UTF8 -+#include -+#include -+#endif /* UTF8 */ -+ -+ - #endif /* _SLANG_INCLUDE_H_ */ ---- slang-1.4.4.orig/src/slang.h -+++ slang-1.4.4/src/slang.h -@@ -1239,10 +1239,20 @@ - extern int SLtt_Msdos_Cheap_Video; - #endif - -+#define UTF8 1 -+ -+#ifdef UTF8 -+typedef int SLsmg_Char_Type; -+#define SLSMG_EXTRACT_CHAR(x) ((x) & 0xFFFFFF) -+#define SLSMG_EXTRACT_COLOR(x) (((x)>>24)&0xFF) -+#define SLSMG_BUILD_CHAR(ch,color) (((SLsmg_Char_Type)(wchar_t)(ch))|((color)<<24)) -+#define SLSMG_NOCHAR 1 -+#else - typedef unsigned short SLsmg_Char_Type; - #define SLSMG_EXTRACT_CHAR(x) ((x) & 0xFF) - #define SLSMG_EXTRACT_COLOR(x) (((x)>>8)&0xFF) - #define SLSMG_BUILD_CHAR(ch,color) (((SLsmg_Char_Type)(unsigned char)(ch))|((color)<<8)) -+#endif /* UTF8 */ - - extern int SLtt_flush_output (void); - extern void SLtt_set_scroll_region(int, int); -@@ -1334,7 +1342,11 @@ - - /*{{{ SLsmg Screen Management Functions */ - -+#ifdef UTF8 -+extern void SLsmg_fill_region (int, int, unsigned int, unsigned int, wchar_t); -+#else - extern void SLsmg_fill_region (int, int, unsigned int, unsigned int, unsigned char); -+#endif /* UTF8 */ - extern void SLsmg_set_char_set (int); - #ifndef IBMPC_SYSTEM - extern int SLsmg_Scroll_Hash_Border; -@@ -1351,7 +1363,12 @@ - extern void SLsmg_vprintf (char *, va_list); - extern void SLsmg_write_string (char *); - extern void SLsmg_write_nstring (char *, unsigned int); -+#ifdef UTF8 -+extern void SLsmg_write_char (wchar_t); -+extern void SLsmg_write_nwchars (wchar_t *, unsigned int); -+#else - extern void SLsmg_write_char (char); -+#endif /* UTF8 */ - extern void SLsmg_write_nchars (char *, unsigned int); - extern void SLsmg_write_wrapped_string (char *, int, int, unsigned int, unsigned int, int); - extern void SLsmg_cls (void); ---- slang-1.4.4.orig/src/slcurses.c -+++ slang-1.4.4/src/slcurses.c -@@ -440,20 +440,130 @@ - - static int do_newline (SLcurses_Window_Type *w) - { -- w->_curx = 0; -+ /* w->_curx = 0; */ - w->_cury += 1; - if (w->_cury >= w->scroll_max) - { - w->_cury = w->scroll_max - 1; -- if (w->scroll_ok) -+ if (w->scroll_ok) { -+ w->_curx = 0; - SLcurses_wscrl (w, 1); -+ } - } -+ else -+ w->_curx = 0; -+ -+ return 0; -+} -+ -+#ifdef UTF8 -+static int SLcurses_waddch1 (SLcurses_Window_Type *win, -+ wchar_t ch, int color) -+{ -+ SLsmg_Char_Type *b, *bmin, *bmax, *c; -+ int k; -+ -+ if (win == NULL) return -1; -+ -+ if (win->_cury >= win->nrows) -+ { -+ /* Curses seems to move current postion to top of window. */ -+ win->_cury = win->_curx = 0; -+ return -1; -+ } -+ -+ win->modified = 1; -+ -+ if (ch < ' ') -+ { -+ if (ch == '\n') -+ { -+ SLcurses_wclrtoeol (win); -+ return do_newline (win); -+ } -+ -+ if (ch == '\r') -+ { -+ win->_curx = 0; -+ return 0; -+ } -+ -+ if (ch == '\b') -+ { -+ if (win->_curx > 0) -+ win->_curx--; -+ -+ return 0; -+ } -+ -+ /* HACK HACK!!!! */ -+ if (ch == '\t') ch = ' '; -+ } -+ -+ k = wcwidth(ch); -+ -+ if (!k) -+ return 0; /* ignore combining characters for now */ -+ -+ if (k > win->ncols) -+ return 0; /* character wider than window */ -+ -+ if (win->_curx + k > win->ncols) { -+ if (win->_curx < win->ncols) -+ SLcurses_wclrtoeol(win); -+ do_newline (win); -+ } -+ -+ bmin = win->lines[win->_cury]; -+ b = bmin + win->_curx; -+ bmax = bmin + win->ncols; -+ -+ /* Remove overwritten chars to left */ -+ if (*b == SLSMG_NOCHAR) { -+ for (c = b - 1; c >= bmin && *c == SLSMG_NOCHAR; c--) -+ *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c)); -+ if (c >= bmin) -+ *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c)); -+ } -+ -+ *b = SLSMG_BUILD_CHAR(ch,color); -+ win->_curx += k; -+ while (--k > 0) -+ *++b = SLSMG_NOCHAR; -+ -+ /* Remove overwritten chars to right */ -+ for (c = b + 1; c < bmax && *c == SLSMG_NOCHAR; c++) -+ *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c)); - - return 0; - } - - int SLcurses_waddch (SLcurses_Window_Type *win, SLtt_Char_Type attr) - { -+ SLsmg_Char_Type ch, color; -+ -+ if (win == NULL) return -1; -+ -+ ch = SLSMG_EXTRACT_CHAR(attr); -+ -+ if (attr == ch) -+ color = win->color; -+ else -+ { -+ /* hack to pick up the default color for graphics chars */ -+ if (((attr & A_COLOR) == 0) && ((attr & A_ALTCHARSET) != 0)) -+ { -+ /* FIXME: priority=medium: Use SLSMG_?? instead of << */ -+ attr |= win->color << 8; -+ } -+ color = map_attr_to_object (attr); -+ } -+ -+ return SLcurses_waddch1 (win, ch, color); -+} -+#else -+int SLcurses_waddch (SLcurses_Window_Type *win, SLtt_Char_Type attr) -+{ - SLsmg_Char_Type *b, ch; - SLsmg_Char_Type color; - -@@ -518,6 +628,7 @@ - - return 0; - } -+#endif /* UTF8 */ - - int SLcurses_wnoutrefresh (SLcurses_Window_Type *w) - { -@@ -577,7 +688,11 @@ - - int SLcurses_wclrtoeol (SLcurses_Window_Type *w) - { -+#ifdef UTF8 -+ SLsmg_Char_Type *b, *bmin, *bmax, *c; -+#else - SLsmg_Char_Type *b, *bmax; -+#endif /* UTF8 */ - SLsmg_Char_Type blank; - - if (w == NULL) return -1; -@@ -588,9 +703,23 @@ - - blank = SLSMG_BUILD_CHAR(' ',w->color); - -+#ifdef UTF8 -+ bmin = w->lines[w->_cury]; -+ b = bmin + w->_curx; -+ bmax = bmin + w->ncols; -+ -+ /* Remove overwritten chars to left */ -+ if (b < bmax && *b == SLSMG_NOCHAR) { -+ for (c = b - 1; c >= bmin && *c == SLSMG_NOCHAR; c--) -+ *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c)); -+ if (c >= bmin) -+ *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c)); -+ } -+#else - b = w->lines[w->_cury]; - bmax = b + w->ncols; - b += w->_curx; -+#endif /* UTF8 */ - - while (b < bmax) *b++ = blank; - return 0; -@@ -677,6 +806,34 @@ - return 0; - } - -+#ifdef UTF8 -+/* Note: if len is < 0, entire string will be used. -+ */ -+int SLcurses_waddnstr (SLcurses_Window_Type *w, char *str, int len) -+{ -+ size_t k; -+ wchar_t wc; -+ mbstate_t mbstate; -+ -+ if ((w == NULL) -+ || (str == NULL)) -+ return -1; -+ -+ if (len < 0) -+ len = (char *)(-1) - str; -+ -+ memset (&mbstate, 0, sizeof (mbstate)); -+ while ((k = mbrtowc (&wc, str, len, &mbstate)) && -+ k != (size_t)(-1) && -+ k != (size_t)(-2)) -+ { -+ SLcurses_waddch1 (w, wc, w->color); -+ str += k; -+ len -= k; -+ } -+ return k; -+} -+#else - /* Note: if len is < 0, entire string will be used. - */ - int SLcurses_waddnstr (SLcurses_Window_Type *w, char *str, int len) -@@ -758,6 +915,7 @@ - - return 0; - } -+#endif /* UTF8 */ - - /* This routine IS NOT CORRECT. It needs to compute the proper overlap - * and copy accordingly. Here, I just assume windows are same size. -@@ -852,12 +1010,36 @@ - - int SLcurses_wdelch (SLcurses_Window_Type *w) - { -+#ifdef UTF8 -+ SLsmg_Char_Type *p, *p1, *pmin, *pmax, *q; -+#else - SLsmg_Char_Type *p, *p1, *pmax; -+#endif /* UTF8 */ - -+#ifdef UTF8 -+ pmin = w->lines[w->_cury]; -+ p = pmin + w->_curx; -+ pmax = pmin + w->ncols; -+ -+ /* Remove overwritten chars to left */ -+ if (p < pmax && *p == SLSMG_NOCHAR) { -+ for (q = p - 1; q >= pmin && *q == SLSMG_NOCHAR; q--) -+ *q = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*q)); -+ if (q >= pmin) -+ *q = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*q)); -+ } -+ -+ /* Remove overwritten chars to right */ -+ for (q = p + 1; q < pmax && *q == SLSMG_NOCHAR; q++) -+ *q = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*q)); -+ -+ p1 = p + 1; -+#else - p = w->lines[w->_cury]; - pmax = p + w->ncols; - p += w->_curx; - p1 = p + 1; -+#endif /* UTF8 */ - - while (p1 < pmax) - { -@@ -884,12 +1066,12 @@ - - while (pmax > p) - { -- *pmax = *p1; -+ *pmax = *p1; /* Doesn't this assign beyond the end of the line? */ - pmax = p1; - p1--; - } - -- if (p < pmax) -+ if (p < pmax) /* How could it be? */ - *p = SLSMG_BUILD_CHAR(ch, w->color); - - w->modified = 1; ---- slang-1.4.4.orig/src/slsmg.c -+++ slang-1.4.4/src/slsmg.c -@@ -225,6 +225,38 @@ - SLsmg_write_nchars (str, strlen (str)); - } - -+#ifdef UTF8 -+void SLsmg_write_nstring (char *str, unsigned int n) -+{ -+ char blank = ' '; -+ mbstate_t mbstate; -+ -+ /* Avoid a problem if a user accidently passes a negative value */ -+ if ((int) n < 0) -+ return; -+ -+ if (str != NULL) -+ { -+ wchar_t wc; -+ size_t k; -+ int w; -+ -+ memset (&mbstate, 0, sizeof (mbstate)); -+ while ((k = mbrtowc (&wc, str, MB_LEN_MAX, &mbstate)) && -+ k != (size_t)(-1) && -+ k != (size_t)(-2)) -+ { -+ w = wcwidth(wc); -+ if (w < 0 || w > n) -+ break; -+ SLsmg_write_nwchars (&wc, 1); -+ str += k; -+ n -= w; -+ } -+ } -+ while (n-- > 0) SLsmg_write_nchars (&blank, 1); -+} -+#else - void SLsmg_write_nstring (char *str, unsigned int n) - { - unsigned int width; -@@ -243,7 +275,11 @@ - } - while (width++ < n) SLsmg_write_nchars (&blank, 1); - } -+#endif /* UTF8 */ - -+#ifdef UTF8 -+/* FIXME: This function not UTF8'd yet - Edmund */ -+#endif /* UTF8 */ - void SLsmg_write_wrapped_string (char *s, int r, int c, - unsigned int dr, unsigned int dc, - int fill) -@@ -302,6 +338,123 @@ - int SLsmg_Display_Eight_Bit = 128; - #endif - -+#ifdef UTF8 -+void SLsmg_write_nwchars (wchar_t *str, unsigned int n) -+{ -+ SLsmg_Char_Type *p, *prev, *q; -+ int len, max_len, w, i; -+ wchar_t ch; -+ -+#ifndef IBMPC_SYSTEM -+ int alt_char_set_flag; -+ -+ alt_char_set_flag = ((This_Color & ALT_CHAR_FLAG) -+ && ((tt_Use_Blink_For_ACS == NULL) -+ || (*tt_Use_Blink_For_ACS == 0))); -+#endif -+ -+ if (Smg_Inited == 0) -+ return; -+ if (This_Row < Start_Row || This_Row >= Start_Row + Screen_Rows) -+ return; -+ -+ max_len = Start_Col + Screen_Cols; -+ len = This_Col; -+ p = SL_Screen[This_Row - Start_Row].neew + len - Start_Col; -+ prev = 0; -+ -+ for (i = 0; i < n; i++, str) { -+ ch = *str++; -+#ifndef IBMPC_SYSTEM -+ if (alt_char_set_flag) -+ ch = Alt_Char_Set[ch & 0x7F]; -+#endif -+ w = wcwidth(ch); -+ -+ if (w > 0) { -+ if (len + w <= max_len) { -+ if (!prev) { -+ for (q = p; *q == SLSMG_NOCHAR; q--) -+ *q = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*q)); -+ *q = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*q)); -+ } -+ prev = p; -+ *p++ = SLSMG_BUILD_CHAR(ch, This_Color), ++len; -+ for (; --w; len++, p++) -+ *p = SLSMG_NOCHAR; -+ } -+ else if (len < max_len) { -+ for (; len < max_len; len++, p++) -+ *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p)); -+ prev = 0; -+ } -+ } -+ else if (ch == '\n' && -+ SLsmg_Newline_Behavior != SLSMG_NEWLINE_PRINTABLE) { -+ SL_Screen[This_Row - Start_Row].flags |= TOUCHED; -+ for (; len < max_len && *p == SLSMG_NOCHAR; len++, p++) -+ *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p)); -+ if (!SLsmg_Newline_Behavior) -+ break; -+ ++This_Row; -+ len = 0; -+ if (This_Row == Start_Row + Screen_Rows) { -+ if (SLsmg_Newline_Behavior == SLSMG_NEWLINE_SCROLLS) -+ scroll_up(); -+ else -+ break; -+ } -+ p = SL_Screen[This_Row - Start_Row].neew; -+ prev = 0; -+ } -+ else if (ch == '\t' && (SLsmg_Tab_Width > 0)) { -+ while (len < max_len) { -+ *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p)); -+ ++p, ++len; -+ if (len % SLsmg_Tab_Width == 0) -+ break; -+ } -+ } -+ else if ((ch == 0x8) && SLsmg_Backspace_Moves) { -+ /* not implemented */ -+ } -+ else if (!w && ch) { -+ /* we could handle combining characters here, using prev */ -+ } -+ else { -+ /* we should convert control characters to printable form here */ -+ } -+ } -+ This_Col = len; -+ if (i == n) { -+ SL_Screen[This_Row - Start_Row].flags |= TOUCHED; -+ for (; len < max_len && *p == SLSMG_NOCHAR; len++, p++) -+ *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p)); -+ } -+} -+ -+void SLsmg_write_char (wchar_t wc) -+{ -+ SLsmg_write_nwchars (&wc, 1); -+} -+ -+void SLsmg_write_nchars (char *str, unsigned int n) -+{ -+ wchar_t wc; -+ size_t k; -+ mbstate_t mbstate; -+ -+ memset (&mbstate, 0, sizeof (mbstate)); -+ while ((k = mbrtowc (&wc, str, n, &mbstate)) && -+ k != (size_t)(-1) && -+ k != (size_t)(-2)) -+ { -+ SLsmg_write_nwchars (&wc, 1); -+ str += k; -+ n -= k; -+ } -+} -+#else - void SLsmg_write_nchars (char *str, unsigned int n) - { - register SLsmg_Char_Type *p, old, neew, color; -@@ -475,6 +628,7 @@ - { - SLsmg_write_nchars (&ch, 1); - } -+#endif /* UTF8 */ - - static int Cls_Flag; - -@@ -891,6 +1045,10 @@ - This_Color = color; - } - -+#ifdef UTF8 -+ /* FIXME: We should convert broken wide characters to spaces -+ before calling smart_puts */ -+#endif /* UTF8 */ - SL_Screen[i].old[Screen_Cols] = 0; - SL_Screen[i].neew[Screen_Cols] = 0; - -@@ -1334,9 +1492,16 @@ - This_Row = r; This_Col = c; - } - -+#ifdef UTF8 -+void SLsmg_fill_region (int r, int c, unsigned int dr, unsigned int dc, wchar_t ch) -+{ -+ static wchar_t hbuf[16]; -+ int i; -+#else - void SLsmg_fill_region (int r, int c, unsigned int dr, unsigned int dc, unsigned char ch) - { - static unsigned char hbuf[16]; -+#endif /* UTF8 */ - int count; - int dcmax, rmax; - -@@ -1357,16 +1522,30 @@ - #if 0 - ch = Alt_Char_Set[ch]; - #endif -+#ifdef UTF8 -+ if (ch != hbuf[0]) -+ for (i = 0; i < 16; i++) -+ hbuf[i] = ch; -+#else - if (ch != hbuf[0]) SLMEMSET ((char *) hbuf, (char) ch, 16); -+#endif /* UTF8 */ - - for (This_Row = r; This_Row < rmax; This_Row++) - { - This_Col = c; - count = dc / 16; -+#ifdef UTF8 -+ SLsmg_write_nwchars (hbuf, dc % 16); -+#else - SLsmg_write_nchars ((char *) hbuf, dc % 16); -+#endif /* UTF8 */ - while (count-- > 0) - { -+#ifdef UTF8 -+ SLsmg_write_nwchars (hbuf, 16); -+#else - SLsmg_write_nchars ((char *) hbuf, 16); -+#endif /* UTF8 */ - } - } - -@@ -1381,14 +1560,22 @@ - void SLsmg_write_color_chars (SLsmg_Char_Type *s, unsigned int len) - { - SLsmg_Char_Type *smax, sh; -+#ifdef UTF8 -+ wchar_t buf[32], *b, *bmax; -+#else - char buf[32], *b, *bmax; -+#endif /* UTF8 */ - int color, save_color; - - if (Smg_Inited == 0) return; - - smax = s + len; - b = buf; -+#ifdef UTF8 -+ bmax = b + sizeof (buf) / sizeof (SLsmg_Char_Type); -+#else - bmax = b + sizeof (buf); -+#endif /* UTF8 */ - - save_color = This_Color; - -@@ -1412,16 +1599,28 @@ - { - if (b != buf) - { -+#ifdef UTF8 -+ SLsmg_write_nwchars (buf, (int) (b - buf)); -+#else - SLsmg_write_nchars (buf, (int) (b - buf)); -+#endif /* UTF8 */ - b = buf; - } - This_Color = color; - } -+#ifdef UTF8 -+ *b++ = SLSMG_EXTRACT_CHAR(sh); -+#else - *b++ = (char) SLSMG_EXTRACT_CHAR(sh); -+#endif /* UTF8 */ - } - - if (b != buf) -+#ifdef UTF8 -+ SLsmg_write_nwchars (buf, (unsigned int) (b - buf)); -+#else - SLsmg_write_nchars (buf, (unsigned int) (b - buf)); -+#endif /* UTF8 */ - - This_Color = save_color; - } -@@ -1473,7 +1672,11 @@ - SLsmg_set_color_in_region (int color, int r, int c, unsigned int dr, unsigned int dc) - { - int cmax, rmax; -+#ifdef UTF8 -+ int color_mask; -+#else - SLsmg_Char_Type char_mask; -+#endif /* UTF8 */ - - if (Smg_Inited == 0) return; - -@@ -1498,14 +1701,22 @@ - color = ((color & 0x7F) + Bce_Color_Offset) & 0x7F; - } - #endif -+#ifdef UTF8 -+ color_mask = 0; -+#else - color = color << 8; - - char_mask = 0xFF; -+#endif /* UTF8 */ - - #ifndef IBMPC_SYSTEM - if ((tt_Use_Blink_For_ACS == NULL) - || (0 == *tt_Use_Blink_For_ACS)) -+#ifdef UTF8 -+ color_mask = 0x80; -+#else - char_mask = 0x80FF; -+#endif /* UTF8 */ - #endif - - while (r < rmax) -@@ -1519,7 +1730,13 @@ - - while (s < smax) - { -+#ifdef UTF8 -+ *s = SLSMG_BUILD_CHAR(SLSMG_EXTRACT_CHAR(*s), -+ (SLSMG_EXTRACT_COLOR(*s) & color_mask) -+ | color); -+#else - *s = (*s & char_mask) | color; -+#endif /* UTF8 */ - s++; - } - r++; ---- slang-1.4.5/src/Makefile.in.foo 2002-06-12 19:30:09.000000000 -0400 -+++ slang-1.4.5/src/Makefile.in 2002-06-12 19:31:13.000000000 -0400 -@@ -67,7 +67,7 @@ - #--------------------------------------------------------------------------- - # There should be no need to change anything below here. - #--------------------------------------------------------------------------- --THIS_LIB = slang# -+THIS_LIB = slang-utf8# - OTHERSTUFF = - THIS_LIB_DEFINES = -DSLANG - ELF_MAJOR_VERSION = @slang_major_version@# ---- slang-1.4.9/src/sldisply.c.orig 2003-10-27 17:24:15.000000000 -0500 -+++ slang-1.4.9/src/sldisply.c 2003-10-27 17:56:25.000000000 -0500 -@@ -9,6 +9,7 @@ - - #include - #include -+#include - - #if !defined(VMS) || (__VMS_VER >= 70000000) - # include -@@ -1426,14 +1427,25 @@ - - /* Highest bit represents the character set. */ - #define COLOR_MASK 0x7F00 -+#ifdef UTF8 -+# define COLOR_OF(x) (SLSMG_EXTRACT_COLOR(x) & 0x7F) -+#else - #define COLOR_OF(x) (((x)&COLOR_MASK)>>8) -+#endif - #define CHAR_OF(x) ((x)&0x80FF) - - #if SLTT_HAS_NON_BCE_SUPPORT -+#ifdef UTF8 -+static int bce_color_eqs (SLsmg_Char_Type a, SLsmg_Char_Type b) -+{ -+ a = SLSMG_EXTRACT_COLOR(a) & 0x7F; -+ b = SLSMG_EXTRACT_COLOR(b) & 0x7F; -+#else - static int bce_color_eqs (unsigned int a, unsigned int b) - { - a = COLOR_OF(a); - b = COLOR_OF(b); -+#endif - - if (a == b) - return 1; -@@ -1459,8 +1471,14 @@ - : (Ansi_Color_Map[COLOR_OF(a)].mono == Ansi_Color_Map[COLOR_OF(b)].mono)) - #endif - -+#ifdef UTF8 -+#define CHAR_EQS(a, b) ((a) == (b)\ -+ || (SLSMG_EXTRACT_CHAR(a) == SLSMG_EXTRACT_CHAR(b)\ -+ && COLOR_EQS((a), (b)))) -+#else - #define CHAR_EQS(a, b) (((a) == (b))\ - || ((CHAR_OF(a)==CHAR_OF(b)) && COLOR_EQS(a,b))) -+#endif - - /* The whole point of this routine is to prevent writing to the last column - * and last row on terminals with automatic margins. -@@ -1488,9 +1506,58 @@ - tt_write (str, len); - } - -+#ifdef UTF8 -+/* FIXME: This duplicates the function above -+ */ -+static void write_wstring_with_care (SLsmg_Char_Type *str, unsigned int len) -+{ -+ mbstate_t mbstate; -+ -+ if (str == NULL) return; -+ -+ if (Automatic_Margins && (Cursor_r + 1 == SLtt_Screen_Rows)) -+ { -+ if (len + (unsigned int) Cursor_c >= (unsigned int) SLtt_Screen_Cols) -+ { -+ /* For now, just do not write there. Later, something more -+ * sophisticated will be implemented. -+ */ -+ if (SLtt_Screen_Cols > Cursor_c) -+ { -+ len = SLtt_Screen_Cols - Cursor_c - 1; -+ while (len > 0 && str[len] == SLSMG_NOCHAR) -+ --len; -+ } -+ else len = 0; -+ } -+ } -+ -+ memset (&mbstate, 0, sizeof (mbstate)); -+ while (len--) -+ { -+ SLsmg_Char_Type c = *str++; -+ char buf[MB_LEN_MAX]; -+ size_t n; -+ -+ if (c == SLSMG_NOCHAR) -+ continue; -+ -+ n = wcrtomb (buf, c, &mbstate); -+ if (n == (size_t)(-1)) -+ break; -+ -+ tt_write(buf, n); -+ } -+} -+#endif /* UTF8 */ -+ - static void send_attr_str (SLsmg_Char_Type *s) - { -+#ifdef UTF8 -+ SLsmg_Char_Type out[SLTT_MAX_SCREEN_COLS], ch, *p; -+#else - unsigned char out[SLTT_MAX_SCREEN_COLS], ch, *p; -+#endif /* UTF8 */ - register SLtt_Char_Type attr; - register SLsmg_Char_Type sh; - int color, last_color = -1; -@@ -1498,8 +1565,13 @@ - p = out; - while (0 != (sh = *s++)) - { -+#ifdef UTF8 -+ ch = SLSMG_EXTRACT_CHAR(sh); -+ color = SLSMG_EXTRACT_COLOR(sh); -+#else - ch = sh & 0xFF; - color = ((int) sh & 0xFF00) >> 8; -+#endif - - #if SLTT_HAS_NON_BCE_SUPPORT - if (Bce_Color_Offset -@@ -1511,8 +1583,12 @@ - { - if (SLtt_Use_Ansi_Colors) attr = Ansi_Color_Map[color & 0x7F].fgbg; - else attr = Ansi_Color_Map[color & 0x7F].mono; -- -+ -+#ifdef UTF8 -+ if (SLSMG_EXTRACT_COLOR(sh) & 0x80) /* alternate char set */ -+#else - if (sh & 0x8000) /* alternate char set */ -+#endif - { - if (SLtt_Use_Blink_For_ACS) - { -@@ -1534,8 +1610,12 @@ - { - if (p != out) - { -+#ifdef UTF8 -+ write_wstring_with_care (out, p-out); -+#else - *p = 0; - write_string_with_care ((char *) out); -+#endif - Cursor_c += (int) (p - out); - p = out; - } -@@ -1558,8 +1638,12 @@ - } - *p++ = ch; - } -+#ifdef UTF8 -+ if (p != out) write_wstring_with_care (out, p-out); -+#else - *p = 0; - if (p != out) write_string_with_care ((char *) out); -+#endif - Cursor_c += (int) (p - out); - } - -@@ -1686,7 +1770,11 @@ - - while (qq < qmax) - { -+#ifdef UTF8 -+ if (SLSMG_EXTRACT_COLOR(*qq)) -+#else - if (*qq & 0xFF00) -+#endif - { - SLtt_normal_video (); - SLtt_del_eol (); -@@ -1701,7 +1789,11 @@ - /* Find where the last non-blank character on old/new screen is */ - - space_char = ' '; -+#ifdef UTF8 -+ if (SLSMG_EXTRACT_CHAR(*(pmax-1)) == ' ') -+#else - if (CHAR_EQS(*(pmax-1), ' ')) -+#endif - { - /* If we get here, then we can erase to the end of the line to create - * the final space. However, this will only work _if_ erasing will -@@ -1752,7 +1844,11 @@ - { - #endif - /* Try use use erase to bol if possible */ -+#ifdef UTF8 -+ if ((Del_Bol_Str != NULL) && (SLSMG_EXTRACT_CHAR(*neww) == ' ')) -+#else - if ((Del_Bol_Str != NULL) && (CHAR_OF(*neww) == ' ')) -+#endif - { - SLsmg_Char_Type *p1; - SLsmg_Char_Type blank; -@@ -1781,7 +1877,11 @@ - q = oldd + ofs; - p = p1; - SLtt_goto_rc (row, ofs - 1); -+#ifdef UTF8 -+ SLtt_reverse_video (SLSMG_EXTRACT_COLOR (blank)); -+#else - SLtt_reverse_video (COLOR_OF(blank)); -+#endif - tt_write_string (Del_Bol_Str); - tt_write (" ", 1); - Cursor_c += 1; -@@ -1978,7 +2078,11 @@ - - if (q < qmax) - { -+#ifdef UTF8 -+ SLtt_reverse_video (SLSMG_EXTRACT_COLOR (space_char)); -+#else - SLtt_reverse_video (COLOR_OF(space_char)); -+#endif - del_eol (); - } - diff --git a/src/patches/slang-utf8-acs.patch b/src/patches/slang-utf8-acs.patch deleted file mode 100644 index dc8a8519a..000000000 --- a/src/patches/slang-utf8-acs.patch +++ /dev/null @@ -1,417 +0,0 @@ ---- slang-1.4.5/src/slang.h.acs 2002-07-09 00:03:57.000000000 -0400 -+++ slang-1.4.5/src/slang.h 2002-07-09 00:11:06.000000000 -0400 -@@ -1255,6 +1255,8 @@ - - #ifdef UTF8 - typedef int SLsmg_Char_Type; -+extern SLtt_Char_Type SLcurses_Acs_Map [128]; -+#define acs_map SLcurses_Acs_Map - #define SLSMG_EXTRACT_CHAR(x) ((x) & 0xFFFFFF) - #define SLSMG_EXTRACT_COLOR(x) (((x)>>24)&0xFF) - #define SLSMG_BUILD_CHAR(ch,color) (((SLsmg_Char_Type)(wchar_t)(ch))|((color)<<24)) -@@ -1396,7 +1398,11 @@ - extern void SLsmg_set_screen_start (int *, int *); - extern void SLsmg_draw_hline (unsigned int); - extern void SLsmg_draw_vline (int); -+#ifdef UTF8 -+extern void SLsmg_draw_object (int, int, SLsmg_Char_Type); -+#else - extern void SLsmg_draw_object (int, int, unsigned char); -+#endif - extern void SLsmg_draw_box (int, int, unsigned int, unsigned int); - extern int SLsmg_get_column(void); - extern int SLsmg_get_row(void); -@@ -1408,6 +1414,9 @@ - extern int SLsmg_Display_Eight_Bit; - extern int SLsmg_Tab_Width; - -+extern int SLsmg_Is_Unicode; -+extern int SLsmg_Setlocale; -+ - #define SLSMG_NEWLINE_IGNORED 0 /* default */ - #define SLSMG_NEWLINE_MOVES 1 /* moves to next line, column 0 */ - #define SLSMG_NEWLINE_SCROLLS 2 /* moves but scrolls at bottom of screen */ -@@ -1465,31 +1474,79 @@ - # define SLSMG_BOARD_CHAR '#' - # define SLSMG_BLOCK_CHAR '#' - # else --# define SLSMG_HLINE_CHAR 'q' --# define SLSMG_VLINE_CHAR 'x' --# define SLSMG_ULCORN_CHAR 'l' --# define SLSMG_URCORN_CHAR 'k' --# define SLSMG_LLCORN_CHAR 'm' --# define SLSMG_LRCORN_CHAR 'j' --# define SLSMG_CKBRD_CHAR 'a' --# define SLSMG_RTEE_CHAR 'u' --# define SLSMG_LTEE_CHAR 't' --# define SLSMG_UTEE_CHAR 'w' --# define SLSMG_DTEE_CHAR 'v' --# define SLSMG_PLUS_CHAR 'n' --# define SLSMG_DIAMOND_CHAR '`' --# define SLSMG_DEGREE_CHAR 'f' --# define SLSMG_PLMINUS_CHAR 'g' --# define SLSMG_BULLET_CHAR '~' --# define SLSMG_LARROW_CHAR ',' --# define SLSMG_RARROW_CHAR '+' --# define SLSMG_DARROW_CHAR '.' --# define SLSMG_UARROW_CHAR '-' --# define SLSMG_BOARD_CHAR 'h' --# define SLSMG_BLOCK_CHAR '0' -+# define SLSMG_HLINE_CHAR (acs_map['q']) -+# define SLSMG_VLINE_CHAR (acs_map['x']) -+# define SLSMG_ULCORN_CHAR (acs_map['l']) -+# define SLSMG_URCORN_CHAR (acs_map['k']) -+# define SLSMG_LLCORN_CHAR (acs_map['m']) -+# define SLSMG_LRCORN_CHAR (acs_map['j']) -+# define SLSMG_CKBRD_CHAR (acs_map['a']) -+# define SLSMG_RTEE_CHAR (acs_map['u']) -+# define SLSMG_LTEE_CHAR (acs_map['t']) -+# define SLSMG_UTEE_CHAR (acs_map['v']) -+# define SLSMG_DTEE_CHAR (acs_map['w']) -+# define SLSMG_PLUS_CHAR (acs_map['n']) -+# define SLSMG_DIAMOND_CHAR (acs_map['`']) -+# define SLSMG_DEGREE_CHAR (acs_map['f']) -+# define SLSMG_PLMINUS_CHAR (acs_map['g']) -+# define SLSMG_BULLET_CHAR (acs_map['~']) -+# define SLSMG_LARROW_CHAR (acs_map[',']) -+# define SLSMG_RARROW_CHAR (acs_map['+']) -+# define SLSMG_DARROW_CHAR (acs_map['.']) -+# define SLSMG_UARROW_CHAR (acs_map['-']) -+# define SLSMG_BOARD_CHAR (acs_map['h']) -+# define SLSMG_BLOCK_CHAR (acs_map['0']) -+# -+# define SLSMG_HLINE_CHAR_TERM 'q' -+# define SLSMG_VLINE_CHAR_TERM 'x' -+# define SLSMG_ULCORN_CHAR_TERM 'l' -+# define SLSMG_URCORN_CHAR_TERM 'k' -+# define SLSMG_LLCORN_CHAR_TERM 'm' -+# define SLSMG_LRCORN_CHAR_TERM 'j' -+# define SLSMG_CKBRD_CHAR_TERM 'a' -+# define SLSMG_RTEE_CHAR_TERM 'u' -+# define SLSMG_LTEE_CHAR_TERM 't' -+# define SLSMG_UTEE_CHAR_TERM 'v' -+# define SLSMG_DTEE_CHAR_TERM 'w' -+# define SLSMG_PLUS_CHAR_TERM 'n' -+# define SLSMG_DIAMOND_CHAR_TERM '`' -+# define SLSMG_DEGREE_CHAR_TERM 'f' -+# define SLSMG_PLMINUS_CHAR_TERM 'g' -+# define SLSMG_BULLET_CHAR_TERM '~' -+# define SLSMG_LARROW_CHAR_TERM ',' -+# define SLSMG_RARROW_CHAR_TERM '+' -+# define SLSMG_DARROW_CHAR_TERM '.' -+# define SLSMG_UARROW_CHAR_TERM '-' -+# define SLSMG_BOARD_CHAR_TERM 'h' -+# define SLSMG_BLOCK_CHAR_TERM '0' - # endif /* AMIGA */ - #endif /* IBMPC_SYSTEM */ - -+#ifdef UTF8 -+# define SLSMG_HLINE_CHAR_UNICODE 0x2500 -+# define SLSMG_VLINE_CHAR_UNICODE 0x2502 -+# define SLSMG_ULCORN_CHAR_UNICODE 0x250c -+# define SLSMG_URCORN_CHAR_UNICODE 0x2510 -+# define SLSMG_LLCORN_CHAR_UNICODE 0x2514 -+# define SLSMG_LRCORN_CHAR_UNICODE 0x2518 -+# define SLSMG_RTEE_CHAR_UNICODE 0x2524 -+# define SLSMG_LTEE_CHAR_UNICODE 0x251c -+# define SLSMG_UTEE_CHAR_UNICODE 0x2534 -+# define SLSMG_DTEE_CHAR_UNICODE 0x252c -+# define SLSMG_PLUS_CHAR_UNICODE 0x253c -+# define SLSMG_CKBRD_CHAR_UNICODE 0x2592 -+# define SLSMG_DIAMOND_CHAR_UNICODE 0x25c6 -+# define SLSMG_DEGREE_CHAR_UNICODE 0x00b0 -+# define SLSMG_PLMINUS_CHAR_UNICODE 0x00b1 -+# define SLSMG_BULLET_CHAR_UNICODE 0x00b7 -+# define SLSMG_LARROW_CHAR_UNICODE 0x2190 -+# define SLSMG_RARROW_CHAR_UNICODE 0x2192 -+# define SLSMG_DARROW_CHAR_UNICODE 0x2193 -+# define SLSMG_UARROW_CHAR_UNICODE 0x2191 -+# define SLSMG_BOARD_CHAR_UNICODE 0x2592 -+# define SLSMG_BLOCK_CHAR_UNICODE 0x25ae -+#endif -+ - #ifndef IBMPC_SYSTEM - # define SLSMG_COLOR_BLACK 0x000000 - # define SLSMG_COLOR_RED 0x000001 ---- slang-1.4.5/src/slcurses.c.acs 2002-07-09 00:03:57.000000000 -0400 -+++ slang-1.4.5/src/slcurses.c 2002-07-09 00:09:03.000000000 -0400 -@@ -331,40 +331,63 @@ - /* SLtt_set_mono (A_BLINK >> 8, NULL, SLTT_BLINK_MASK); */ - SLtt_set_mono ((A_BOLD|A_UNDERLINE) >> 8, NULL, SLTT_ULINE_MASK|SLTT_BOLD_MASK); - SLtt_set_mono ((A_REVERSE|A_UNDERLINE) >> 8, NULL, SLTT_ULINE_MASK|SLTT_REV_MASK); -+ -+ SLcurses_init_acs_map(); -+ -+ return SLcurses_Stdscr; -+} - -+void SLcurses_init_acs_map() -+{ - if (SLtt_Has_Alt_Charset) - { -- SLcurses_Acs_Map[SLSMG_ULCORN_CHAR] = SLSMG_ULCORN_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_URCORN_CHAR] = SLSMG_URCORN_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_LLCORN_CHAR] = SLSMG_LLCORN_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_LRCORN_CHAR] = SLSMG_LRCORN_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_UTEE_CHAR] = SLSMG_UTEE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_DTEE_CHAR] = SLSMG_DTEE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_LTEE_CHAR] = SLSMG_LTEE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_RTEE_CHAR] = SLSMG_RTEE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_VLINE_CHAR] = SLSMG_VLINE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_HLINE_CHAR] = SLSMG_HLINE_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_PLUS_CHAR] = SLSMG_PLUS_CHAR | A_ALTCHARSET; -- SLcurses_Acs_Map[SLSMG_CKBRD_CHAR] = SLSMG_CKBRD_CHAR | A_ALTCHARSET; -+ if (SLsmg_Is_Unicode) -+ { -+ SLcurses_Acs_Map['l'] = SLSMG_ULCORN_CHAR_UNICODE; -+ SLcurses_Acs_Map['k'] = SLSMG_URCORN_CHAR_UNICODE; -+ SLcurses_Acs_Map['m'] = SLSMG_LLCORN_CHAR_UNICODE; -+ SLcurses_Acs_Map['j'] = SLSMG_LRCORN_CHAR_UNICODE; -+ SLcurses_Acs_Map['v'] = SLSMG_UTEE_CHAR_UNICODE; -+ SLcurses_Acs_Map['w'] = SLSMG_DTEE_CHAR_UNICODE; -+ SLcurses_Acs_Map['t'] = SLSMG_LTEE_CHAR_UNICODE; -+ SLcurses_Acs_Map['u'] = SLSMG_RTEE_CHAR_UNICODE; -+ SLcurses_Acs_Map['x'] = SLSMG_VLINE_CHAR_UNICODE; -+ SLcurses_Acs_Map['q'] = SLSMG_HLINE_CHAR_UNICODE; -+ SLcurses_Acs_Map['n'] = SLSMG_PLUS_CHAR_UNICODE; -+ SLcurses_Acs_Map['a'] = SLSMG_CKBRD_CHAR_UNICODE; -+ } -+ else -+ { -+ SLcurses_Acs_Map['l'] = SLSMG_ULCORN_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['k'] = SLSMG_URCORN_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['m'] = SLSMG_LLCORN_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['j'] = SLSMG_LRCORN_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['v'] = SLSMG_UTEE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['w'] = SLSMG_DTEE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['t'] = SLSMG_LTEE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['u'] = SLSMG_RTEE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['x'] = SLSMG_VLINE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['q'] = SLSMG_HLINE_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['n'] = SLSMG_PLUS_CHAR_TERM | A_ALTCHARSET; -+ SLcurses_Acs_Map['a'] = SLSMG_CKBRD_CHAR_TERM | A_ALTCHARSET; -+ } - } - else - { - /* ugly defaults to use on terminals which don't support graphics */ -- SLcurses_Acs_Map[SLSMG_ULCORN_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_URCORN_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_LLCORN_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_LRCORN_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_UTEE_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_DTEE_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_LTEE_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_RTEE_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_VLINE_CHAR] = '|'; -- SLcurses_Acs_Map[SLSMG_HLINE_CHAR] = '-'; -- SLcurses_Acs_Map[SLSMG_PLUS_CHAR] = '+'; -- SLcurses_Acs_Map[SLSMG_CKBRD_CHAR] = '#'; -+ SLcurses_Acs_Map['l'] = '+'; -+ SLcurses_Acs_Map['k'] = '+'; -+ SLcurses_Acs_Map['m'] = '+'; -+ SLcurses_Acs_Map['j'] = '+'; -+ SLcurses_Acs_Map['v'] = '+'; -+ SLcurses_Acs_Map['w'] = '+'; -+ SLcurses_Acs_Map['t'] = '+'; -+ SLcurses_Acs_Map['u'] = '+'; -+ SLcurses_Acs_Map['x'] = '|'; -+ SLcurses_Acs_Map['q'] = '-'; -+ SLcurses_Acs_Map['n'] = '+'; -+ SLcurses_Acs_Map['a'] = '#'; - } -- -- return SLcurses_Stdscr; - } - - int SLcurses_wattrset (SLcurses_Window_Type *w, SLtt_Char_Type ch) ---- slang-1.4.5/src/slcurses.h.acs 2002-02-10 02:39:19.000000000 -0500 -+++ slang-1.4.5/src/slcurses.h 2002-07-09 00:03:57.000000000 -0400 -@@ -141,6 +141,7 @@ - - extern int SLcurses_nodelay (SLcurses_Window_Type *, int); - extern SLcurses_Window_Type *SLcurses_initscr (void); -+extern void SLcurses_init_acs_map (void); - #define initscr SLcurses_initscr - - extern int SLcurses_cbreak (void); -@@ -222,21 +222,21 @@ - extern SLtt_Char_Type SLcurses_Acs_Map [128]; - #define acs_map SLcurses_Acs_Map - --#define ACS_ULCORNER (acs_map[SLSMG_ULCORN_CHAR]) --#define ACS_URCORNER (acs_map[SLSMG_URCORN_CHAR]) --#define ACS_LRCORNER (acs_map[SLSMG_LRCORN_CHAR]) --#define ACS_LLCORNER (acs_map[SLSMG_LLCORN_CHAR]) --#define ACS_TTEE (acs_map[SLSMG_UTEE_CHAR]) --#define ACS_LTEE (acs_map[SLSMG_LTEE_CHAR]) --#define ACS_RTEE (acs_map[SLSMG_RTEE_CHAR]) --#define ACS_BTEE (acs_map[SLSMG_DTEE_CHAR]) --#define ACS_PLUS (acs_map[SLSMG_PLUS_CHAR]) --#define ACS_VLINE (acs_map[SLSMG_VLINE_CHAR]) --#define ACS_HLINE (acs_map[SLSMG_HLINE_CHAR]) -+#define ACS_ULCORNER SLSMG_ULCORN_CHAR -+#define ACS_URCORNER SLSMG_URCORN_CHAR -+#define ACS_LRCORNER SLSMG_LRCORN_CHAR -+#define ACS_LLCORNER SLSMG_LLCORN_CHAR -+#define ACS_TTEE SLSMG_UTEE_CHAR -+#define ACS_LTEE SLSMG_LTEE_CHAR -+#define ACS_RTEE SLSMG_RTEE_CHAR -+#define ACS_BTEE SLSMG_DTEE_CHAR -+#define ACS_PLUS SLSMG_PLUS_CHAR -+#define ACS_VLINE SLSMG_VLINE_CHAR -+#define ACS_HLINE SLSMG_HLINE_CHAR - #define ACS_S1 '-' - #define ACS_S9 '-' - #define ACS_DIAMOND '&' --#define ACS_CKBOARD (acs_map[SLSMG_CKBRD_CHAR]) -+#define ACS_CKBOARD SLSMG_CKBRD_CHAR - #define ACS_DEGREE 'o' - #define ACS_PLMINUS '+' - #define ACS_BULLET '*' ---- slang-1.4.5/src/slsmg.c.acs 2002-07-09 00:03:57.000000000 -0400 -+++ slang-1.4.5/src/slsmg.c 2002-07-09 00:03:57.000000000 -0400 -@@ -10,6 +10,9 @@ - - #include "slang.h" - #include "_slang.h" -+#include "slcurses.h" -+ -+#include - - typedef struct Screen_Type - { -@@ -44,9 +47,9 @@ - */ - - #ifndef IBMPC_SYSTEM --#define ALT_CHAR_FLAG 0x80 -+static int ALT_CHAR_FLAG=0x80; - #else --#define ALT_CHAR_FLAG 0x00 -+static int ALT_CHAR_FLAG=0x00; - #endif - - #if SLTT_HAS_NON_BCE_SUPPORT && !defined(IBMPC_SYSTEM) -@@ -54,6 +57,8 @@ - static int Bce_Color_Offset; - #endif - -+int SLsmg_Is_Unicode = 0; -+int SLsmg_Setlocale = 1; - int SLsmg_Newline_Behavior = 0; - int SLsmg_Backspace_Moves = 0; - /* Backward compatibility. Not used. */ -@@ -184,6 +189,8 @@ - return;/* alt chars not used and the alt bit - * is used to indicate a blink. - */ -+ if (SLsmg_Is_Unicode) -+ ALT_CHAR_FLAG=0x00; - - if (i) This_Alt_Char = ALT_CHAR_FLAG; - else This_Alt_Char = 0; -@@ -348,6 +355,8 @@ - #ifndef IBMPC_SYSTEM - int alt_char_set_flag; - -+ if (SLsmg_Is_Unicode) -+ ALT_CHAR_FLAG = 0x00; - alt_char_set_flag = ((This_Color & ALT_CHAR_FLAG) - && ((tt_Use_Blink_For_ACS == NULL) - || (*tt_Use_Blink_For_ACS == 0))); -@@ -1221,6 +1230,20 @@ - Smg_Inited = 0; - } - -+static void SLsmg_check_unicode(void) -+{ -+ char *s,*t; -+ -+ if (SLsmg_Setlocale) -+ s = setlocale(LC_ALL, ""); -+ else -+ s = setlocale(LC_ALL, NULL); -+ if (s && (strstr(s,"UTF-8") || strstr(s,"utf8"))) { -+ SLsmg_Is_Unicode = 1; -+ return; -+ } -+ SLsmg_Is_Unicode = 0; -+} - - static int init_smg (void) - { -@@ -1242,6 +1265,8 @@ - This_Col = This_Row = Start_Col = Start_Row = 0; - - This_Alt_Char = 0; -+ SLsmg_check_unicode (); -+ SLcurses_init_acs_map (); - SLsmg_set_color (0); - Cls_Flag = 1; - #ifndef IBMPC_SYSTEM -@@ -1386,7 +1411,11 @@ - } - } - -+#ifdef UTF8 -+void SLsmg_draw_object (int r, int c, SLsmg_Char_Type object) -+#else - void SLsmg_draw_object (int r, int c, unsigned char object) -+#endif - { - This_Row = r; This_Col = c; - -@@ -1405,7 +1434,7 @@ - - void SLsmg_draw_hline (unsigned int n) - { -- static unsigned char hbuf[16]; -+ SLsmg_Char_Type ch = SLSMG_HLINE_CHAR; - int count; - int cmin, cmax; - int final_col = This_Col + (int) n; -@@ -1421,11 +1450,6 @@ - return; - } - -- if (hbuf[0] == 0) -- { -- SLMEMSET ((char *) hbuf, SLSMG_HLINE_CHAR, 16); -- } -- - n = (unsigned int)(cmax - cmin); - count = n / 16; - -@@ -1433,10 +1457,10 @@ - This_Color |= ALT_CHAR_FLAG; - This_Col = cmin; - -- SLsmg_write_nchars ((char *) hbuf, n % 16); -- while (count-- > 0) -+ SLsmg_draw_object(This_Row, This_Col, ch); -+ while (n-- > 0) - { -- SLsmg_write_nchars ((char *) hbuf, 16); -+ SLsmg_draw_object(This_Row, This_Col, ch); - } - - This_Color = save_color; -@@ -1445,7 +1469,7 @@ - - void SLsmg_draw_vline (int n) - { -- unsigned char ch = SLSMG_VLINE_CHAR; -+ SLsmg_Char_Type ch = SLSMG_VLINE_CHAR; - int c = This_Col, rmin, rmax; - int final_row = This_Row + n; - int save_color; -@@ -1466,7 +1490,7 @@ - for (This_Row = rmin; This_Row < rmax; This_Row++) - { - This_Col = c; -- SLsmg_write_nchars ((char *) &ch, 1); -+ SLsmg_draw_object (This_Row, This_Col, ch); - } - - This_Col = c; This_Row = final_row; diff --git a/src/patches/slang-utf8-fix.patch b/src/patches/slang-utf8-fix.patch deleted file mode 100644 index 6c0a80f1e..000000000 --- a/src/patches/slang-utf8-fix.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- slang-1.4.5/src/slsmg.c.jj 2003-02-21 12:11:37.000000000 -0500 -+++ slang-1.4.5/src/slsmg.c 2003-02-21 14:09:28.000000000 -0500 -@@ -378,8 +378,10 @@ void SLsmg_write_nwchars (wchar_t *str, - for (i = 0; i < n; i++, str) { - ch = *str++; - #ifndef IBMPC_SYSTEM -- if (alt_char_set_flag) -+ if (alt_char_set_flag) { - ch = Alt_Char_Set[ch & 0x7F]; -+ w = 1; -+ } else - #endif - w = wcwidth(ch); - ---- slang-1.4.5/src/sldisply.c.jj 2003-02-21 12:11:37.000000000 -0500 -+++ slang-1.4.5/src/sldisply.c 2003-02-21 15:51:43.000000000 -0500 -@@ -1498,6 +1498,17 @@ static void write_wstring_with_care (SLs - } - } - -+ if (Current_Fgbg & SLTT_ALTC_MASK) -+ { -+ char c; -+ while (len--) -+ { -+ c = *str++; -+ tt_write(&c, 1); -+ } -+ return; -+ } -+ - memset (&mbstate, 0, sizeof (mbstate)); - while (len--) - { From 8ed963a9d62b70e63a285c19e339080b2387b4e9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 12:55:01 +0200 Subject: [PATCH 074/297] newt: Update to 0.52.17 --- config/rootfiles/common/newt | 143 ++++++++++++++++++++++++- lfs/newt | 17 ++- src/patches/newt-0.51.6-if1close.patch | 29 ----- 3 files changed, 146 insertions(+), 43 deletions(-) delete mode 100644 src/patches/newt-0.51.6-if1close.patch diff --git a/config/rootfiles/common/newt b/config/rootfiles/common/newt index 08fb2ce0c..c7f7414fb 100644 --- a/config/rootfiles/common/newt +++ b/config/rootfiles/common/newt @@ -1,8 +1,143 @@ usr/bin/whiptail #usr/include/newt.h #usr/lib/libnewt.a -usr/lib/libnewt.so -usr/lib/libnewt.so.0.51 -usr/lib/libnewt.so.0.51.6 -#usr/lib/python2.7/site-packages/_snackmodule.so +#usr/lib/libnewt.so +usr/lib/libnewt.so.0.52 +usr/lib/libnewt.so.0.52.17 +#usr/lib/pkgconfig/libnewt.pc +#usr/lib/python2.7/site-packages/_snack.so #usr/lib/python2.7/site-packages/snack.py +#usr/share/locale/ar +#usr/share/locale/ar/LC_MESSAGES +#usr/share/locale/ar/LC_MESSAGES/newt.mo +#usr/share/locale/as +#usr/share/locale/as/LC_MESSAGES +#usr/share/locale/as/LC_MESSAGES/newt.mo +#usr/share/locale/ast/LC_MESSAGES/newt.mo +#usr/share/locale/bal +#usr/share/locale/bal/LC_MESSAGES +#usr/share/locale/bal/LC_MESSAGES/newt.mo +#usr/share/locale/bg/LC_MESSAGES/newt.mo +#usr/share/locale/bn +#usr/share/locale/bn/LC_MESSAGES +#usr/share/locale/bn/LC_MESSAGES/newt.mo +#usr/share/locale/bn_IN +#usr/share/locale/bn_IN/LC_MESSAGES +#usr/share/locale/bn_IN/LC_MESSAGES/newt.mo +#usr/share/locale/bs/LC_MESSAGES/newt.mo +#usr/share/locale/ca/LC_MESSAGES/newt.mo +#usr/share/locale/cs/LC_MESSAGES/newt.mo +#usr/share/locale/cy +#usr/share/locale/cy/LC_MESSAGES +#usr/share/locale/cy/LC_MESSAGES/newt.mo +#usr/share/locale/da/LC_MESSAGES/newt.mo +#usr/share/locale/de/LC_MESSAGES/newt.mo +#usr/share/locale/dz +#usr/share/locale/dz/LC_MESSAGES +#usr/share/locale/dz/LC_MESSAGES/newt.mo +#usr/share/locale/el/LC_MESSAGES/newt.mo +#usr/share/locale/eo/LC_MESSAGES/newt.mo +#usr/share/locale/es/LC_MESSAGES/newt.mo +#usr/share/locale/et/LC_MESSAGES/newt.mo +#usr/share/locale/eu/LC_MESSAGES/newt.mo +#usr/share/locale/fa +#usr/share/locale/fa/LC_MESSAGES +#usr/share/locale/fa/LC_MESSAGES/newt.mo +#usr/share/locale/fi/LC_MESSAGES/newt.mo +#usr/share/locale/fr/LC_MESSAGES/newt.mo +#usr/share/locale/ga/LC_MESSAGES/newt.mo +#usr/share/locale/gl/LC_MESSAGES/newt.mo +#usr/share/locale/gu +#usr/share/locale/gu/LC_MESSAGES +#usr/share/locale/gu/LC_MESSAGES/newt.mo +#usr/share/locale/he +#usr/share/locale/he/LC_MESSAGES +#usr/share/locale/he/LC_MESSAGES/newt.mo +#usr/share/locale/hi +#usr/share/locale/hi/LC_MESSAGES +#usr/share/locale/hi/LC_MESSAGES/newt.mo +#usr/share/locale/hr/LC_MESSAGES/newt.mo +#usr/share/locale/hu/LC_MESSAGES/newt.mo +#usr/share/locale/ia/LC_MESSAGES/newt.mo +#usr/share/locale/id/LC_MESSAGES/newt.mo +#usr/share/locale/it/LC_MESSAGES/newt.mo +#usr/share/locale/ja/LC_MESSAGES/newt.mo +#usr/share/locale/km +#usr/share/locale/km/LC_MESSAGES +#usr/share/locale/km/LC_MESSAGES/newt.mo +#usr/share/locale/kn +#usr/share/locale/kn/LC_MESSAGES +#usr/share/locale/kn/LC_MESSAGES/newt.mo +#usr/share/locale/ko/LC_MESSAGES/newt.mo +#usr/share/locale/ku +#usr/share/locale/ku/LC_MESSAGES +#usr/share/locale/ku/LC_MESSAGES/newt.mo +#usr/share/locale/lt/LC_MESSAGES/newt.mo +#usr/share/locale/lv +#usr/share/locale/lv/LC_MESSAGES +#usr/share/locale/lv/LC_MESSAGES/newt.mo +#usr/share/locale/mg +#usr/share/locale/mg/LC_MESSAGES +#usr/share/locale/mg/LC_MESSAGES/newt.mo +#usr/share/locale/mk +#usr/share/locale/mk/LC_MESSAGES +#usr/share/locale/mk/LC_MESSAGES/newt.mo +#usr/share/locale/ml +#usr/share/locale/ml/LC_MESSAGES +#usr/share/locale/ml/LC_MESSAGES/newt.mo +#usr/share/locale/mr +#usr/share/locale/mr/LC_MESSAGES +#usr/share/locale/mr/LC_MESSAGES/newt.mo +#usr/share/locale/ms/LC_MESSAGES/newt.mo +#usr/share/locale/nb/LC_MESSAGES/newt.mo +#usr/share/locale/nds +#usr/share/locale/nds/LC_MESSAGES +#usr/share/locale/nds/LC_MESSAGES/newt.mo +#usr/share/locale/ne +#usr/share/locale/ne/LC_MESSAGES +#usr/share/locale/ne/LC_MESSAGES/newt.mo +#usr/share/locale/nl/LC_MESSAGES/newt.mo +#usr/share/locale/nn +#usr/share/locale/nn/LC_MESSAGES +#usr/share/locale/nn/LC_MESSAGES/newt.mo +#usr/share/locale/pa/LC_MESSAGES/newt.mo +#usr/share/locale/pl/LC_MESSAGES/newt.mo +#usr/share/locale/pt/LC_MESSAGES/newt.mo +#usr/share/locale/pt_BR/LC_MESSAGES/newt.mo +#usr/share/locale/ro/LC_MESSAGES/newt.mo +#usr/share/locale/ru/LC_MESSAGES/newt.mo +#usr/share/locale/sk/LC_MESSAGES/newt.mo +#usr/share/locale/sl/LC_MESSAGES/newt.mo +#usr/share/locale/sq/LC_MESSAGES/newt.mo +#usr/share/locale/sr/LC_MESSAGES/newt.mo +#usr/share/locale/sr@latin +#usr/share/locale/sr@latin/LC_MESSAGES +#usr/share/locale/sr@latin/LC_MESSAGES/newt.mo +#usr/share/locale/sv/LC_MESSAGES/newt.mo +#usr/share/locale/ta +#usr/share/locale/ta/LC_MESSAGES +#usr/share/locale/ta/LC_MESSAGES/newt.mo +#usr/share/locale/te +#usr/share/locale/te/LC_MESSAGES +#usr/share/locale/te/LC_MESSAGES/newt.mo +#usr/share/locale/tg +#usr/share/locale/tg/LC_MESSAGES +#usr/share/locale/tg/LC_MESSAGES/newt.mo +#usr/share/locale/th +#usr/share/locale/th/LC_MESSAGES +#usr/share/locale/th/LC_MESSAGES/newt.mo +#usr/share/locale/tl +#usr/share/locale/tl/LC_MESSAGES +#usr/share/locale/tl/LC_MESSAGES/newt.mo +#usr/share/locale/tr/LC_MESSAGES/newt.mo +#usr/share/locale/uk/LC_MESSAGES/newt.mo +#usr/share/locale/vi/LC_MESSAGES/newt.mo +#usr/share/locale/wo +#usr/share/locale/wo/LC_MESSAGES +#usr/share/locale/wo/LC_MESSAGES/newt.mo +#usr/share/locale/xh +#usr/share/locale/xh/LC_MESSAGES +#usr/share/locale/xh/LC_MESSAGES/newt.mo +#usr/share/locale/zh_CN/LC_MESSAGES/newt.mo +#usr/share/locale/zh_TW/LC_MESSAGES/newt.mo +#usr/share/man/man1/whiptail.1 diff --git a/lfs/newt b/lfs/newt index b5c57d0d6..daad9dce9 100644 --- a/lfs/newt +++ b/lfs/newt @@ -24,7 +24,7 @@ include Config -VER = 0.51.6 +VER = 0.52.17 THISAPP = newt-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -38,9 +38,9 @@ TARGET = $(DIR_INFO)/$(THISAPP) objects = $(DL_FILE) -$(DL_FILE) = $(DL_FROM)/$(DL_FILE) +$(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 98567d5a18535e3a926dca5b4527b4a9 +$(DL_FILE)_MD5 = f36d4d908965a0c89fd6fd8b61a6118b install : $(TARGET) @@ -69,13 +69,10 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/newt-0.51.6-if1close.patch - cd $(DIR_APP) && ./configure --without-gpm-support - cd $(DIR_APP) && sed -i 's%^CFLAGS.*$$%CFLAGS = $(CFLAGS) -Wall -D_GNU_SOURCE%' Makefile - cd $(DIR_APP) && make + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && ./configure --prefix=/usr \ + --without-gpm-support --without-tcl + cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install - cd $(DIR_APP) && install -m 0644 newt.h /usr/include - ln -sf libnewt.so.0.51 /usr/lib/libnewt.so @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/patches/newt-0.51.6-if1close.patch b/src/patches/newt-0.51.6-if1close.patch deleted file mode 100644 index 476396fa1..000000000 --- a/src/patches/newt-0.51.6-if1close.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- newt-0.51.6/form.c.orig 2004-10-15 11:17:35.042333181 -0400 -+++ newt-0.51.6/form.c 2004-10-15 11:18:53.428533351 -0400 -@@ -889,6 +889,7 @@ - struct eventResult er; - int key, i, max; - int done = 0; -+ int success; - fd_set readSet, writeSet, exceptSet; - struct timeval nextTimeout, now, timeout; - #ifdef USE_GPM -@@ -902,7 +903,7 @@ - conn.minMod = 0; - conn.maxMod = 0; - -- Gpm_Open(&conn, 0); -+ success = Gpm_Open(&conn, 0); - #endif - - newtFormSetSize(co); -@@ -1062,7 +1063,8 @@ - } - newtRefresh(); - #ifdef USE_GPM -- Gpm_Close(); -+ if (success > 0) -+ Gpm_Close(); - #endif - } - From cc31c6fffb6d337f6b31e895ac4276794feaf6b9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 12:55:26 +0200 Subject: [PATCH 075/297] Rootfile update. --- config/rootfiles/common/cmake | 1 + config/rootfiles/common/installer | 3 +-- config/rootfiles/common/libcap | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/config/rootfiles/common/cmake b/config/rootfiles/common/cmake index 81a953958..069d0c4f6 100644 --- a/config/rootfiles/common/cmake +++ b/config/rootfiles/common/cmake @@ -2,6 +2,7 @@ #usr/bin/cmake #usr/bin/cpack #usr/bin/ctest +#usr/doc #usr/doc/cmake-2.6 #usr/doc/cmake-2.6/ccmake.docbook #usr/doc/cmake-2.6/ccmake.html diff --git a/config/rootfiles/common/installer b/config/rootfiles/common/installer index 2c93f8999..673855318 100644 --- a/config/rootfiles/common/installer +++ b/config/rootfiles/common/installer @@ -1,9 +1,8 @@ #usr/bin/downloadsource.sh #usr/bin/installer -#usr/bin/mountdest.sh -#usr/bin/probenic.sh #usr/lib/dracut/modules.d/99installer #usr/lib/dracut/modules.d/99installer/70-dhcpcd.exe #usr/lib/dracut/modules.d/99installer/fake-root.sh #usr/lib/dracut/modules.d/99installer/module-setup.sh #usr/lib/dracut/modules.d/99installer/run-installer.sh +#usr/share/locale/de/LC_MESSAGES/installer.mo diff --git a/config/rootfiles/common/libcap b/config/rootfiles/common/libcap index 90e236528..f490c89f6 100644 --- a/config/rootfiles/common/libcap +++ b/config/rootfiles/common/libcap @@ -9,7 +9,6 @@ sbin/getcap sbin/getpcaps sbin/setcap #usr/include/sys/capability.h -usr/lib/libnewt.so.0.51 #usr/share/man/man1/capsh.1 #usr/share/man/man3/cap_clear.3 #usr/share/man/man3/cap_clear_flag.3 From 6153b5225e261f159f2c084e787477932175ebf9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 12:59:10 +0200 Subject: [PATCH 076/297] mdadm isn't an add-on any more --- config/rootfiles/common/armv5tel/initscripts | 1 - config/rootfiles/common/i586/initscripts | 1 - config/rootfiles/common/mdadm | 4 ---- lfs/mdadm | 7 ------- 4 files changed, 13 deletions(-) diff --git a/config/rootfiles/common/armv5tel/initscripts b/config/rootfiles/common/armv5tel/initscripts index 5d5c69204..5321a6bce 100644 --- a/config/rootfiles/common/armv5tel/initscripts +++ b/config/rootfiles/common/armv5tel/initscripts @@ -43,7 +43,6 @@ etc/rc.d/init.d/ipsec etc/rc.d/init.d/leds etc/rc.d/init.d/localnet etc/rc.d/init.d/mISDN -#etc/rc.d/init.d/mdadm #etc/rc.d/init.d/mediatomb #etc/rc.d/init.d/messagebus #etc/rc.d/init.d/miau diff --git a/config/rootfiles/common/i586/initscripts b/config/rootfiles/common/i586/initscripts index fa3dbcdb8..7fab7dd4c 100644 --- a/config/rootfiles/common/i586/initscripts +++ b/config/rootfiles/common/i586/initscripts @@ -45,7 +45,6 @@ etc/rc.d/init.d/ipsec etc/rc.d/init.d/leds etc/rc.d/init.d/localnet etc/rc.d/init.d/mISDN -#etc/rc.d/init.d/mdadm #etc/rc.d/init.d/mediatomb #etc/rc.d/init.d/messagebus #etc/rc.d/init.d/miau diff --git a/config/rootfiles/common/mdadm b/config/rootfiles/common/mdadm index d2d87267d..00d38a8c8 100644 --- a/config/rootfiles/common/mdadm +++ b/config/rootfiles/common/mdadm @@ -1,6 +1,3 @@ -etc/rc.d/rc0.d/S85mdadm -etc/rc.d/rc6.d/S75mdadm -etc/rc.d/rcsysinit.d/S11mdadm lib/udev/rules.d/63-md-raid-arrays.rules lib/udev/rules.d/64-md-raid-assembly.rules sbin/mdadm @@ -9,5 +6,4 @@ sbin/mdmon #usr/share/man/man5/mdadm.conf.5 #usr/share/man/man8/mdadm.8 #usr/share/man/man8/mdmon.8 -etc/rc.d/init.d/mdadm srv/web/ipfire/cgi-bin/mdstat.cgi diff --git a/lfs/mdadm b/lfs/mdadm index 46dbf2c2f..2970b004c 100644 --- a/lfs/mdadm +++ b/lfs/mdadm @@ -31,10 +31,6 @@ DL_FILE = $(THISAPP).tar.xz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) -PROG = mdadm -PAK_VER = 2 - -DEPS = "" ############################################################################### # Top-level Rules @@ -80,8 +76,5 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install - ln -sf ../init.d/mdadm /etc/rc.d/rcsysinit.d/S11mdadm - ln -sf ../init.d/mdadm /etc/rc.d/rc0.d/S85mdadm - ln -sf ../init.d/mdadm /etc/rc.d/rc6.d/S75mdadm @rm -rf $(DIR_APP) @$(POSTBUILD) From 02d3ebbd18f560764b24b2bb9e49234b842aa2bc Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 13:40:09 +0200 Subject: [PATCH 077/297] installer: Really include /etc/profile.d --- src/installer/dracut-module/module-setup.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/installer/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh index 545c2cd68..cd8eebe30 100755 --- a/src/installer/dracut-module/module-setup.sh +++ b/src/installer/dracut-module/module-setup.sh @@ -62,7 +62,9 @@ install() { # Bash start files inst_multiple /etc/profile /root/.bash_profile /etc/bashrc /root/.bashrc - inst_dir /etc/profile.d + for file in /etc/profile.d/*.sh; do + inst "${file}" + done inst_hook cmdline 99 "$moddir/fake-root.sh" inst_hook pre-mount 99 "$moddir/run-installer.sh" From 46b56e20308e6c12af9897b01edaa096913f79b2 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 14:07:13 +0200 Subject: [PATCH 078/297] libsmooth+install: Fix output redirection --- src/installer/hw.c | 56 +++++++++++++++++++------------------- src/installer/hw.h | 10 +++---- src/installer/install.h | 2 +- src/installer/main.c | 50 ++++++++++++++++------------------ src/installer/unattended.c | 12 ++++---- src/libsmooth/libsmooth.h | 6 ++-- src/libsmooth/main.c | 42 ++++++++++++---------------- src/setup/dhcp.c | 6 ++-- src/setup/keymap.c | 2 +- src/setup/misc.c | 4 +-- src/setup/netstuff.c | 18 ++++++------ src/setup/networking.c | 6 ++-- src/setup/passwords.c | 4 +-- 13 files changed, 105 insertions(+), 113 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 9e8e13eb2..f29db82f1 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -48,12 +48,12 @@ const char* other_filesystems[] = { NULL }; -static int system_chroot(const char* path, const char* cmd) { +static int system_chroot(const char* output, const char* path, const char* cmd) { char chroot_cmd[STRING_SIZE]; snprintf(chroot_cmd, sizeof(chroot_cmd), "/usr/sbin/chroot %s %s", path, cmd); - return mysystem(chroot_cmd); + return mysystem(output, chroot_cmd); } struct hw* hw_init() { @@ -526,7 +526,7 @@ static int hw_zero_out_device(const char* path, int bytes) { return bytes_written; } -int hw_create_partitions(struct hw_destination* dest) { +int hw_create_partitions(struct hw_destination* dest, const char* output) { // Before we write a new partition table to the disk, we will erase // the first couple of megabytes at the beginning of the device to // get rid of all left other things like bootloaders and partition tables. @@ -597,7 +597,7 @@ int hw_create_partitions(struct hw_destination* dest) { asprintf(&cmd, "%s disk_set pmbr_boot on", cmd); } - r = mysystem(cmd); + r = mysystem(output, cmd); // Wait until the system re-read the partition table if (r == 0) { @@ -632,7 +632,7 @@ int hw_create_partitions(struct hw_destination* dest) { return r; } -static int hw_format_filesystem(const char* path, int fs) { +static int hw_format_filesystem(const char* path, int fs, const char* output) { char cmd[STRING_SIZE] = "\0"; // Swap @@ -657,36 +657,36 @@ static int hw_format_filesystem(const char* path, int fs) { assert(*cmd); - int r = mysystem(cmd); + int r = mysystem(output, cmd); return r; } -int hw_create_filesystems(struct hw_destination* dest) { +int hw_create_filesystems(struct hw_destination* dest, const char* output) { int r; // boot if (*dest->part_boot) { - r = hw_format_filesystem(dest->part_boot, dest->filesystem); + r = hw_format_filesystem(dest->part_boot, dest->filesystem, output); if (r) return r; } // swap if (*dest->part_swap) { - r = hw_format_filesystem(dest->part_swap, HW_FS_SWAP); + r = hw_format_filesystem(dest->part_swap, HW_FS_SWAP, output); if (r) return r; } // root - r = hw_format_filesystem(dest->part_root, dest->filesystem); + r = hw_format_filesystem(dest->part_root, dest->filesystem, output); if (r) return r; // data if (*dest->part_data) { - r = hw_format_filesystem(dest->part_data, dest->filesystem); + r = hw_format_filesystem(dest->part_data, dest->filesystem, output); if (r) return r; } @@ -809,26 +809,26 @@ int hw_umount_filesystems(struct hw_destination* dest, const char* prefix) { return 0; } -static int hw_destroy_raid_superblocks(const struct hw_destination* dest) { +static int hw_destroy_raid_superblocks(const struct hw_destination* dest, const char* output) { char cmd[STRING_SIZE]; - hw_stop_all_raid_arrays(); - hw_stop_all_raid_arrays(); + hw_stop_all_raid_arrays(output); + hw_stop_all_raid_arrays(output); if (dest->disk1) { - snprintf(cmd, sizeof(cmd), "/sbin/mdadm --zero-superblock %s", dest->disk1); - mysystem(cmd); + snprintf(cmd, sizeof(cmd), "/sbin/mdadm --zero-superblock %s", dest->disk1->path); + mysystem(output, cmd); } if (dest->disk2) { - snprintf(cmd, sizeof(cmd), "/sbin/mdadm --zero-superblock %s", dest->disk2); - mysystem(cmd); + snprintf(cmd, sizeof(cmd), "/sbin/mdadm --zero-superblock %s", dest->disk2->path); + mysystem(output, cmd); } return 0; } -int hw_setup_raid(struct hw_destination* dest) { +int hw_setup_raid(struct hw_destination* dest, const char* output) { char* cmd = NULL; int r; @@ -837,7 +837,7 @@ int hw_setup_raid(struct hw_destination* dest) { // Stop all RAID arrays that might be around (again). // It seems that there is some sort of race-condition with udev re-enabling // the raid arrays and therefore locking the disks. - r = hw_destroy_raid_superblocks(dest); + r = hw_destroy_raid_superblocks(dest, output); asprintf(&cmd, "echo \"y\" | /sbin/mdadm --create --verbose --metadata=%s --auto=mdp %s", RAID_METADATA, dest->path); @@ -869,7 +869,7 @@ int hw_setup_raid(struct hw_destination* dest) { return r; } - r = mysystem(cmd); + r = mysystem(output, cmd); free(cmd); // Wait a moment until the device has been properly brought up @@ -892,17 +892,17 @@ int hw_setup_raid(struct hw_destination* dest) { return r; } -int hw_stop_all_raid_arrays() { - return mysystem("/sbin/mdadm --stop --scan --verbose"); +int hw_stop_all_raid_arrays(const char* output) { + return mysystem(output, "/sbin/mdadm --stop --scan --verbose"); } -int hw_install_bootloader(struct hw_destination* dest) { +int hw_install_bootloader(struct hw_destination* dest, const char* output) { char cmd[STRING_SIZE]; int r; // Generate configuration file snprintf(cmd, sizeof(cmd), "/usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg"); - r = system_chroot(DESTINATION_MOUNT_PATH, cmd); + r = system_chroot(output, DESTINATION_MOUNT_PATH, cmd); if (r) return r; @@ -911,15 +911,15 @@ int hw_install_bootloader(struct hw_destination* dest) { if (dest->is_raid) { snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->disk1->path); - r = system_chroot(DESTINATION_MOUNT_PATH, cmd); + r = system_chroot(output, DESTINATION_MOUNT_PATH, cmd); if (r) return r; snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->disk2->path); - r = system_chroot(DESTINATION_MOUNT_PATH, cmd); + r = system_chroot(output, DESTINATION_MOUNT_PATH, cmd); } else { snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->path); - r = system_chroot(DESTINATION_MOUNT_PATH, cmd); + r = system_chroot(output, DESTINATION_MOUNT_PATH, cmd); } return r; diff --git a/src/installer/hw.h b/src/installer/hw.h index 96fc0919b..bfafbe455 100644 --- a/src/installer/hw.h +++ b/src/installer/hw.h @@ -112,16 +112,16 @@ struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks unsigned long long hw_memory(); -int hw_create_partitions(struct hw_destination* dest); -int hw_create_filesystems(struct hw_destination* dest); +int hw_create_partitions(struct hw_destination* dest, const char* output); +int hw_create_filesystems(struct hw_destination* dest, const char* output); int hw_mount_filesystems(struct hw_destination* dest, const char* prefix); int hw_umount_filesystems(struct hw_destination* dest, const char* prefix); -int hw_setup_raid(struct hw_destination* dest); -int hw_stop_all_raid_arrays(); +int hw_setup_raid(struct hw_destination* dest, const char* output); +int hw_stop_all_raid_arrays(const char* output); -int hw_install_bootloader(struct hw_destination* dest); +int hw_install_bootloader(struct hw_destination* dest, const char* output); int hw_write_fstab(struct hw_destination* dest); void hw_sync(); diff --git a/src/installer/install.h b/src/installer/install.h index d21fbdecd..8e5993096 100644 --- a/src/installer/install.h +++ b/src/installer/install.h @@ -11,4 +11,4 @@ #include /* unattended.c */ -int unattended_setup(struct keyvalue *unattendedkv); +int unattended_setup(struct keyvalue *unattendedkv, const char* output); diff --git a/src/installer/main.c b/src/installer/main.c index 77c1d67d7..0415d22e7 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -26,9 +26,6 @@ #define UNATTENDED_CONF "/cdrom/boot/unattended.conf" #define LICENSE_FILE "/cdrom/COPYING" -FILE *flog = NULL; -char *mylog; - extern char url[STRING_SIZE]; static int newtChecklist(const char* title, const char* message, @@ -225,6 +222,7 @@ static struct lang { int main(int argc, char *argv[]) { struct hw* hw = hw_init(); + const char* logfile = NULL; // Read /etc/system-release char* system_release = get_system_release(); @@ -251,16 +249,16 @@ int main(int argc, char *argv[]) { sethostname( SNAME , 10); /* Log file/terminal stuff. */ - if (argc >= 2) - { - if (!(flog = fopen(argv[1], "w+"))) + FILE* flog = NULL; + if (argc >= 2) { + logfile = argv[1]; + + if (!(flog = fopen(logfile, "w+"))) return 0; - } - else + } else { return 0; - - mylog = argv[1]; - + } + fprintf(flog, "Install program started.\n"); newtInit(); @@ -287,7 +285,7 @@ int main(int argc, char *argv[]) { // check if we have to make an unattended install if (strstr (line, "unattended") != NULL) { unattended = 1; - runcommandwithstatus("/bin/sleep 10", title, "WARNING: Unattended installation will start in 10 seconds..."); + runcommandwithstatus("/bin/sleep 10", title, "WARNING: Unattended installation will start in 10 seconds...", NULL); } // check if we have to patch for serial console if (strstr (line, "console=ttyS0") != NULL) { @@ -296,8 +294,8 @@ int main(int argc, char *argv[]) { } // Load common modules - mysystem("/sbin/modprobe vfat"); // USB key - hw_stop_all_raid_arrays(); + mysystem(logfile, "/sbin/modprobe vfat"); // USB key + hw_stop_all_raid_arrays(logfile); if (!unattended) { // Language selection @@ -337,7 +335,7 @@ int main(int argc, char *argv[]) { fprintf(flog, "Source drive: %s\n", sourcedrive); if (!sourcedrive) { newtWinMessage(title, _("OK"), _("No local source media found. Starting download.")); - runcommandwithstatus("/bin/downloadsource.sh", title, _("Downloading installation image ...")); + runcommandwithstatus("/bin/downloadsource.sh", title, _("Downloading installation image ..."), logfile); if ((handle = fopen("/tmp/source_device", "r")) == NULL) { errorbox(_("Download error")); goto EXIT; @@ -533,7 +531,7 @@ int main(int argc, char *argv[]) { if (destination->is_raid) { statuswindow(60, 4, title, _("Building RAID...")); - rc = hw_setup_raid(destination); + rc = hw_setup_raid(destination, logfile); if (rc) { errorbox(_("Unable to build the RAID.")); goto EXIT; @@ -545,7 +543,7 @@ int main(int argc, char *argv[]) { // Execute the partitioning... statuswindow(60, 4, title, _("Partitioning disk...")); - rc = hw_create_partitions(destination); + rc = hw_create_partitions(destination, logfile); if (rc) { errorbox(_("Unable to partition the disk.")); goto EXIT; @@ -556,7 +554,7 @@ int main(int argc, char *argv[]) { // Execute the formatting... statuswindow(60, 4, title, _("Creating filesystems...")); - rc = hw_create_filesystems(destination); + rc = hw_create_filesystems(destination, logfile); if (rc) { errorbox(_("Unable to create filesystems.")); goto EXIT; @@ -575,7 +573,7 @@ int main(int argc, char *argv[]) { "/bin/tar -C /harddisk -xvf /cdrom/distro.img --lzma 2>/dev/null"); if (runcommandwithprogress(60, 4, title, commandstring, INST_FILECOUNT, - _("Installing the system..."))) { + _("Installing the system..."), logfile)) { errorbox(_("Unable to install the system.")); goto EXIT; } @@ -592,7 +590,7 @@ int main(int argc, char *argv[]) { /* Build cache lang file */ snprintf(commandstring, STRING_SIZE, "/usr/sbin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\""); - if (runcommandwithstatus(commandstring, title, _("Installing the language cache..."))) { + if (runcommandwithstatus(commandstring, title, _("Installing the language cache..."), logfile)) { errorbox(_("Unable to install the language cache.")); goto EXIT; } @@ -600,7 +598,7 @@ int main(int argc, char *argv[]) { // Installing bootloader... statuswindow(60, 4, title, _("Installing the bootloader...")); - rc = hw_install_bootloader(destination); + rc = hw_install_bootloader(destination, logfile); if (rc) { errorbox(_("Unable to install the bootloader.")); goto EXIT; @@ -627,21 +625,21 @@ int main(int argc, char *argv[]) { } /* Set marker that the user has already accepted the gpl */ - mysystem("/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted"); + mysystem(logfile, "/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted"); /* Copy restore file from cdrom */ if (unattended && (strlen(restore_file) > 0)) { fprintf(flog, "unattended: Copy restore file\n"); snprintf(commandstring, STRING_SIZE, "cp /cdrom/%s /harddisk/var/ipfire/backup", restore_file); - mysystem(commandstring); + mysystem(logfile, commandstring); } // Umount source drive and eject hw_umount(SOURCE_MOUNT_PATH); snprintf(commandstring, STRING_SIZE, "/usr/bin/eject %s", sourcedrive); - mysystem(commandstring); + mysystem(logfile, commandstring); if (!unattended) { snprintf(message, sizeof(message), _("%s was successfully installed. " @@ -656,7 +654,7 @@ int main(int argc, char *argv[]) { allok = 1; EXIT: - fprintf(flog, "Install program ended.\n"); + fprintf(flog, "Install program ended.\n"); if (!(allok)) newtWinMessage(title, _("OK"), _("Press Ok to reboot.")); @@ -682,7 +680,7 @@ EXIT: free(destination); } - hw_stop_all_raid_arrays(); + hw_stop_all_raid_arrays(logfile); if (selected_disks) hw_free_disks(selected_disks); diff --git a/src/installer/unattended.c b/src/installer/unattended.c index d0267f6d5..dd5388bde 100644 --- a/src/installer/unattended.c +++ b/src/installer/unattended.c @@ -20,9 +20,9 @@ */ #include "install.h" -extern FILE *flog; -int unattended_setup(struct keyvalue *unattendedkv) { +int unattended_setup(struct keyvalue *unattendedkv, const char* output) { + FILE* flog = fopen(output, "w+"); struct keyvalue *mainsettings = initkeyvalues(); struct keyvalue *ethernetkv = initkeyvalues(); @@ -132,7 +132,7 @@ int unattended_setup(struct keyvalue *unattendedkv) { fprintf(flog, "unattended: setting root password\n"); snprintf(commandstring, STRING_SIZE, "/usr/sbin/chroot /harddisk /bin/sh -c \"echo 'root:%s' | /usr/sbin/chpasswd\"", root_password); - if (mysystem(commandstring)) { + if (mysystem(NULL, commandstring)) { errorbox("unattended: ERROR setting root password"); return 0; } @@ -141,7 +141,7 @@ int unattended_setup(struct keyvalue *unattendedkv) { fprintf(flog, "unattended: setting admin password\n"); snprintf(commandstring, STRING_SIZE, "/usr/sbin/chroot /harddisk /usr/sbin/htpasswd -c -m -b " CONFIG_ROOT "/auth/users admin '%s'", admin_password); - if (mysystem(commandstring)) { + if (mysystem(NULL, commandstring)) { errorbox("unattended: ERROR setting admin password"); return 0; } @@ -151,11 +151,13 @@ int unattended_setup(struct keyvalue *unattendedkv) { fprintf(flog, "unattended: Restoring Backup\n"); snprintf(commandstring, STRING_SIZE, "/usr/sbin/chroot /harddisk /bin/tar -xvzp -f /var/ipfire/backup/%s -C /", restore_file); - if (mysystem(commandstring)) { + if (mysystem(NULL, commandstring)) { errorbox("unattended: ERROR restoring backup"); } } fprintf(flog, "unattended: Setup ended\n"); + fclose(flog); + return 1; } diff --git a/src/libsmooth/libsmooth.h b/src/libsmooth/libsmooth.h index 54a4db1a8..d731e548a 100644 --- a/src/libsmooth/libsmooth.h +++ b/src/libsmooth/libsmooth.h @@ -43,15 +43,15 @@ struct keyvalue { /* libsmooth.c */ void stripnl(char *s); -int mysystem(const char *command); +int mysystem(const char* output, const char *command); void errorbox(char *message); int statuswindowscroll(int width, int height, const char *title, const char *text, ...); int disclaimerbox(char *message); void statuswindow(int width, int height, const char *title, const char *text, ...); int runcommandwithprogress(int width, int height, const char *title, const char *command, int lines, char *text, ...); -int runcommandwithstatus(const char *command, const char* title, const char *message); -int runhiddencommandwithstatus(const char *command, const char* title, const char *message); +int runcommandwithstatus(const char *command, const char* title, const char *message, const char* output); +int runhiddencommandwithstatus(const char *command, const char* title, const char *message, const char* output); int checkformodule(const char *module); int replace(char filename1[], char *from, char *to); char* get_version(void); diff --git a/src/libsmooth/main.c b/src/libsmooth/main.c index d9dccbb15..1d2a5002e 100644 --- a/src/libsmooth/main.c +++ b/src/libsmooth/main.c @@ -12,11 +12,6 @@ #include #define _(x) dgettext("libsmooth", x) -extern FILE *flog; -extern char *mylog; - -extern char **ctr; - /* stripnl(). Replaces \n with \0 */ void stripnl(char *s) { char *t = strchr(s, '\n'); @@ -25,11 +20,17 @@ void stripnl(char *s) { } /* Little wrapper. */ -int mysystem(const char *command) { +int mysystem(const char* output, const char *command) { char mycommand[STRING_SIZE]; - snprintf(mycommand, STRING_SIZE, "%s >>%s 2>>%s", command, mylog, mylog); - fprintf(flog, "Running command: %s\n", command); + if (output == NULL) + output = "/dev/null"; + + snprintf(mycommand, sizeof(mycommand), "%s >>%s 2>&1", command, output); + + FILE* f = fopen(output, "w+"); + fprintf(f, "Running command: %s\n", command); + fclose(f); return system(mycommand); } @@ -71,23 +72,19 @@ void statuswindow(int width, int height, const char *title, const char *text, .. newtFormDestroy(f); } -int runcommandwithstatus(const char *command, const char* title, const char *message) { +int runcommandwithstatus(const char *command, const char* title, const char *message, const char* output) { statuswindow(60, 4, title, message); - int rc = mysystem(command); + int rc = mysystem(output, command); newtPopWindow(); return rc; } -int runhiddencommandwithstatus(const char *command, const char* title, const char *message) { +int runhiddencommandwithstatus(const char *command, const char* title, const char *message, const char* output) { statuswindow(60, 4, title, message); - char mycommand[STRING_SIZE]; - snprintf(mycommand, STRING_SIZE, "%s >>%s 2>>%s", command, mylog, mylog); - fprintf(flog, "Running command: ***** HIDDEN *****\n"); - - int rc = system(mycommand); + int rc = mysystem(output, command); newtPopWindow(); return rc; @@ -135,10 +132,7 @@ int runcommandwithprogress(int width, int height, const char *title, const char newtDrawForm(f); newtRefresh(); - - snprintf(mycommand, STRING_SIZE, "%s 2>>%s", command, mylog); - fprintf(flog, "Running command: %s\n", command); - + if (!(p = popen(command, "r"))) { rc = 1; @@ -146,13 +140,11 @@ int runcommandwithprogress(int width, int height, const char *title, const char } setvbuf(p, NULL, _IOLBF, 255); - while (fgets(buffer, STRING_SIZE, p)) - { + while (fgets(buffer, STRING_SIZE, p)) { newtScaleSet(s, ++progress); newtRefresh(); - fprintf(flog, "%s", buffer); } - + rc = pclose(p); EXIT: @@ -169,7 +161,7 @@ int checkformodule(const char *module) { if (!(file = fopen("/proc/modules", "r"))) { - fprintf(flog, "Unable to open /proc/modules in checkformodule()\n"); + fprintf(stderr, "Unable to open /proc/modules in checkformodule()\n"); return 0; } diff --git a/src/setup/dhcp.c b/src/setup/dhcp.c index 4cda9cec9..22f471851 100644 --- a/src/setup/dhcp.c +++ b/src/setup/dhcp.c @@ -209,13 +209,13 @@ int handledhcp(void) replacekeyvalue(dhcpkv, "ENABLE_GREEN", "on"); fclose(fopen(CONFIG_ROOT "/dhcp/enable_green", "w")); chown(CONFIG_ROOT "/dhcp/enable_green", 99, 99); - mysystem("/usr/local/bin/dhcpctrl enable"); + mysystem(NULL, "/usr/local/bin/dhcpctrl enable"); } else { replacekeyvalue(dhcpkv, "ENABLE_GREEN", "off"); unlink(CONFIG_ROOT "/dhcp/enable_green"); - mysystem("/usr/local/bin/dhcpctrl disable"); + mysystem(NULL, "/usr/local/bin/dhcpctrl disable"); } replacekeyvalue(dhcpkv, "VALID", "yes"); writekeyvalues(dhcpkv, CONFIG_ROOT "/dhcp/settings"); @@ -248,7 +248,7 @@ int handledhcp(void) fclose(file); chown(CONFIG_ROOT "/dhcp/dhcpd.conf", 99, 99); if (automode == 0) - mysystem("/usr/local/bin/dhcpctrl enable"); + mysystem(NULL, "/usr/local/bin/dhcpctrl enable"); } result = 1; } diff --git a/src/setup/keymap.c b/src/setup/keymap.c index 1f687d26b..d0030a3bc 100644 --- a/src/setup/keymap.c +++ b/src/setup/keymap.c @@ -92,7 +92,7 @@ int handlekeymap(void) replacekeyvalue(kv, "KEYMAP", keymap); writekeyvalues(kv, CONFIG_ROOT "/main/settings"); sprintf(commandstring, "/bin/loadkeys %s", keymap); - mysystem(commandstring); + mysystem(NULL, commandstring); result = 1; } else diff --git a/src/setup/misc.c b/src/setup/misc.c index 2a9f1312f..3b258e0f1 100644 --- a/src/setup/misc.c +++ b/src/setup/misc.c @@ -131,7 +131,7 @@ int writehostsfiles(void) fclose(file); sprintf(commandstring, "/bin/hostname %s.%s", hostname, domainname); - if (mysystem(commandstring)) + if (mysystem(NULL, commandstring)) { errorbox(_("Unable to set hostname.")); return 0; @@ -144,7 +144,7 @@ int handleisdn(void) { char command[STRING_SIZE]; sprintf(command, "/etc/rc.d/init.d/mISDN config"); - if (runcommandwithstatus(command, _("ISDN"), _("Scanning and configuring ISDN devices."))) + if (runcommandwithstatus(command, _("ISDN"), _("Scanning and configuring ISDN devices."), NULL)) errorbox(_("Unable to scan for ISDN devices.")); // Need to write some lines that count the cards and say the names... return 1; diff --git a/src/setup/netstuff.c b/src/setup/netstuff.c index 08d144eac..a656e9f91 100644 --- a/src/setup/netstuff.c +++ b/src/setup/netstuff.c @@ -422,7 +422,7 @@ int is_interface_up(char *card) { /* Check if the interface is UP */ char temp[STRING_SIZE]; sprintf(temp,"ip link show dev %s | grep -q UP", card); - if (mysystem(temp)) return 0; else return 1; + if (mysystem(NULL, temp)) return 0; else return 1; } int rename_device(char *old_name, char *new_name) { @@ -434,7 +434,7 @@ int rename_device(char *old_name, char *new_name) { return 0; } sprintf(temp,"/sbin/ip link set dev %s name %s",old_name ,new_name ); - mysystem(temp); + mysystem(NULL, temp); return 1; } @@ -486,14 +486,14 @@ int nic_shutdown(char *nic) { char temp[STRING_SIZE]; sprintf(temp,"ip link set %s down", nic); - mysystem(temp); + mysystem(NULL, temp); } int nic_startup(char *nic) { char temp[STRING_SIZE]; sprintf(temp,"ip link set %s up", nic); - mysystem(temp); + mysystem(NULL, temp); } @@ -594,7 +594,7 @@ int scan_network_cards(void) if (!(scanned_nics_read_done)) { - mysystem("/usr/bin/probenic.sh"); + mysystem(NULL, "/usr/bin/probenic.sh"); if( (fp = fopen(SCANNED_NICS, "r")) == NULL ) { fprintf(stderr,"Couldn't open "SCANNED_NICS); @@ -673,12 +673,12 @@ int nicmenu(int colour) _("Select"), _("Identify"), _("Cancel"), NULL); if ( rc == 2 ) { sprintf(temp, "/sbin/ip link set %s up", nics[found_NIC_as_Card[choise]].nic); - mysystem(temp); + mysystem(NULL, temp); sprintf(temp, "/usr/sbin/ethtool -p %s 10", nics[found_NIC_as_Card[choise]].nic); - if (runcommandwithstatus(temp, _("Device Identification"), _("The lights on the selected port should flash now for 10 seconds...")) != 0) { + if (runcommandwithstatus(temp, _("Device Identification"), _("The lights on the selected port should flash now for 10 seconds..."), NULL) != 0) { errorbox(_("Identification is not supported by this interface.")); sprintf(temp, "/sbin/ip link set %s down", nics[found_NIC_as_Card[choise]].nic); - mysystem(temp); + mysystem(NULL, temp); } } } @@ -759,7 +759,7 @@ int manualdriver(char *driver, char *driveroptions) if (strlen(values[0])) { sprintf(commandstring, "/sbin/modprobe %s", values[0]); - if (runcommandwithstatus(commandstring, _("Loading module..."), _("Loading module...")) == 0) + if (runcommandwithstatus(commandstring, _("Loading module..."), _("Loading module..."), NULL) == 0) { if ((driverend = strchr(values[0], ' '))) { diff --git a/src/setup/networking.c b/src/setup/networking.c index 169a40719..1b5b77d8d 100644 --- a/src/setup/networking.c +++ b/src/setup/networking.c @@ -107,12 +107,12 @@ int handlenetworking(void) if (netaddresschange) { runcommandwithstatus("/etc/rc.d/init.d/network stop", - _("Networking"), _("Stopping network...")); + _("Networking"), _("Stopping network..."), NULL); rename_nics(); runcommandwithstatus("/etc/rc.d/init.d/network start", - _("Networking"), _("Restarting network...")); + _("Networking"), _("Restarting network..."), NULL); } } else { rename_nics(); @@ -445,7 +445,7 @@ int changedrivers(void) } if (automode == 0) runcommandwithstatus("/etc/rc.d/init.d/network stop red blue orange", - _("Networking"), _("Restarting non-local network...")); + _("Networking"), _("Restarting non-local network..."), NULL); findkey(kv, "CONFIG_TYPE", temp); configtype = atol(temp); if (configtype == 1) diff --git a/src/setup/passwords.c b/src/setup/passwords.c index 5b21a9795..69f35529f 100644 --- a/src/setup/passwords.c +++ b/src/setup/passwords.c @@ -35,7 +35,7 @@ int handlerootpassword(void) snprintf(commandstring, STRING_SIZE, "/bin/echo 'root:%s' | /usr/sbin/chpasswd", password); - if (runhiddencommandwithstatus(commandstring, _("Setting password"), _("Setting 'root' password...."))) { + if (runhiddencommandwithstatus(commandstring, _("Setting password"), _("Setting 'root' password...."), NULL)) { errorbox(_("Problem setting 'root' password.")); return 0; } @@ -58,7 +58,7 @@ int handleadminpassword(void) snprintf(commandstring, STRING_SIZE, "/usr/sbin/htpasswd -c -m -b " CONFIG_ROOT "/auth/users admin '%s'", password); sprintf(message, _("Setting %s 'admin' user password..."), NAME); - if (runhiddencommandwithstatus(commandstring, _("Setting password"), message)) { + if (runhiddencommandwithstatus(commandstring, _("Setting password"), message, NULL)) { sprintf(message, _("Problem setting %s 'admin' user password."), NAME); errorbox(message); return 0; From 687fc4a9c0c101882927add37df376130f472b96 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 14:07:44 +0200 Subject: [PATCH 079/297] firstsetup: Fix path to setup --- src/initscripts/init.d/firstsetup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/initscripts/init.d/firstsetup b/src/initscripts/init.d/firstsetup index 32236e6cd..dca3e4016 100644 --- a/src/initscripts/init.d/firstsetup +++ b/src/initscripts/init.d/firstsetup @@ -28,7 +28,7 @@ ser_console $cmdline # /etc/init.d/sysklogd start export LANG=en_US.utf8 -/usr/local/sbin/setup /dev/tty2 INSTALL +/usr/sbin/setup /dev/tty2 INSTALL if [ "${?}" == "1" ]; then echo Setup not finished. Rebooting ... reboot -f From 2d38ca795ad984084f725d15316ae2bf1c5c1a6e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 14:21:55 +0200 Subject: [PATCH 080/297] cdrom: Strip all binaries put into the installer ramdisk --- lfs/cdrom | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lfs/cdrom b/lfs/cdrom index 1d9af4278..7a569a0ca 100644 --- a/lfs/cdrom +++ b/lfs/cdrom @@ -95,7 +95,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) dd if=/dev/zero bs=1k count=2 > /install/cdrom/boot/isolinux/boot.catalog ifneq "$(MACHINE_TYPE)" "arm" cp /boot/vmlinuz-$(KVER)-ipfire /install/cdrom/boot/isolinux/vmlinuz - dracut --force -a "installer" --xz /install/cdrom/boot/isolinux/instroot $(KVER)-ipfire + dracut --force -a "installer" --strip --xz /install/cdrom/boot/isolinux/instroot $(KVER)-ipfire cp $(DIR_SRC)/config/syslinux/boot.png /install/cdrom/boot/isolinux/boot.png cp /usr/lib/memtest86+/memtest.bin /install/cdrom/boot/isolinux/memtest cp /usr/share/ipfire-netboot/ipxe.lkrn /install/cdrom/boot/isolinux/netboot From d04d4d586bc45de3bec4a72b778e2e5951a9ab5b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 14:22:39 +0200 Subject: [PATCH 081/297] installer: Use full locale strings for locale selection --- src/installer/main.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index 0415d22e7..8ff569685 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -209,14 +209,14 @@ static struct lang { const char* code; char* name; } languages[NUM_LANGS + 1] = { - { "nl", "Dutch (Nederlands)" }, - { "en", "English" }, - { "fr", "French (Français)" }, - { "de", "German (Deutsch)" }, - { "pl", "Polish (Polski)" }, - { "ru", "Russian (Русский)" }, - { "es", "Spanish (Español)" }, - { "tr", "Turkish (Türkçe)" }, + { "nl_NL.utf8", "Dutch (Nederlands)" }, + { "en_US.utf8", "English" }, + { "fr_FR.utf8", "French (Français)" }, + { "de_DE.utf8", "German (Deutsch)" }, + { "pl_PL.utf8", "Polish (Polski)" }, + { "ru_RU.utf8", "Russian (Русский)" }, + { "es_ES.utf8", "Spanish (Español)" }, + { "tr_TR.utf8", "Turkish (Türkçe)" }, { NULL, NULL }, }; @@ -315,6 +315,8 @@ int main(int argc, char *argv[]) { assert(choice <= NUM_LANGS); fprintf(flog, "Selected language: %s (%s)\n", languages[choice].name, languages[choice].code); + + setenv("LANGUAGE", languages[choice].code, 1); setlocale(LC_ALL, languages[choice].code); } From ae5edf161276252c8dc9cb9a3fe2548343cfb5f7 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 14 Aug 2014 15:19:42 +0200 Subject: [PATCH 082/297] installer: Pretify the interface a little bit --- lfs/installer | 2 ++ src/installer/main.c | 31 ++++++++++++++----------------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/lfs/installer b/lfs/installer index 86862b8bc..7f73222c1 100644 --- a/lfs/installer +++ b/lfs/installer @@ -30,6 +30,8 @@ THISAPP = installer DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) +SLOGAN = An Open Source Firewall Solution + ############################################################################### # Top-level Rules ############################################################################### diff --git a/src/installer/main.c b/src/installer/main.c index 8ff569685..c5adb0adf 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -274,7 +274,7 @@ int main(int argc, char *argv[]) { char* roottext = center_string(system_release, screen_cols); newtDrawRootText(0, 0, roottext); - sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN); + snprintf(title, sizeof(title), "%s - %s", NAME, SLOGAN); if (! (cmdfile = fopen("/proc/cmdline", "r"))) { @@ -325,7 +325,7 @@ int main(int argc, char *argv[]) { if (!unattended) { snprintf(message, sizeof(message), - _("Welcome to the %s installation program. " + _("Welcome to the %s installation program.\n\n" "Selecting Cancel on any of the following screens will reboot the computer."), NAME); newtWinMessage(title, _("Start installation"), message); } @@ -373,7 +373,7 @@ int main(int argc, char *argv[]) { fread(discl_msg, 1, 40000, copying); fclose(copying); - if (newtLicenseBox(title, discl_msg, 75, 20)) { + if (newtLicenseBox(_("License Agreement"), discl_msg, 75, 20)) { errorbox(_("License not accepted!")); goto EXIT; @@ -491,7 +491,7 @@ int main(int argc, char *argv[]) { // Warn the user if there is not enough space to create a swap partition if (!unattended && !*destination->part_swap) { rc = newtWinChoice(title, _("OK"), _("Cancel"), - _("Your harddisk is very small, but you can continue with an very small swap. (Use with caution).")); + _("Your harddisk is very small, but you can continue without a swap partition.")); if (rc != 1) goto EXIT; @@ -644,12 +644,12 @@ int main(int argc, char *argv[]) { mysystem(logfile, commandstring); if (!unattended) { - snprintf(message, sizeof(message), _("%s was successfully installed. " - "Please remove any installation mediums from this system. " - "Setup will now run where you may configure networking and the system passwords. " - "After Setup has been completed, you should point your web browser at https://%s:444 " - "(or whatever you name your %s), and configure dialup networking (if required) and " - "remote access."), NAME, SNAME, NAME); + snprintf(message, sizeof(message), _( + "%s was successfully installed!\n\n" + "Please remove any installation mediums from this system and hit the reboot button. " + "Once the system has restarted you will be asked to setup networking and system passwords. " + "After that, you should point your web browser at https://%s:444 (or what ever you name " + "your %s) for the web configuration console."), NAME, SNAME, NAME); newtWinMessage(_("Congratulations!"), _("Reboot"), message); } @@ -657,14 +657,11 @@ int main(int argc, char *argv[]) { EXIT: fprintf(flog, "Install program ended.\n"); + fflush(flog); + fclose(flog); - if (!(allok)) - newtWinMessage(title, _("OK"), _("Press Ok to reboot.")); - - if (allok) { - fflush(flog); - fclose(flog); - } + if (!allok) + newtWinMessage(title, _("OK"), _("Setup has failed. Press Ok to reboot.")); newtFinished(); From 0239bcec1f6bb4a7209f28c743a8ec946930b725 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 14 Aug 2014 16:28:30 +0200 Subject: [PATCH 083/297] kernel: update to 3.10.53. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index d2c9f8317..1b1acafcf 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.52 +VER = 3.10.53 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.52-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.53-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 7583dad19efc7e3153fafe43f1022245 +$(DL_FILE)_MD5 = 1bb2dfbc4b5813056bbb8f7f7fec3882 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = b73279bfc45be304cf065c402e4ec0b2 +$(GRS_PATCHES)_MD5 = 4aaba741f250480fad4db7b1d5cef6a4 install : $(TARGET) From ddd32a5cd387bb029553403fe12904a975cf20c5 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 20 Aug 2014 21:16:25 +0200 Subject: [PATCH 084/297] installer: Make umounting more reliable --- src/installer/hw.c | 3 +++ src/installer/main.c | 15 ++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index f29db82f1..0e65ae969 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -779,6 +779,9 @@ int hw_mount_filesystems(struct hw_destination* dest, const char* prefix) { } int hw_umount_filesystems(struct hw_destination* dest, const char* prefix) { + // Write all buffers to disk before umounting + hw_sync(); + // boot if (*dest->part_boot) { hw_umount(dest->part_boot); diff --git a/src/installer/main.c b/src/installer/main.c index c5adb0adf..313b35180 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -637,6 +637,13 @@ int main(int argc, char *argv[]) { mysystem(logfile, commandstring); } + // Umount the destination drive + hw_umount_filesystems(destination, DESTINATION_MOUNT_PATH); + + // Stop the RAID array if we are using RAID + if (destination->is_raid) + hw_stop_all_raid_arrays(logfile); + // Umount source drive and eject hw_umount(SOURCE_MOUNT_PATH); @@ -671,13 +678,7 @@ EXIT: free(helpline); free(sourcedrive); - - if (destination) { - hw_sync(); - - hw_umount_filesystems(destination, DESTINATION_MOUNT_PATH); - free(destination); - } + free(destination); hw_stop_all_raid_arrays(logfile); From 2d01ecf5bf865eb94840879e73e546e45ae203f0 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 20 Aug 2014 21:25:11 +0200 Subject: [PATCH 085/297] make.sh: Build libsmooth after newt --- make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make.sh b/make.sh index 2fe99bb3b..3791aa1e8 100755 --- a/make.sh +++ b/make.sh @@ -383,7 +383,6 @@ buildipfire() { LOGFILE="$BASEDIR/log/_build.ipfire.log" export LOGFILE ipfiremake configroot - ipfiremake libsmooth ipfiremake backup ipfiremake bind ipfiremake dhcp @@ -487,6 +486,7 @@ buildipfire() { ipfiremake pcre ipfiremake slang ipfiremake newt + ipfiremake libsmooth ipfiremake attr ipfiremake acl ipfiremake libcap From 9f572d6609777ac52f74100e55608d6a6fc6597d Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 20 Aug 2014 21:25:24 +0200 Subject: [PATCH 086/297] make.sh: Build mdadm before dracut --- make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make.sh b/make.sh index 3791aa1e8..869a6efd5 100755 --- a/make.sh +++ b/make.sh @@ -401,6 +401,7 @@ buildipfire() { ipfiremake bc ipfiremake u-boot ipfiremake cpio + ipfiremake mdadm ipfiremake dracut case "${TARGET_ARCH}" in @@ -740,7 +741,6 @@ buildipfire() { ipfiremake usb_modeswitch ipfiremake usb_modeswitch_data ipfiremake zerofree - ipfiremake mdadm ipfiremake pound ipfiremake minicom ipfiremake ddrescue From a4d36b4a3f3f8cdab5f83c91114091721d9e050b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 20 Aug 2014 21:42:49 +0200 Subject: [PATCH 087/297] dracut: Update dracut.conf --- config/rootfiles/common/dracut | 1 - lfs/dracut | 2 +- src/dracut/dracut.conf | 39 ++++++++++++++++++++++++++++------ 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/config/rootfiles/common/dracut b/config/rootfiles/common/dracut index 2192763be..e2b9162fe 100644 --- a/config/rootfiles/common/dracut +++ b/config/rootfiles/common/dracut @@ -1,6 +1,5 @@ etc/dracut.conf etc/dracut.conf.d -#etc/dracut.conf.d/dracut.conf usr/bin/dracut usr/bin/dracut-catimages #usr/bin/lsinitrd diff --git a/lfs/dracut b/lfs/dracut index 397b63c94..95e8e3ab6 100644 --- a/lfs/dracut +++ b/lfs/dracut @@ -76,7 +76,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) rm -rf /usr/lib/dracut/modules.d/*{bootchart,dash,fips*,modsign,busybox,convertfs,network,ifcfg,url-lib,gensplash,cms,plymouth,btrfs,crypt*,dm,dmraid,dmsquash-live,livenet,lvm,multipath,qemu*,cifs,dasd*,fcoe*,iscsi,nbd,nfs,resume,ssh-client,zfcp*,systemd*,znet,securityfs,masterkey,selinux,usrmount,uefi-lib} - cp -vf $(DIR_SRC)/src/dracut/dracut.conf /etc/dracut.conf.d/ + cp -vf $(DIR_SRC)/src/dracut/dracut.conf /etc/dracut.conf @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/dracut/dracut.conf b/src/dracut/dracut.conf index b671b7a97..34e6a667d 100644 --- a/src/dracut/dracut.conf +++ b/src/dracut/dracut.conf @@ -1,26 +1,51 @@ -# dracut config file +# PUT YOUR CONFIG HERE OR IN separate files named *.conf +# in /etc/dracut.conf.d +# SEE man dracut.conf(5) -# Specific list of dracut modules to use +# Sample dracut config file + +#logfile=/var/log/dracut.log +#fileloglvl=6 + +# Exact list of dracut modules to use. Modules not listed here are not going +# to be included. If you only want to add some optional modules use +# add_dracutmodules option instead. #dracutmodules+="" -# Dracut modules to omit +# dracut modules to omit #omit_dracutmodules+="" -# Dracut modules to add to the default +# dracut modules to add to the default #add_dracutmodules+="" # additional kernel modules to the default #add_drivers+="" # list of kernel filesystem modules to be included in the generic initramfs -filesystems+="ext2 ext3 ext4 reiserfs reiser4 iso9660 vfat" +filesystems+="reiserfs vfat xfs" # build initrd only to boot current hardware #hostonly="yes" # # install local /etc/mdadm.conf -mdadmconf="no" +#mdadmconf="no" # install local /etc/lvm/lvm.conf -lvmconf="no" +#lvmconf="no" + +# A list of fsck tools to install. If it's not specified, module's hardcoded +# default is used, currently: "umount mount /sbin/fsck* xfs_db xfs_check +# xfs_repair e2fsck jfs_fsck reiserfsck btrfsck". The installation is +# opportunistic, so non-existing tools are just ignored. +#fscks="" + +# inhibit installation of any fsck tools +#nofscks="yes" + +# mount / and /usr read-only by default +#ro_mnt="no" + +# set the directory for temporary files +# default: /var/tmp +#tmpdir=/tmp From fd3b60d89e24a60d89cfd9153ceedaac0d959f6c Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 20 Aug 2014 21:43:17 +0200 Subject: [PATCH 088/297] dracut: Remove switch_root.c --- src/dracut/switch_root.c | 188 --------------------------------------- 1 file changed, 188 deletions(-) delete mode 100644 src/dracut/switch_root.c diff --git a/src/dracut/switch_root.c b/src/dracut/switch_root.c deleted file mode 100644 index 152038723..000000000 --- a/src/dracut/switch_root.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - * switchroot.c - switch to new root directory and start init. - * - * Copyright 2002-2008 Red Hat, Inc. All rights reserved. - * - * 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, see . - * - * Authors: - * Peter Jones - * Jeremy Katz - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef MS_MOVE -#define MS_MOVE 8192 -#endif - -enum { - ok, - err_no_directory, - err_usage, -}; - -/* remove all files/directories below dirName -- don't cross mountpoints */ -static int -recursiveRemove(char * dirName) -{ - struct stat sb,rb; - DIR * dir; - struct dirent * d; - char * strBuf = alloca(strlen(dirName) + 1024); - - if (!(dir = opendir(dirName))) { - printf("error opening %s: %m\n", dirName); - return 0; - } - - if (fstat(dirfd(dir),&rb)) { - printf("unable to stat %s: %m\n", dirName); - closedir(dir); - return 0; - } - - errno = 0; - - while ((d = readdir(dir))) { - errno = 0; - - if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, "..")) { - errno = 0; - continue; - } - - strcpy(strBuf, dirName); - strcat(strBuf, "/"); - strcat(strBuf, d->d_name); - - if (lstat(strBuf, &sb)) { - printf("failed to stat %s: %m\n", strBuf); - errno = 0; - continue; - } - - /* only descend into subdirectories if device is same as dir */ - if (S_ISDIR(sb.st_mode)) { - if (sb.st_dev == rb.st_dev) { - recursiveRemove(strBuf); - if (rmdir(strBuf)) - printf("failed to rmdir %s: %m\n", strBuf); - } - errno = 0; - continue; - } - if (unlink(strBuf)) { - printf("failed to remove %s: %m\n", strBuf); - errno = 0; - continue; - } - } - - if (errno) { - closedir(dir); - printf("error reading from %s: %m\n", dirName); - return 1; - } - - closedir(dir); - return 0; -} - -static int switchroot(const char *newroot) -{ - /* Don't try to unmount the old "/", there's no way to do it. */ - const char *umounts[] = { "/dev", "/proc", "/sys", NULL }; - int errnum; - int i; - - for (i = 0; umounts[i] != NULL; i++) { - char newmount[PATH_MAX]; - strcpy(newmount, newroot); - strcat(newmount, umounts[i]); - if (mount(umounts[i], newmount, NULL, MS_MOVE, NULL) < 0) { - fprintf(stderr, "Error mount moving old %s %s %m\n", - umounts[i], newmount); - fprintf(stderr, "Forcing unmount of %s\n", umounts[i]); - umount2(umounts[i], MNT_FORCE); - } - } - - if (chdir(newroot) < 0) { - errnum=errno; - fprintf(stderr, "switchroot: chdir failed: %m\n"); - errno=errnum; - return -1; - } - recursiveRemove("/"); - if (mount(newroot, "/", NULL, MS_MOVE, NULL) < 0) { - errnum = errno; - fprintf(stderr, "switchroot: mount failed: %m\n"); - errno = errnum; - return -1; - } - - if (chroot(".")) { - errnum = errno; - fprintf(stderr, "switchroot: chroot failed: %m\n"); - errno = errnum; - return -2; - } - return 1; -} - -static void usage(FILE *output) -{ - fprintf(output, "usage: switchroot \n"); - if (output == stderr) - exit(err_usage); - exit(ok); -} - -int main(int argc, char *argv[]) -{ - char *newroot = argv[1]; - char *init = argv[2]; - char **initargs = &argv[2]; - - if (newroot == NULL || newroot[0] == '\0' || - init == NULL || init[0] == '\0' ) { - usage(stderr); - } - - if (switchroot(newroot) < 0) { - fprintf(stderr, "switchroot has failed. Sorry.\n"); - return 1; - } - if (access(initargs[0], X_OK)) - fprintf(stderr, "WARNING: can't access %s\n", initargs[0]); - - /* get session leader */ - setsid(); - /* set controlling terminal */ - ioctl (0, TIOCSCTTY, 1); - - execv(initargs[0], initargs); -} - From 69ce343fcbcde18e26656cfd73bdec70da0b58a2 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 20 Aug 2014 21:44:47 +0200 Subject: [PATCH 089/297] dracut: Move configuration into right directory --- {src => config}/dracut/dracut.conf | 0 lfs/dracut | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename {src => config}/dracut/dracut.conf (100%) diff --git a/src/dracut/dracut.conf b/config/dracut/dracut.conf similarity index 100% rename from src/dracut/dracut.conf rename to config/dracut/dracut.conf diff --git a/lfs/dracut b/lfs/dracut index 95e8e3ab6..e03a02103 100644 --- a/lfs/dracut +++ b/lfs/dracut @@ -76,7 +76,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) rm -rf /usr/lib/dracut/modules.d/*{bootchart,dash,fips*,modsign,busybox,convertfs,network,ifcfg,url-lib,gensplash,cms,plymouth,btrfs,crypt*,dm,dmraid,dmsquash-live,livenet,lvm,multipath,qemu*,cifs,dasd*,fcoe*,iscsi,nbd,nfs,resume,ssh-client,zfcp*,systemd*,znet,securityfs,masterkey,selinux,usrmount,uefi-lib} - cp -vf $(DIR_SRC)/src/dracut/dracut.conf /etc/dracut.conf + cp -vf $(DIR_SRC)/config/dracut/dracut.conf /etc/dracut.conf @rm -rf $(DIR_APP) @$(POSTBUILD) From 8cd364b41c954027cd36c6ef837143cde01376da Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 20 Aug 2014 21:45:12 +0200 Subject: [PATCH 090/297] Rootfile update --- config/rootfiles/common/libsmooth | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 config/rootfiles/common/libsmooth diff --git a/config/rootfiles/common/libsmooth b/config/rootfiles/common/libsmooth new file mode 100644 index 000000000..8064831ae --- /dev/null +++ b/config/rootfiles/common/libsmooth @@ -0,0 +1,6 @@ +#usr/include/libsmooth.h +#usr/lib/libsmooth.la +#usr/lib/libsmooth.so +usr/lib/libsmooth.so.1 +usr/lib/libsmooth.so.1.0.0 +#usr/lib/pkgconfig/libsmooth.pc From 37565060056e1b1eec786f96f4f8f03009511a42 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 10:46:34 +0200 Subject: [PATCH 091/297] initscripts: Remove old firewall-reload symlink --- lfs/initscripts | 1 - 1 file changed, 1 deletion(-) diff --git a/lfs/initscripts b/lfs/initscripts index ab870dc77..4acf65e13 100644 --- a/lfs/initscripts +++ b/lfs/initscripts @@ -180,7 +180,6 @@ $(TARGET) : ln -sf ../init.d/wlanclient /etc/rc.d/rc6.d/K82wlanclient ln -sf ../../dnsmasq /etc/rc.d/init.d/networking/red.up/05-RS-dnsmasq - ln -sf ../../firewall /etc/rc.d/init.d/networking/red.up/20-RL-firewall ln -sf ../../../../../usr/local/bin/snortctrl \ /etc/rc.d/init.d/networking/red.up/23-RS-snort ln -sf ../../../../../usr/local/bin/qosctrl \ From adf657dbd83da0c8e16dbe053f6400240ac9778c Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 10:47:11 +0200 Subject: [PATCH 092/297] Rootfile update --- config/rootfiles/packages/owncloud | 12 ++++++------ config/rootfiles/packages/squid-accounting | 9 +++++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/config/rootfiles/packages/owncloud b/config/rootfiles/packages/owncloud index acfb40d6c..fed3b09c4 100644 --- a/config/rootfiles/packages/owncloud +++ b/config/rootfiles/packages/owncloud @@ -9944,14 +9944,14 @@ srv/web/owncloud #srv/web/owncloud/core/img/favicon.png #srv/web/owncloud/core/img/favicon.svg #srv/web/owncloud/core/img/filetypes -#srv/web/owncloud/core/img/filetypes/application-epub#zip.png -#srv/web/owncloud/core/img/filetypes/application-epub#zip.svg +#srv/web/owncloud/core/img/filetypes/application-epub+zip.png +#srv/web/owncloud/core/img/filetypes/application-epub+zip.svg #srv/web/owncloud/core/img/filetypes/application-javascript.png #srv/web/owncloud/core/img/filetypes/application-javascript.svg #srv/web/owncloud/core/img/filetypes/application-pdf.png #srv/web/owncloud/core/img/filetypes/application-pdf.svg -#srv/web/owncloud/core/img/filetypes/application-rss#xml.png -#srv/web/owncloud/core/img/filetypes/application-rss#xml.svg +#srv/web/owncloud/core/img/filetypes/application-rss+xml.png +#srv/web/owncloud/core/img/filetypes/application-rss+xml.svg #srv/web/owncloud/core/img/filetypes/application-x-cbr.png #srv/web/owncloud/core/img/filetypes/application-x-cbr.svg #srv/web/owncloud/core/img/filetypes/application-x-shockwave-flash.png @@ -9976,8 +9976,8 @@ srv/web/owncloud #srv/web/owncloud/core/img/filetypes/folder.svg #srv/web/owncloud/core/img/filetypes/font.png #srv/web/owncloud/core/img/filetypes/font.svg -#srv/web/owncloud/core/img/filetypes/image-svg#xml.png -#srv/web/owncloud/core/img/filetypes/image-svg#xml.svg +#srv/web/owncloud/core/img/filetypes/image-svg+xml.png +#srv/web/owncloud/core/img/filetypes/image-svg+xml.svg #srv/web/owncloud/core/img/filetypes/image.png #srv/web/owncloud/core/img/filetypes/image.svg #srv/web/owncloud/core/img/filetypes/package-x-generic.png diff --git a/config/rootfiles/packages/squid-accounting b/config/rootfiles/packages/squid-accounting index 73a75ef60..29d09a1e7 100644 --- a/config/rootfiles/packages/squid-accounting +++ b/config/rootfiles/packages/squid-accounting @@ -1,13 +1,14 @@ etc/fcron.hourly/squid-accounting -var/log/accounting.log srv/web/ipfire/cgi-bin/accounting.cgi +#srv/web/ipfire/html/accounting srv/web/ipfire/html/accounting/logo usr/local/bin/acct.pl var/ipfire/accounting -var/ipfire/accounting/dbinstall.pl -var/ipfire/accounting/bill var/ipfire/accounting/acct-lib.pl +var/ipfire/accounting/bill +var/ipfire/accounting/dbinstall.pl var/ipfire/addon-lang/acct.de.pl var/ipfire/addon-lang/acct.en.pl -var/ipfire/menu.d/EX-squid-accounting.menu var/ipfire/backup/addons/includes/squid-accounting +var/ipfire/menu.d/EX-squid-accounting.menu +var/log/accounting.log From 33b3e591e08e80ea01b0ebefef56c0f6b148f25b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 10:58:30 +0200 Subject: [PATCH 093/297] xfsprogs is not a package any more --- config/rootfiles/{packages => common}/xfsprogs | 2 +- lfs/xfsprogs | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) rename config/rootfiles/{packages => common}/xfsprogs (98%) diff --git a/config/rootfiles/packages/xfsprogs b/config/rootfiles/common/xfsprogs similarity index 98% rename from config/rootfiles/packages/xfsprogs rename to config/rootfiles/common/xfsprogs index ea3e18f71..4c445341b 100644 --- a/config/rootfiles/packages/xfsprogs +++ b/config/rootfiles/common/xfsprogs @@ -4,7 +4,7 @@ sbin/fsck.xfs sbin/mkfs.xfs sbin/xfs_repair #usr/lib/libhandle.la -usr/lib/libhandle.so +#usr/lib/libhandle.so usr/sbin/xfs_admin usr/sbin/xfs_bmap usr/sbin/xfs_check diff --git a/lfs/xfsprogs b/lfs/xfsprogs index 2a548be83..9c3239ea4 100644 --- a/lfs/xfsprogs +++ b/lfs/xfsprogs @@ -31,10 +31,6 @@ DL_FILE = xfsprogs_$(VER)-1.tar.gz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) -PROG = xfsprogs -PAK_VER = 1 - -DEPS = "" ############################################################################### # Top-level Rules From 5a3b3718fba330f4d5d31fb782e1e6ca4d60d876 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 11:20:57 +0200 Subject: [PATCH 094/297] installer: Fix showing selected disks --- src/installer/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installer/main.c b/src/installer/main.c index 313b35180..bb73fc24c 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -451,7 +451,7 @@ int main(int argc, char *argv[]) { } else if (num_selected_disks == 2) { snprintf(message, sizeof(message), _("The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\n" - "Do you agree to continue?"), (*selected_disks)->description, (*selected_disks + 1)->description); + "Do you agree to continue?"), selected_disks[0]->description, selected_disks[1]->description); rc = newtWinOkCancel(_("RAID Setup"), message, 50, 14, _("Delete all data"), _("Cancel")); From 72407b49d0184756c5374d8407617abf64d5adf6 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 11:22:37 +0200 Subject: [PATCH 095/297] dracut: Remove biosdevname module --- config/rootfiles/common/dracut | 3 --- lfs/dracut | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/config/rootfiles/common/dracut b/config/rootfiles/common/dracut index e2b9162fe..89c03a729 100644 --- a/config/rootfiles/common/dracut +++ b/config/rootfiles/common/dracut @@ -73,9 +73,6 @@ usr/lib/dracut #usr/lib/dracut/modules.d/95virtfs/module-setup.sh #usr/lib/dracut/modules.d/95virtfs/mount-virtfs.sh #usr/lib/dracut/modules.d/95virtfs/parse-virtfs.sh -#usr/lib/dracut/modules.d/97biosdevname -#usr/lib/dracut/modules.d/97biosdevname/module-setup.sh -#usr/lib/dracut/modules.d/97biosdevname/parse-biosdevname.sh #usr/lib/dracut/modules.d/98integrity #usr/lib/dracut/modules.d/98integrity/README #usr/lib/dracut/modules.d/98integrity/evm-enable.sh diff --git a/lfs/dracut b/lfs/dracut index e03a02103..ec5ff8f33 100644 --- a/lfs/dracut +++ b/lfs/dracut @@ -74,7 +74,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install sbindir=/sbin sysconfdir=/etc - rm -rf /usr/lib/dracut/modules.d/*{bootchart,dash,fips*,modsign,busybox,convertfs,network,ifcfg,url-lib,gensplash,cms,plymouth,btrfs,crypt*,dm,dmraid,dmsquash-live,livenet,lvm,multipath,qemu*,cifs,dasd*,fcoe*,iscsi,nbd,nfs,resume,ssh-client,zfcp*,systemd*,znet,securityfs,masterkey,selinux,usrmount,uefi-lib} + rm -rf /usr/lib/dracut/modules.d/*{biosdevname,bootchart,dash,fips*,modsign,busybox,convertfs,network,ifcfg,url-lib,gensplash,cms,plymouth,btrfs,crypt*,dm,dmraid,dmsquash-live,livenet,lvm,multipath,qemu*,cifs,dasd*,fcoe*,iscsi,nbd,nfs,resume,ssh-client,zfcp*,systemd*,znet,securityfs,masterkey,selinux,usrmount,uefi-lib} cp -vf $(DIR_SRC)/config/dracut/dracut.conf /etc/dracut.conf From 9dd16c6d24620ce69d506677f300cc54babf9067 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 12:32:59 +0200 Subject: [PATCH 096/297] installer+grub: Fix serial console support with GRUB2. --- config/grub2/default | 4 +--- src/installer/hw.h | 2 ++ src/installer/main.c | 33 ++++++++++++++++++++------------- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/config/grub2/default b/config/grub2/default index 603e78f2f..a8b8f7805 100644 --- a/config/grub2/default +++ b/config/grub2/default @@ -1,7 +1,5 @@ GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved -# GRUB_TERMINAL="serial console" -# GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200" -GRUB_CMDLINE_LINUX="quiet rhgb" +GRUB_CMDLINE_LINUX="panic=10" GRUB_DISABLE_RECOVERY="true" diff --git a/src/installer/hw.h b/src/installer/hw.h index bfafbe455..ea98e2f09 100644 --- a/src/installer/hw.h +++ b/src/installer/hw.h @@ -50,6 +50,8 @@ #define RAID_METADATA "1.0" +#define SERIAL_BAUDRATE 115200 + #define BYTES2MB(x) ((x) / 1024 / 1024) #define MB2BYTES(x) ((unsigned long long)(x) * 1024 * 1024) diff --git a/src/installer/main.c b/src/installer/main.c index bb73fc24c..254aae8ea 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -600,23 +600,22 @@ int main(int argc, char *argv[]) { // Installing bootloader... statuswindow(60, 4, title, _("Installing the bootloader...")); - rc = hw_install_bootloader(destination, logfile); - if (rc) { - errorbox(_("Unable to install the bootloader.")); - goto EXIT; - } - - newtPopWindow(); - /* Serial console ? */ if (serialconsole) { /* grub */ - replace("/harddisk/boot/grub/grub.conf", "splashimage", "#splashimage"); - replace("/harddisk/boot/grub/grub.conf", "#serial", "serial"); - replace("/harddisk/boot/grub/grub.conf", "#terminal", "terminal"); - replace("/harddisk/boot/grub/grub.conf", " panic=10 ", " console=ttyS0,115200n8 panic=10 "); + FILE* f = fopen(DESTINATION_MOUNT_PATH "/etc/default/grub", "a"); + if (!f) { + errorbox(_("Unable to open /etc/default/grub for writing.")); + goto EXIT; + } - /*inittab*/ + fprintf(f, "GRUB_TERMINAL=\"serial console\"\n"); + fprintf(f, "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=%d\"\n", SERIAL_BAUDRATE); + fclose(f); + + replace(DESTINATION_MOUNT_PATH "/etc/default/grub", "panic=10", "panic=10 console=ttyS0,115200n8"); + + /* inittab */ replace("/harddisk/etc/inittab", "1:2345:respawn:", "#1:2345:respawn:"); replace("/harddisk/etc/inittab", "2:2345:respawn:", "#2:2345:respawn:"); replace("/harddisk/etc/inittab", "3:2345:respawn:", "#3:2345:respawn:"); @@ -626,6 +625,14 @@ int main(int argc, char *argv[]) { replace("/harddisk/etc/inittab", "#7:2345:respawn:", "7:2345:respawn:"); } + rc = hw_install_bootloader(destination, logfile); + if (rc) { + errorbox(_("Unable to install the bootloader.")); + goto EXIT; + } + + newtPopWindow(); + /* Set marker that the user has already accepted the gpl */ mysystem(logfile, "/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted"); From d1782bf02da9be03df4b2f68ad08dbe17be706bf Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 16:41:44 +0200 Subject: [PATCH 097/297] setup: Remove version number from window titles --- src/setup/main.c | 4 ++-- src/setup/passwords.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/setup/main.c b/src/setup/main.c index 3d47f58f4..3555b2e4d 100644 --- a/src/setup/main.c +++ b/src/setup/main.c @@ -104,7 +104,7 @@ int main(int argc, char *argv[]) title[strlen(title) - 1] = '\0'; fclose (f_title); } else { - sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN); + sprintf (title, "%s - %s", NAME, SLOGAN); } newtDrawRootText(14, 0, title); newtPushHelpLine(_(" / between elements | selects")); @@ -187,7 +187,7 @@ int main(int argc, char *argv[]) EXIT: if (automode != 0) { - sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN); + sprintf (title, "%s - %s", NAME, SLOGAN); if (autook) newtWinMessage(title, _("OK"), _("Setup is complete.")); else { diff --git a/src/setup/passwords.c b/src/setup/passwords.c index 69f35529f..e7b4b5231 100644 --- a/src/setup/passwords.c +++ b/src/setup/passwords.c @@ -84,7 +84,7 @@ int getpassword(char *password, char *text) do { done = 1; - sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN); + sprintf (title, "%s - %s", NAME, SLOGAN); rc = newtWinEntries(title, text, 65, 5, 5, 50, entries, _("OK"), _("Cancel"), NULL); From 0e491487e9c5b6544edcd7175fcf663ed8166f0c Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 16:43:07 +0200 Subject: [PATCH 098/297] installer: Fix access test after partitioning --- src/installer/hw.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 0e65ae969..667e07fdf 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -526,6 +526,16 @@ static int hw_zero_out_device(const char* path, int bytes) { return bytes_written; } +static int try_open(const char* path) { + FILE* f = fopen(path, "r"); + if (f) { + fclose(f); + return 0; + } + + return -1; +} + int hw_create_partitions(struct hw_destination* dest, const char* output) { // Before we write a new partition table to the disk, we will erase // the first couple of megabytes at the beginning of the device to @@ -606,19 +616,19 @@ int hw_create_partitions(struct hw_destination* dest, const char* output) { while (counter-- > 0) { sleep(1); - if (*dest->part_bootldr && (access(dest->part_bootldr, R_OK) != 0)) + if (*dest->part_bootldr && (try_open(dest->part_bootldr) != 0)) continue; - if (*dest->part_boot && (access(dest->part_boot, R_OK) != 0)) + if (*dest->part_boot && (try_open(dest->part_boot) != 0)) continue; - if (*dest->part_swap && (access(dest->part_swap, R_OK) != 0)) + if (*dest->part_swap && (try_open(dest->part_swap) != 0)) continue; - if (*dest->part_root && (access(dest->part_root, R_OK) != 0)) + if (*dest->part_root && (try_open(dest->part_root) != 0)) continue; - if (*dest->part_data && (access(dest->part_data, R_OK) != 0)) + if (*dest->part_data && (try_open(dest->part_data) != 0)) continue; // All partitions do exist, exiting the loop. @@ -884,11 +894,8 @@ int hw_setup_raid(struct hw_destination* dest, const char* output) { // If the raid device has not yet been properly brought up, // opening it will fail with the message: Device or resource busy // Hence we will wait a bit until it becomes usable. - FILE* f = fopen(dest->path, "r"); - if (f) { - fclose(f); + if (try_open(dest->path) == 0) break; - } } } From d78fffa049464b5985faa58c06726fcef1cb5376 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 16:43:45 +0200 Subject: [PATCH 099/297] installer: Destroy RAID superblocks on single disk installations --- src/installer/hw.c | 2 +- src/installer/hw.h | 1 + src/installer/main.c | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 667e07fdf..212deef89 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -822,7 +822,7 @@ int hw_umount_filesystems(struct hw_destination* dest, const char* prefix) { return 0; } -static int hw_destroy_raid_superblocks(const struct hw_destination* dest, const char* output) { +int hw_destroy_raid_superblocks(const struct hw_destination* dest, const char* output) { char cmd[STRING_SIZE]; hw_stop_all_raid_arrays(output); diff --git a/src/installer/hw.h b/src/installer/hw.h index ea98e2f09..123d89f7c 100644 --- a/src/installer/hw.h +++ b/src/installer/hw.h @@ -120,6 +120,7 @@ int hw_create_filesystems(struct hw_destination* dest, const char* output); int hw_mount_filesystems(struct hw_destination* dest, const char* prefix); int hw_umount_filesystems(struct hw_destination* dest, const char* prefix); +int hw_destroy_raid_superblocks(const struct hw_destination* dest, const char* output); int hw_setup_raid(struct hw_destination* dest, const char* output); int hw_stop_all_raid_arrays(const char* output); diff --git a/src/installer/main.c b/src/installer/main.c index 254aae8ea..45420e13e 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -540,6 +540,10 @@ int main(int argc, char *argv[]) { } newtPopWindow(); + } else { + // We will have to destroy all RAID setups that may have + // been on the devices that we want to use now. + hw_destroy_raid_superblocks(destination, logfile); } // Execute the partitioning... From ee00d203d169709e01c9b53f1782a70ca128cd5e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 16:57:02 +0200 Subject: [PATCH 100/297] installer: Omit source drive by name --- src/installer/hw.c | 12 ++++++------ src/installer/hw.h | 2 +- src/installer/main.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 212deef89..ca3b43095 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -165,7 +165,7 @@ static unsigned long long hw_block_device_get_size(const char* dev) { return size; } -struct hw_disk** hw_find_disks(struct hw* hw) { +struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive) { struct hw_disk** ret = hw_create_disks(); struct hw_disk** disks = ret; @@ -192,15 +192,15 @@ struct hw_disk** hw_find_disks(struct hw* hw) { continue; } - // DEVTYPE must be disk (otherwise we will see all sorts of partitions here) - const char* devtype = udev_device_get_property_value(dev, "DEVTYPE"); - if (devtype && (strcmp(devtype, "disk") != 0)) { + // Skip sourcedrive if we need to + if (sourcedrive && (strcmp(dev_path, sourcedrive) == 0)) { udev_device_unref(dev); continue; } - // Skip all source mediums - if (hw_test_source_medium(dev_path) == 0) { + // DEVTYPE must be disk (otherwise we will see all sorts of partitions here) + const char* devtype = udev_device_get_property_value(dev, "DEVTYPE"); + if (devtype && (strcmp(devtype, "disk") != 0)) { udev_device_unref(dev); continue; } diff --git a/src/installer/hw.h b/src/installer/hw.h index 123d89f7c..e4bb18b92 100644 --- a/src/installer/hw.h +++ b/src/installer/hw.h @@ -105,7 +105,7 @@ int hw_umount(const char* target); char* hw_find_source_medium(struct hw* hw); -struct hw_disk** hw_find_disks(struct hw* hw); +struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive); void hw_free_disks(struct hw_disk** disks); unsigned int hw_count_disks(struct hw_disk** disks); struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection); diff --git a/src/installer/main.c b/src/installer/main.c index 45420e13e..4a550105d 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -384,7 +384,7 @@ int main(int argc, char *argv[]) { int part_type = HW_PART_TYPE_NORMAL; // Scan for disks to install on. - struct hw_disk** disks = hw_find_disks(hw); + struct hw_disk** disks = hw_find_disks(hw, sourcedrive); struct hw_disk** selected_disks = NULL; unsigned int num_selected_disks = 0; From 782ae35df0d66b5ff3035f4b7fed6340d693d356 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 17:08:03 +0200 Subject: [PATCH 101/297] setup: Fix languages --- src/setup/main.c | 28 ++++------------------------ src/setup/networking.c | 3 +-- 2 files changed, 5 insertions(+), 26 deletions(-) diff --git a/src/setup/main.c b/src/setup/main.c index 3555b2e4d..33f4d2142 100644 --- a/src/setup/main.c +++ b/src/setup/main.c @@ -28,7 +28,7 @@ int main(int argc, char *argv[]) char *sections[11]; /* need to fill this out AFTER knowning lang */ int rc; struct keyvalue *kv; - char selectedshortlang[STRING_SIZE] = "en"; + char lang[STRING_SIZE] = "en_US.utf8"; char title[STRING_SIZE]; int langcounter; int autook = 0; @@ -53,36 +53,16 @@ int main(int argc, char *argv[]) if (!setlocale(LC_CTYPE,"")) fprintf(flog, "Locale not spezified. Check LANG, LC_CTYPE, RC_ALL."); -#if 0 kv = initkeyvalues(); if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings"))) { printf("%s is not properly installed.\n", NAME); return 1; } - findkey(kv, "LANGUAGE", selectedshortlang); + findkey(kv, "LANGUAGE", lang); - for (langcounter = 0; langtrs[langcounter]; langcounter++) - { - if (strcmp(selectedshortlang, shortlangnames[langcounter]) == 0) - { - ctr = langtrs[langcounter]; - break; - } - } - - if (!ctr) - { - for (choice = 0; shortlangnames[choice]; choice++) - { - if (strcmp(shortlangnames[choice], "en") == 0) - break; - } - if (!shortlangnames[choice]) - goto EXIT; - ctr = langtrs[choice]; - } -#endif + setlocale(LC_ALL, lang); + setenv("LANGUAGE", lang, 1); sections[0] = _("Keyboard mapping"); sections[1] = _("Timezone"); diff --git a/src/setup/networking.c b/src/setup/networking.c index 1b5b77d8d..df4f00f0b 100644 --- a/src/setup/networking.c +++ b/src/setup/networking.c @@ -264,8 +264,7 @@ int firstmenu(void) x--; if (x < 0 || x > 4) x = 0; /* Format heading bit. */ - snprintf(message, 1000, _("Current config: %s%s"), configtypenames[x], - networkrestart); + snprintf(message, 1000, _("Current config: %s\n\n%s"), configtypenames[x], networkrestart); rc = newtWinMenu(_("Network configuration menu"), message, 50, 5, 5, 6, sections, &choice, _("OK"), _("Done"), NULL); From 5e41745edf2bc900f08feba57dc86e7e64083a85 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 17:30:01 +0200 Subject: [PATCH 102/297] installer: Include /usr/bin/touch --- src/installer/dracut-module/module-setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installer/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh index cd8eebe30..0aa77c945 100755 --- a/src/installer/dracut-module/module-setup.sh +++ b/src/installer/dracut-module/module-setup.sh @@ -44,7 +44,7 @@ install() { inst "$moddir/70-dhcpcd.exe" "/var/ipfire/dhcpc/dhcpcd-hooks/70-dhcpcd.exe" # Misc. tools - inst_multiple eject ping wget + inst_multiple eject ping touch wget inst_multiple -o fdisk cfdisk df ps top # Hardware IDs From ee43f517e88cf0f152e9ac020da5d2a0130f194b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 20:30:42 +0200 Subject: [PATCH 103/297] installer: When there is only one disk, fix automatic selection --- src/installer/hw.c | 2 +- src/installer/main.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index ca3b43095..a3e5e59ba 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -307,7 +307,7 @@ struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection) { unsigned int num_disks = hw_count_disks(disks); for (unsigned int i = 0; i < num_disks; i++) { - if (selection && selection[i]) { + if (!selection || selection[i]) { struct hw_disk *selected_disk = disks[i]; selected_disk->ref++; diff --git a/src/installer/main.c b/src/installer/main.c index 4a550105d..445426a46 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -464,6 +464,7 @@ int main(int argc, char *argv[]) { // Currently not supported } else { errorbox(_("You disk configuration is currently not supported.")); + fprintf(flog, "Num disks selected: %d\n", num_selected_disks); } if (selected_disks) { From a996d39fb64b7176fba1bfb0a3e85d9d77e75223 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 20:32:58 +0200 Subject: [PATCH 104/297] installer: Sanitize button positions --- src/installer/main.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index 445426a46..b938d994d 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -111,8 +111,11 @@ static int newtWinOkCancel(const char* title, const char* message, int width, in newtTextboxSetText(textbox, message); newtFormAddComponent(form, textbox); - newtComponent btn_ok = newtButton((width - 16) / 3, height - 4, btn_txt_ok); - newtComponent btn_cancel = newtButton((width - 16) / 3 * 2 + 9, height - 4, + unsigned int btn_width_ok = strlen(btn_txt_ok); + unsigned int btn_width_cancel = strlen(btn_txt_cancel); + + newtComponent btn_ok = newtButton((width / 3) - (btn_width_ok / 2) - 2, height - 4, btn_txt_ok); + newtComponent btn_cancel = newtButton((width * 2 / 3) - (btn_width_cancel / 2) - 2, height - 4, btn_txt_cancel); newtFormAddComponents(form, btn_ok, btn_cancel, NULL); From 418367857143d00a16ef1230863d0dcc2dbb0bcb Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 20:33:50 +0200 Subject: [PATCH 105/297] installer+setup: Update translations --- src/installer/.tx/config | 7 + src/installer/main.c | 2 + src/installer/po/LINGUAS | 29 ++ src/installer/po/ar.po | 242 +++++++++++++++ src/installer/po/ca.po | 242 +++++++++++++++ src/installer/po/cs_CZ.po | 242 +++++++++++++++ src/installer/po/da.po | 243 +++++++++++++++ src/installer/po/de.po | 151 +++++----- src/installer/po/el_GR.po | 242 +++++++++++++++ src/installer/po/es.po | 242 +++++++++++++++ src/installer/po/fa.po | 243 +++++++++++++++ src/installer/po/fr.po | 242 +++++++++++++++ src/installer/po/hu.po | 242 +++++++++++++++ src/installer/po/id.po | 242 +++++++++++++++ src/installer/po/it.po | 242 +++++++++++++++ src/installer/po/ja.po | 242 +++++++++++++++ src/installer/po/km_KH.po | 242 +++++++++++++++ src/installer/po/nl.po | 242 +++++++++++++++ src/installer/po/pl.po | 242 +++++++++++++++ src/installer/po/pt_BR.po | 244 +++++++++++++++ src/installer/po/pt_PT.po | 242 +++++++++++++++ src/installer/po/ro_RO.po | 242 +++++++++++++++ src/installer/po/ru.po | 242 +++++++++++++++ src/installer/po/sk.po | 242 +++++++++++++++ src/installer/po/sq.po | 242 +++++++++++++++ src/installer/po/sv.po | 242 +++++++++++++++ src/installer/po/th.po | 242 +++++++++++++++ src/installer/po/tk.po | 242 +++++++++++++++ src/installer/po/tr.po | 242 +++++++++++++++ src/installer/po/uk.po | 242 +++++++++++++++ src/installer/po/uz@Latn.po | 242 +++++++++++++++ src/installer/po/vi.po | 242 +++++++++++++++ src/installer/po/zh.po | 242 +++++++++++++++ src/setup/.tx/config | 7 + src/setup/po/ar.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/ca.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/cs_CZ.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/da.po | 585 ++++++++++++++++++++++++++++++++++++ src/setup/po/de.po | 346 ++++++++++----------- src/setup/po/el_GR.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/es.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/fa.po | 585 ++++++++++++++++++++++++++++++++++++ src/setup/po/fr.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/hu.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/id.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/it.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/ja.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/km_KH.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/nl.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/pl.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/pt_BR.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/pt_PT.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/ro_RO.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/ru.po | 585 ++++++++++++++++++++++++++++++++++++ src/setup/po/sk.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/sq.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/sv.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/th.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/tk.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/tr.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/uk.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/uz@Latn.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/vi.po | 584 +++++++++++++++++++++++++++++++++++ src/setup/po/zh.po | 584 +++++++++++++++++++++++++++++++++++ 64 files changed, 24264 insertions(+), 239 deletions(-) create mode 100644 src/installer/.tx/config create mode 100644 src/installer/po/ar.po create mode 100644 src/installer/po/ca.po create mode 100644 src/installer/po/cs_CZ.po create mode 100644 src/installer/po/da.po create mode 100644 src/installer/po/el_GR.po create mode 100644 src/installer/po/es.po create mode 100644 src/installer/po/fa.po create mode 100644 src/installer/po/fr.po create mode 100644 src/installer/po/hu.po create mode 100644 src/installer/po/id.po create mode 100644 src/installer/po/it.po create mode 100644 src/installer/po/ja.po create mode 100644 src/installer/po/km_KH.po create mode 100644 src/installer/po/nl.po create mode 100644 src/installer/po/pl.po create mode 100644 src/installer/po/pt_BR.po create mode 100644 src/installer/po/pt_PT.po create mode 100644 src/installer/po/ro_RO.po create mode 100644 src/installer/po/ru.po create mode 100644 src/installer/po/sk.po create mode 100644 src/installer/po/sq.po create mode 100644 src/installer/po/sv.po create mode 100644 src/installer/po/th.po create mode 100644 src/installer/po/tk.po create mode 100644 src/installer/po/tr.po create mode 100644 src/installer/po/uk.po create mode 100644 src/installer/po/uz@Latn.po create mode 100644 src/installer/po/vi.po create mode 100644 src/installer/po/zh.po create mode 100644 src/setup/.tx/config create mode 100644 src/setup/po/ar.po create mode 100644 src/setup/po/ca.po create mode 100644 src/setup/po/cs_CZ.po create mode 100644 src/setup/po/da.po create mode 100644 src/setup/po/el_GR.po create mode 100644 src/setup/po/es.po create mode 100644 src/setup/po/fa.po create mode 100644 src/setup/po/fr.po create mode 100644 src/setup/po/hu.po create mode 100644 src/setup/po/id.po create mode 100644 src/setup/po/it.po create mode 100644 src/setup/po/ja.po create mode 100644 src/setup/po/km_KH.po create mode 100644 src/setup/po/nl.po create mode 100644 src/setup/po/pl.po create mode 100644 src/setup/po/pt_BR.po create mode 100644 src/setup/po/pt_PT.po create mode 100644 src/setup/po/ro_RO.po create mode 100644 src/setup/po/ru.po create mode 100644 src/setup/po/sk.po create mode 100644 src/setup/po/sq.po create mode 100644 src/setup/po/sv.po create mode 100644 src/setup/po/th.po create mode 100644 src/setup/po/tk.po create mode 100644 src/setup/po/tr.po create mode 100644 src/setup/po/uk.po create mode 100644 src/setup/po/uz@Latn.po create mode 100644 src/setup/po/vi.po create mode 100644 src/setup/po/zh.po diff --git a/src/installer/.tx/config b/src/installer/.tx/config new file mode 100644 index 000000000..3bb34b4e3 --- /dev/null +++ b/src/installer/.tx/config @@ -0,0 +1,7 @@ +[main] +host = https://www.transifex.com + +[ipfire.installer-legacy] +file_filter = po/.po +source_file = po/installer.pot +source_lang = en diff --git a/src/installer/main.c b/src/installer/main.c index b938d994d..88b3735cc 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -212,11 +212,13 @@ static struct lang { const char* code; char* name; } languages[NUM_LANGS + 1] = { + { "da.utf8", "Danish (Dansk)" }, { "nl_NL.utf8", "Dutch (Nederlands)" }, { "en_US.utf8", "English" }, { "fr_FR.utf8", "French (Français)" }, { "de_DE.utf8", "German (Deutsch)" }, { "pl_PL.utf8", "Polish (Polski)" }, + { "pt_BR.utf8", "Portuguese (Brasil)" }, { "ru_RU.utf8", "Russian (Русский)" }, { "es_ES.utf8", "Spanish (Español)" }, { "tr_TR.utf8", "Turkish (Türkçe)" }, diff --git a/src/installer/po/LINGUAS b/src/installer/po/LINGUAS index 7673daa94..1aa13069d 100644 --- a/src/installer/po/LINGUAS +++ b/src/installer/po/LINGUAS @@ -1 +1,30 @@ +ar +ca +cs_CZ +da de +el_GR +es +fa +fr +hu +id +it +ja +km_KH +nl +pl +pt_BR +pt_PT +ro_RO +ru +sk +sq +sv +th +tk +tr +uk +uz@Latn +vi +zh diff --git a/src/installer/po/ar.po b/src/installer/po/ar.po new file mode 100644 index 000000000..a10146e83 --- /dev/null +++ b/src/installer/po/ar.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Arabic (http://www.transifex.com/projects/p/ipfire/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/ca.po b/src/installer/po/ca.po new file mode 100644 index 000000000..54e3699e4 --- /dev/null +++ b/src/installer/po/ca.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/ipfire/language/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/cs_CZ.po b/src/installer/po/cs_CZ.po new file mode 100644 index 000000000..101c98dae --- /dev/null +++ b/src/installer/po/cs_CZ.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/ipfire/language/cs_CZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs_CZ\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/da.po b/src/installer/po/da.po new file mode 100644 index 000000000..d15c9177a --- /dev/null +++ b/src/installer/po/da.po @@ -0,0 +1,243 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Henrik Simonsen , 2014 +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Danish (http://www.transifex.com/projects/p/ipfire/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "OK" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "Annuller" + +#: main.c:145 +msgid "I accept this license" +msgstr "Jeg accepterer brugerlicensen" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "/ mellem elementer | vælger | næste skærm" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "Start installationen" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "Fandt ikke en lokal kilde. Henter fra internettet." + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "Henter installationsbillede ..." + +#: main.c:342 +msgid "Download error" +msgstr "Fejl under hentning" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "Brugerlicensen ikke accepteret!" + +#: main.c:399 +msgid "No hard disk found." +msgstr "Fandt ikke en harddisk." + +#: main.c:418 +msgid "Disk Selection" +msgstr "Vælg harddisk" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "Vælg den eller de harddisk(e) du vil installere IPFire på. Diskene bliver først partitioneret og dernæst bliver der oprettet filsystemer.\n\nAL DATA PÅ DISKENE BLIVER SLETTET." + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "Ingen harddisk valgt.\n\nVælg venligst en eller flere harddiske du vil installere IPFire på." + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "Installationsprogrammet forbereder nu den eller de valgte harddiske:\n\n%s\n\nVil du fortsætte?" + +#: main.c:445 +msgid "Disk Setup" +msgstr "Harddisk opsætning" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "Slet alle data" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "Installationsprogrammet vil nu opsætte RAID konfigurationen på de valgte harddiske:\n\n%s\n%s\n\nVil du fortsætte?" + +#: main.c:455 +msgid "RAID Setup" +msgstr "RAID opsætning" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "Din harddisk konfiguration understøttes ikke pt." + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "Din harddisk er for lille." + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "ext4 filsystem" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "ext4 filsystem uden journal" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "XFS filsystem" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "ReiserFS filsystem" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "Vælg filsystem" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "Vælg venligst et filsystem:" + +#: main.c:534 +msgid "Building RAID..." +msgstr "Bygger RAID..." + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "Kunne ikke bygge RAID." + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "Partitionerer harddisk..." + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "Kunne ikke partitionere harddisk." + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "Opretter filsystemer..." + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "Kunne ikke oprette filsystemer." + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "Kunne ikke forbinde til filsystemer." + +#: main.c:582 +msgid "Installing the system..." +msgstr "Installerer systemet..." + +#: main.c:583 +msgid "Unable to install the system." +msgstr "Kunne ikke installere systemet." + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "Installerer sprog arkivet..." + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "Kunne ikke installere sprog arkivet." + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "Installerer bootloader..." + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "Kunne ikke installere bootloader." + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "Tillykke!" + +#: main.c:671 +msgid "Reboot" +msgstr "Genstart" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/de.po b/src/installer/po/de.po index 51ec1e1e9..f4487a056 100644 --- a/src/installer/po/de.po +++ b/src/installer/po/de.po @@ -4,13 +4,14 @@ # # Translators: # Michael Tremer , 2014 +# Stefan Schantl , 2014 msgid "" msgstr "" "Project-Id-Version: IPFire Project\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-07-31 09:28+0000\n" -"PO-Revision-Date: 2014-07-31 09:44+0000\n" -"Last-Translator: Michael Tremer \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 16:04+0000\n" +"Last-Translator: Stefan Schantl \n" "Language-Team: German (http://www.transifex.com/projects/p/ipfire/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,72 +19,85 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: main.c:82 main.c:153 main.c:320 main.c:474 main.c:505 main.c:643 +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 msgid "OK" msgstr "OK" -#: main.c:83 main.c:427 main.c:437 main.c:474 main.c:505 +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 msgid "Cancel" msgstr "Abbrechen" -#: main.c:150 +#: main.c:145 msgid "I accept this license" msgstr "Ich akzeptiere die Lizenz" -#: main.c:304 +#: main.c:312 +msgid "Language selection" +msgstr "Sprachauswahl" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "Wählen Sie die gewünschte Sprache für den Installationsprozess aus." + +#: main.c:323 msgid "/ between elements | selects | next screen" msgstr "/ um zu wechseln | wählt aus | nächster Bildschirm" -#: main.c:309 +#: main.c:328 #, c-format msgid "" -"Welcome to the %s installation program. Selecting Cancel on any of the " -"following screens will reboot the computer." -msgstr "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "Willkommen zum %s Installationsprogramm.\n\nWenn Sie auf irgendeiner der folgenden Seiten 'Abbrechen' auswählen, wird der Computer neu gestartet." -#: main.c:311 +#: main.c:330 msgid "Start installation" msgstr "Installation beginnen" -#: main.c:320 +#: main.c:339 msgid "No local source media found. Starting download." -msgstr "" +msgstr "Kein lokales Quellmedium gefunden. Starte Download." -#: main.c:321 +#: main.c:340 msgid "Downloading installation image ..." msgstr "Lade Installationsimage herunter..." -#: main.c:323 +#: main.c:342 msgid "Download error" msgstr "Fehler beim Download" -#: main.c:358 +#: main.c:376 +msgid "License Agreement" +msgstr "Lizenzvereinbarung" + +#: main.c:377 msgid "License not accepted!" msgstr "Lizenz nicht akzeptiert!" -#: main.c:380 +#: main.c:399 msgid "No hard disk found." msgstr "Es wurde keine Festplatte gefunden." -#: main.c:399 +#: main.c:418 msgid "Disk Selection" msgstr "Festplattenauswahl" -#: main.c:400 +#: main.c:419 msgid "" "Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" "\n" "ALL DATA ON THE DISK WILL BE DESTROYED." -msgstr "" +msgstr "Wählen Sie die Festplatte(n) auf denen IPFire installiert werden soll. Diese wird/werden zuerst partitioniert und danach mit einem Dateisystem ausgestattet.\n\nSÄMTLICHE DATEN AUF DER FESTPLATTE GEHEN VERLOREN." -#: main.c:411 +#: main.c:430 msgid "" "No disk has been selected.\n" "\n" "Please select one or more disks you want to install IPFire on." -msgstr "" +msgstr "Keine Festplatte ausgewählt.\n\nBitte wählen Sie eine oder mehrere Festplatten auf denen IPFire installiert werden soll aus." -#: main.c:424 +#: main.c:443 #, c-format msgid "" "The installation program will now prepare the chosen harddisk:\n" @@ -91,17 +105,17 @@ msgid "" " %s\n" "\n" "Do you agree to continue?" -msgstr "" +msgstr "Das Installationsprogramm wird die folgende Festplatte nun vorbereiten:\n\n%s\n\nMöchten Sie damit fortfahren?" -#: main.c:426 +#: main.c:445 msgid "Disk Setup" msgstr "Disk-Setup" -#: main.c:427 main.c:437 +#: main.c:446 main.c:456 msgid "Delete all data" msgstr "Alle Daten löschen" -#: main.c:434 +#: main.c:453 #, c-format msgid "" "The installation program will now set up a RAID configuration on the selected harddisks:\n" @@ -110,120 +124,121 @@ msgid "" " %s\n" "\n" "Do you agree to continue?" -msgstr "" +msgstr "Das Installationsprogramm wird nun einen RAID Verbund auf den folgenden Festplatten erstellen:\n\n%s\n%s\n\nMöchten Sie damit fortfahren?" -#: main.c:436 +#: main.c:455 msgid "RAID Setup" msgstr "RAID-Setup" -#: main.c:447 +#: main.c:466 msgid "You disk configuration is currently not supported." -msgstr "" +msgstr "Die gewählte Festplattenkonstellation wird momentan nicht unterstützt." -#: main.c:461 +#: main.c:480 msgid "Your harddisk is too small." msgstr "Ihre Festplatte ist zu klein." -#: main.c:475 +#: main.c:494 msgid "" -"Your harddisk is very small, but you can continue with an very small swap. " -"(Use with caution)." -msgstr "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "Die gewählte Festplatte ist sehr klein, die Installation kann aber ohne Swap Partition fortgesetzt werden." -#: main.c:487 +#: main.c:506 msgid "ext4 Filesystem" msgstr "ext4-Dateisystem" -#: main.c:488 +#: main.c:507 msgid "ext4 Filesystem without journal" msgstr "ext4-Dateisystem ohne Journal" -#: main.c:489 +#: main.c:508 msgid "XFS Filesystem" msgstr "XFS-Dateisystem" -#: main.c:490 +#: main.c:509 msgid "ReiserFS Filesystem" msgstr "ReiserFS-Dateisystem" -#: main.c:504 +#: main.c:523 msgid "Filesystem Selection" msgstr "Dateisystemauswahl" -#: main.c:504 +#: main.c:523 msgid "Please choose your filesystem:" msgstr "Bitte wählen Sie ein Dateisystem:" -#: main.c:515 +#: main.c:534 msgid "Building RAID..." msgstr "Erstelle RAID..." -#: main.c:519 +#: main.c:538 msgid "Unable to build the RAID." msgstr "Das RAID konnte nicht erstellt werden." -#: main.c:527 +#: main.c:550 msgid "Partitioning disk..." msgstr "Partitioniere die Festplatte..." -#: main.c:531 +#: main.c:554 msgid "Unable to partition the disk." msgstr "Die Festplatte konnte nicht partitioniert werden." -#: main.c:538 +#: main.c:561 msgid "Creating filesystems..." msgstr "Erstelle Dateisysteme..." -#: main.c:542 +#: main.c:565 msgid "Unable to create filesystems." msgstr "Die Dateisysteme konnten nicht erstellt werden." -#: main.c:548 +#: main.c:571 msgid "Unable to mount filesystems." msgstr "Die Dateisysteme konnten nicht eingehangen werden." -#: main.c:559 +#: main.c:582 msgid "Installing the system..." msgstr "Installiere das System..." -#: main.c:560 +#: main.c:583 msgid "Unable to install the system." msgstr "Das System konnte nicht installiert werden." -#: main.c:576 +#: main.c:599 msgid "Installing the language cache..." msgstr "Installiere den Sprachdateicache..." -#: main.c:577 +#: main.c:600 msgid "Unable to install the language cache." msgstr "Der Sprachdateicache konnte nicht erstellt werden." -#: main.c:582 +#: main.c:605 msgid "Installing the bootloader..." msgstr "Installiere den Bootloader..." -#: main.c:586 +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "/etc/default/grub konnte nicht geschrieben werden." + +#: main.c:634 msgid "Unable to install the bootloader." msgstr "Der Bootloader konnte nicht installiert werden." -#: main.c:628 +#: main.c:666 #, c-format msgid "" -"%s was successfully installed. Please remove any installation mediums from " -"this system. Setup will now run where you may configure networking and the " -"system passwords. After Setup has been completed, you should point your web " -"browser at https://%s:444 (or whatever you name your %s), and configure " -"dialup networking (if required) and remote access." -msgstr "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "%s wurde erfolgreich installiert.\n\nEntfernen Sie bitte alle Installionsmedian aus dem Computer und drücken Sie den \"Neustarten\" Knopf . \n\nNach dem erfolgten Neustart wird das Setup-Programm gestartet, in dem Sie Netzwerkkarten und die Systempasswörter konfigurieren können. Sobald dies fertiggestellt ist, können Sie in Ihrem Webbrowser die Weboberfläche mit https://%s:444 (oder welchen Namen Sie Ihrem %s auch immer gegeben haben) erreichen." -#: main.c:634 +#: main.c:671 msgid "Congratulations!" msgstr "Herzlichen Glückwunsch!" -#: main.c:634 +#: main.c:671 msgid "Reboot" msgstr "Neustarten" -#: main.c:643 -msgid "Press Ok to reboot." -msgstr "Drücken Sie OK um neuzustarten." +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "Installation fehlgeschlagen. Drücken Sie \"OK\" für einen Neustart des Systems." diff --git a/src/installer/po/el_GR.po b/src/installer/po/el_GR.po new file mode 100644 index 000000000..d27fe7beb --- /dev/null +++ b/src/installer/po/el_GR.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Greek (Greece) (http://www.transifex.com/projects/p/ipfire/language/el_GR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el_GR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/es.po b/src/installer/po/es.po new file mode 100644 index 000000000..d4812afd9 --- /dev/null +++ b/src/installer/po/es.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/ipfire/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/fa.po b/src/installer/po/fa.po new file mode 100644 index 000000000..81d36316f --- /dev/null +++ b/src/installer/po/fa.po @@ -0,0 +1,243 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Khalil Delavaran , 2014 +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Persian (http://www.transifex.com/projects/p/ipfire/language/fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "بله" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "نمی خواهم" + +#: main.c:145 +msgid "I accept this license" +msgstr "من این پروانه را می پذیرم." + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "/ میان عنصری | گزینش | برای برگه پسین" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "آغاز برپا سازی" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "هیچ رسانه محلی یافت نشد. دانلود آغاز شد." + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "در حال دانلود ایمیج برای برپا سازی..." + +#: main.c:342 +msgid "Download error" +msgstr "ایراد در دانلود" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "پروانه پذیرفته نشد!" + +#: main.c:399 +msgid "No hard disk found." +msgstr "هارد دیسک یافت نشد." + +#: main.c:418 +msgid "Disk Selection" +msgstr "گزینش دیسک" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "دیسک (های) را برای برپاسازی IPFire گزینش کنید. نخست آنها را پارنیشین بندی کرده، و سپس، سیستم فایلی برای پارتیشن ها برگزینید.\n\nهمه داده های دیسک پاک می شوند." + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "هیچ دیسکی گزینش نشده است.\n\nخواهشمند است یک دیسک یا بیشتر را برای برپا سازی IPFire گزینش کنید." + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "آماده سازی دیسک سخت برای برپا سازی برنامه :\n\n%s\n\nآیا شما گرایش به ادامه دارید؟" + +#: main.c:445 +msgid "Disk Setup" +msgstr "پیکربندی دیسک" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "پاک کردن همه داده ها" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "پیکربندی RAID بر روی هارد دیسکهای گزینش شده برای برپا سازی برنامه\n\n%s\n%s\n\nآیا شما گرایش به ادامه دارید؟" + +#: main.c:455 +msgid "RAID Setup" +msgstr "پیکربندی RAID" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "پیکربندی دیسک شما پشتیبانی نمی شود." + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "هارد دیسک شما بسیار کوچک است." + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "فایل سیستم ext4" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "سیستم فایل ext4 بدون روزنامه" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "فایل سیستم XFS" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "فایل سیستم RaiserFS" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "گزینش فایل سیستم" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "خواهشمند است فایل سیستم خود را گزینش کنید:" + +#: main.c:534 +msgid "Building RAID..." +msgstr "ساخت RAID..." + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "ناتوانی در ساخت RAID." + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "پارتیشن بندی دیسک..." + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "ناتوانی در پارتیشین بندی دیسک." + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "ساخت سیستم فایل..." + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "ناتوانی در ساخت سیستم فایل." + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "ناتوانی در مونت کردن سیستم فایل." + +#: main.c:582 +msgid "Installing the system..." +msgstr "برپا سازی سیستم..." + +#: main.c:583 +msgid "Unable to install the system." +msgstr "ناتوانی در برپاسازی سیستم." + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "در حال برپا سازی کش زبان..." + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "ناتوانی در برپا سازی کش زبان." + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "برپا سازی بوت لودر..." + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "ناتوانی در برپا سازی بوت لودر." + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "شادباش می گوییم!" + +#: main.c:671 +msgid "Reboot" +msgstr "ریبوت" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/fr.po b/src/installer/po/fr.po new file mode 100644 index 000000000..a4af36301 --- /dev/null +++ b/src/installer/po/fr.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: French (http://www.transifex.com/projects/p/ipfire/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/hu.po b/src/installer/po/hu.po new file mode 100644 index 000000000..ac250098b --- /dev/null +++ b/src/installer/po/hu.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Hungarian (http://www.transifex.com/projects/p/ipfire/language/hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/id.po b/src/installer/po/id.po new file mode 100644 index 000000000..28d9ae3f0 --- /dev/null +++ b/src/installer/po/id.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Indonesian (http://www.transifex.com/projects/p/ipfire/language/id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/it.po b/src/installer/po/it.po new file mode 100644 index 000000000..70d009866 --- /dev/null +++ b/src/installer/po/it.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Italian (http://www.transifex.com/projects/p/ipfire/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/ja.po b/src/installer/po/ja.po new file mode 100644 index 000000000..6cdadf5ab --- /dev/null +++ b/src/installer/po/ja.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Japanese (http://www.transifex.com/projects/p/ipfire/language/ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/km_KH.po b/src/installer/po/km_KH.po new file mode 100644 index 000000000..0f7f9469d --- /dev/null +++ b/src/installer/po/km_KH.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Khmer (Cambodia) (http://www.transifex.com/projects/p/ipfire/language/km_KH/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km_KH\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/nl.po b/src/installer/po/nl.po new file mode 100644 index 000000000..6e2f7eaeb --- /dev/null +++ b/src/installer/po/nl.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Dutch (http://www.transifex.com/projects/p/ipfire/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/pl.po b/src/installer/po/pl.po new file mode 100644 index 000000000..cfad68097 --- /dev/null +++ b/src/installer/po/pl.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Polish (http://www.transifex.com/projects/p/ipfire/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/pt_BR.po b/src/installer/po/pt_BR.po new file mode 100644 index 000000000..0152eded0 --- /dev/null +++ b/src/installer/po/pt_BR.po @@ -0,0 +1,244 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# André Felipe Morro , 2014 +# Leandro Luquetti Basilio da Silva , 2014 +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/ipfire/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "Ok" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "Cancelar" + +#: main.c:145 +msgid "I accept this license" +msgstr "Eu aceito esta licença" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "/ entre os elementos | Selecione | próxima tela" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "Iniciar a instalação" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "Nenhuma fonte de mídia local encontrada. Iniciando download." + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "Baixando imagem de instalação ..." + +#: main.c:342 +msgid "Download error" +msgstr "Erro de download" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "Licença não aceita!" + +#: main.c:399 +msgid "No hard disk found." +msgstr "Nenhum disco rígido foi encontrado." + +#: main.c:418 +msgid "Disk Selection" +msgstr "Seleção de disco" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "Selecione o disco(s) que deseja instalar o IPFire. Primeiramente o mesmo será particionado, e então, as partições terão um sistema de arquivos que você escolher. \n\nTODOS OS DADOS NO DISCO SERÃO DESTRUÍDOS." + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "Nenhum disco foi selecionado.\n\nPor favor seleccione um ou mais discos que você deseja instalar o IPFire." + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "O programa de instalação irá agora preparar o disco rígido escolhido:\n\n%s \n\nVocê concorda em continuar?" + +#: main.c:445 +msgid "Disk Setup" +msgstr "Configuração de Discos" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "Apagar todos os dados" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "O programa de instalação ira agora definir uma configuração de RAID nos discos rígidos selecionados:\n\n%s\n%s\n \nVocê concorda continuar?" + +#: main.c:455 +msgid "RAID Setup" +msgstr "Configuração de RAID" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "Sua configuração de disco não é suportada atualmente." + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "Seu disco rígido é muito pequeno." + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "Sistema de arquivos ext4" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "Sistema de arquivos ext4 sem journal" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "Sistema de arquivos XFS" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "Sistema de arquivos ReiserFS" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "Seleção do sistema de arquivos" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "Por favor, escolha o seu sistema de arquivos:" + +#: main.c:534 +msgid "Building RAID..." +msgstr "Construindo o RAID..." + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "Não foi possível construir o RAID." + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "Particionando o disco..." + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "Não foi possível particionar o disco." + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "Criando o sistema de arquivos..." + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "Não foi possível criar sistemas de arquivos." + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "Não foi possível montar sistemas de arquivos." + +#: main.c:582 +msgid "Installing the system..." +msgstr "Instalando o sistema..." + +#: main.c:583 +msgid "Unable to install the system." +msgstr "Não é possível instalar o sistema." + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "Instalando o cache de linguagem..." + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "Não foi possível instalar o cache de linguagem." + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "Instalando o gerenciador de inicialização..." + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "Não foi possível instalar o gerenciador de inicialização." + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "Parabéns!" + +#: main.c:671 +msgid "Reboot" +msgstr "Reiniciar" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/pt_PT.po b/src/installer/po/pt_PT.po new file mode 100644 index 000000000..ee41d97e9 --- /dev/null +++ b/src/installer/po/pt_PT.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/ipfire/language/pt_PT/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_PT\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/ro_RO.po b/src/installer/po/ro_RO.po new file mode 100644 index 000000000..7fc70c812 --- /dev/null +++ b/src/installer/po/ro_RO.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/ipfire/language/ro_RO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro_RO\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/ru.po b/src/installer/po/ru.po new file mode 100644 index 000000000..e3e0a8b35 --- /dev/null +++ b/src/installer/po/ru.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/ipfire/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/sk.po b/src/installer/po/sk.po new file mode 100644 index 000000000..86d37cd23 --- /dev/null +++ b/src/installer/po/sk.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Slovak (http://www.transifex.com/projects/p/ipfire/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/sq.po b/src/installer/po/sq.po new file mode 100644 index 000000000..8ac31c1ad --- /dev/null +++ b/src/installer/po/sq.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Albanian (http://www.transifex.com/projects/p/ipfire/language/sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/sv.po b/src/installer/po/sv.po new file mode 100644 index 000000000..25e0ad4c0 --- /dev/null +++ b/src/installer/po/sv.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Swedish (http://www.transifex.com/projects/p/ipfire/language/sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/th.po b/src/installer/po/th.po new file mode 100644 index 000000000..2a88dca35 --- /dev/null +++ b/src/installer/po/th.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Thai (http://www.transifex.com/projects/p/ipfire/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/tk.po b/src/installer/po/tk.po new file mode 100644 index 000000000..e07df58a2 --- /dev/null +++ b/src/installer/po/tk.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Turkmen (http://www.transifex.com/projects/p/ipfire/language/tk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/tr.po b/src/installer/po/tr.po new file mode 100644 index 000000000..99a100ab8 --- /dev/null +++ b/src/installer/po/tr.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Turkish (http://www.transifex.com/projects/p/ipfire/language/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/uk.po b/src/installer/po/uk.po new file mode 100644 index 000000000..e6c955ada --- /dev/null +++ b/src/installer/po/uk.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Ukrainian (http://www.transifex.com/projects/p/ipfire/language/uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/uz@Latn.po b/src/installer/po/uz@Latn.po new file mode 100644 index 000000000..2bdb55154 --- /dev/null +++ b/src/installer/po/uz@Latn.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Uzbek (Latin) (http://www.transifex.com/projects/p/ipfire/language/uz@Latn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz@Latn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/vi.po b/src/installer/po/vi.po new file mode 100644 index 000000000..197382bfd --- /dev/null +++ b/src/installer/po/vi.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/ipfire/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/installer/po/zh.po b/src/installer/po/zh.po new file mode 100644 index 000000000..3148f147d --- /dev/null +++ b/src/installer/po/zh.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:09+0000\n" +"PO-Revision-Date: 2014-08-21 15:11+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/ipfire/language/zh/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682 +msgid "OK" +msgstr "" + +#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524 +msgid "Cancel" +msgstr "" + +#: main.c:145 +msgid "I accept this license" +msgstr "" + +#: main.c:312 +msgid "Language selection" +msgstr "" + +#: main.c:312 +msgid "Select the language you wish to use for the installation." +msgstr "" + +#: main.c:323 +msgid "/ between elements | selects | next screen" +msgstr "" + +#: main.c:328 +#, c-format +msgid "" +"Welcome to the %s installation program.\n" +"\n" +"Selecting Cancel on any of the following screens will reboot the computer." +msgstr "" + +#: main.c:330 +msgid "Start installation" +msgstr "" + +#: main.c:339 +msgid "No local source media found. Starting download." +msgstr "" + +#: main.c:340 +msgid "Downloading installation image ..." +msgstr "" + +#: main.c:342 +msgid "Download error" +msgstr "" + +#: main.c:376 +msgid "License Agreement" +msgstr "" + +#: main.c:377 +msgid "License not accepted!" +msgstr "" + +#: main.c:399 +msgid "No hard disk found." +msgstr "" + +#: main.c:418 +msgid "Disk Selection" +msgstr "" + +#: main.c:419 +msgid "" +"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n" +"\n" +"ALL DATA ON THE DISK WILL BE DESTROYED." +msgstr "" + +#: main.c:430 +msgid "" +"No disk has been selected.\n" +"\n" +"Please select one or more disks you want to install IPFire on." +msgstr "" + +#: main.c:443 +#, c-format +msgid "" +"The installation program will now prepare the chosen harddisk:\n" +"\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:445 +msgid "Disk Setup" +msgstr "" + +#: main.c:446 main.c:456 +msgid "Delete all data" +msgstr "" + +#: main.c:453 +#, c-format +msgid "" +"The installation program will now set up a RAID configuration on the selected harddisks:\n" +"\n" +" %s\n" +" %s\n" +"\n" +"Do you agree to continue?" +msgstr "" + +#: main.c:455 +msgid "RAID Setup" +msgstr "" + +#: main.c:466 +msgid "You disk configuration is currently not supported." +msgstr "" + +#: main.c:480 +msgid "Your harddisk is too small." +msgstr "" + +#: main.c:494 +msgid "" +"Your harddisk is very small, but you can continue without a swap partition." +msgstr "" + +#: main.c:506 +msgid "ext4 Filesystem" +msgstr "" + +#: main.c:507 +msgid "ext4 Filesystem without journal" +msgstr "" + +#: main.c:508 +msgid "XFS Filesystem" +msgstr "" + +#: main.c:509 +msgid "ReiserFS Filesystem" +msgstr "" + +#: main.c:523 +msgid "Filesystem Selection" +msgstr "" + +#: main.c:523 +msgid "Please choose your filesystem:" +msgstr "" + +#: main.c:534 +msgid "Building RAID..." +msgstr "" + +#: main.c:538 +msgid "Unable to build the RAID." +msgstr "" + +#: main.c:550 +msgid "Partitioning disk..." +msgstr "" + +#: main.c:554 +msgid "Unable to partition the disk." +msgstr "" + +#: main.c:561 +msgid "Creating filesystems..." +msgstr "" + +#: main.c:565 +msgid "Unable to create filesystems." +msgstr "" + +#: main.c:571 +msgid "Unable to mount filesystems." +msgstr "" + +#: main.c:582 +msgid "Installing the system..." +msgstr "" + +#: main.c:583 +msgid "Unable to install the system." +msgstr "" + +#: main.c:599 +msgid "Installing the language cache..." +msgstr "" + +#: main.c:600 +msgid "Unable to install the language cache." +msgstr "" + +#: main.c:605 +msgid "Installing the bootloader..." +msgstr "" + +#: main.c:612 +msgid "Unable to open /etc/default/grub for writing." +msgstr "" + +#: main.c:634 +msgid "Unable to install the bootloader." +msgstr "" + +#: main.c:666 +#, c-format +msgid "" +"%s was successfully installed!\n" +"\n" +"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console." +msgstr "" + +#: main.c:671 +msgid "Congratulations!" +msgstr "" + +#: main.c:671 +msgid "Reboot" +msgstr "" + +#: main.c:682 +msgid "Setup has failed. Press Ok to reboot." +msgstr "" diff --git a/src/setup/.tx/config b/src/setup/.tx/config new file mode 100644 index 000000000..085cca662 --- /dev/null +++ b/src/setup/.tx/config @@ -0,0 +1,7 @@ +[main] +host = https://www.transifex.com + +[ipfire.setup] +file_filter = po/.po +source_file = po/setup.pot +source_lang = en diff --git a/src/setup/po/ar.po b/src/setup/po/ar.po new file mode 100644 index 000000000..a3b9a806c --- /dev/null +++ b/src/setup/po/ar.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Arabic (http://www.transifex.com/projects/p/ipfire/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/ca.po b/src/setup/po/ca.po new file mode 100644 index 000000000..20dd07333 --- /dev/null +++ b/src/setup/po/ca.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/ipfire/language/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/cs_CZ.po b/src/setup/po/cs_CZ.po new file mode 100644 index 000000000..1a3a7d6cd --- /dev/null +++ b/src/setup/po/cs_CZ.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/ipfire/language/cs_CZ/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs_CZ\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/da.po b/src/setup/po/da.po new file mode 100644 index 000000000..7c696e5c1 --- /dev/null +++ b/src/setup/po/da.po @@ -0,0 +1,585 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Henrik Simonsen , 2014 +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Danish (http://www.transifex.com/projects/p/ipfire/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "Start adresse:" + +#: dhcp.c:51 +msgid "End address:" +msgstr "Slut adresse:" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "Primær DNS:" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "Sekundær DNS:" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "Standard udløbstid (minutter):" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "Maksimal udløbstid (minutter):" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "Domæne efternavn:" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "Kan ikke åbne filen med indstillinger" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "DHCP server konfiguration" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "Konfigurer DHCP serveren ved at angive indstillingerne." + +#: dhcp.c:125 +msgid "Enabled" +msgstr "Aktiveret" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "OK" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "Annuller" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "Følgende felter er ugyldige:\n\n" + +#: dhcp.c:159 +msgid "Start address" +msgstr "Start adresse" + +#: dhcp.c:165 +msgid "End address" +msgstr "Slut adresse" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "Primær DNS" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "Sekundær DNS" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "Standard udløbstid" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "Maks. udløbstid" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "Domæne navn" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "Indtast domæne navn" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "Domæne navn må ikke være tomt." + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "Domæne navn må ikke indeholde mellemrum." + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "Domæne navn må kun indeholde bogstaver, tal, bindestreger og punktummer." + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "Værtsnavn" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "Indtast computerens værtsnavn." + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "Værtsnavn må ikke være tomt." + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "Værtsnavn må ikke indeholde mellemrum." + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "Værtsnavn må kun indeholde bogstaver, tal og bindestreger." + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "Tastaturlayout" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "Vælg dit tastatur layout fra listen." + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "Tidszone" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "Netværk" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "ISDN" + +#: main.c:73 +msgid "'root' password" +msgstr "'root' adgangskode" + +#: main.c:74 +msgid "'admin' password" +msgstr "'admin' adgangskode" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "/ mellem elementer | vælger" + +#: main.c:97 +msgid "Section menu" +msgstr "Afsnitsmenu" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "Vælg det element du vil konfigurere." + +#: main.c:99 +msgid "Quit" +msgstr "Afslut" + +#: main.c:172 +msgid "Setup is complete." +msgstr "Opsætningen er færdig." + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "Advarsel" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "Første opsætning blev ikke færdiggjort. Du skal færdiggøre opsætningen ved at køre setup igen fra kommandoprompten." + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "Kunne ikke gemme %s/main/hostname.conf" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "Kunne ikke åbne hosts filen." + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "Kunne ikke gemme /etc/hosts." + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "Kunne ikke gemme /etc/hosts.deny." + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "Kunne ikke gemme /etc/hosts.allow." + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "Kunne ikke opsætte værtsnavn." + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "Skanner og konfigurerer ISDN enheder." + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "Kunne ikke skanne for ISDN enheder." + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "Grænseflade - %s" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "Indtast IP adresse information for grænseflade %s." + +#: netstuff.c:103 +msgid "Static" +msgstr "Statisk" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "DHCP" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "PPP OPKALD (PPPoE, modem, ATM ...)" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "DHCP værtsnavn:" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "Tving DHCP MTU:" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "IP adresse:" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "Undernetmaske:" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "Følgende felter er ugyldige:" + +#: netstuff.c:183 +msgid "IP address" +msgstr "IP adresse" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "Undernetmaske" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "DHCP værtsnavn" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "Frakobl" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "Vælg venligst et netværkskort til følgende grænseflade - %s." + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "Udvidet Netværks Menu" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "Vælg" + +#: netstuff.c:673 +msgid "Identify" +msgstr "Identificer" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "Enhedsidentifikation" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "Lyset på den valg port skulle nu blinke i 10 sekunder..." + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "Identifikation er ikke understøttet af denne enhed." + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "Der er ikke nogle ledige enheder på dit system." + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "Vil du virkelig fjerne den tilkoblede %s grænseflade?" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "Vælg netværksdriver" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "Vælg yderligere modul parametre" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "Indlæser modul..." + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "Kunne ikke indlæse driver modul." + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "Modul navn kan ikke være tomt." + +#: networking.c:110 +msgid "Stopping network..." +msgstr "Stopper netværk..." + +#: networking.c:115 +msgid "Restarting network..." +msgstr "Genstarter netværk..." + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "Ingen GRØN grænseflade opsat." + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "Mangler IP adresse på GRØN." + +#: networking.c:163 +msgid "Error" +msgstr "Fejl" + +#: networking.c:163 +msgid "Ignore" +msgstr "Ignorer" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "Ingen RØD grænseflade opsat." + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "Mangler IP adresse på RØD." + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "Ingen ORANGE grænseflade opsat." + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "Mangler IP adresse på ORANGE." + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "Ingen BLÅ grænseflade opsat." + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "Mangler IP adresse på BLÅ." + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "Mangler DNS." + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "Mangler Default Gateway." + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "Type af netværksopsætning" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "Drivere og kort tildeling" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "Adresseindstillinger" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "DNS og Gateway indstillinger" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "Når opsætningen er færdig, er det nødvendigt at genstarte netværket." + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "Netværksopsætningsmenu" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "Færdig" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "Vælg netværksopsætningen for %s. De følgende typer af opsætninger bestemmer hvilke grænseflader der vil få tilknyttet en ethernet enhed. Hvis du ændrer typen, skal netværket genstartes, og du skal opsætte netværket med drivere og enheder igen." + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "Der mangler netværkskort til dit valg.\n\nKræver: %d - Tilgængelige: %d\n" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "Konfigurer netværksdrivere og hvilket kort hver grænseflade er tilknyttet. Den nuværende konfiguration er:\n\n" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "Vil du ændre disse indstillinger?" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "Genstarter ikke-lokalt netværk..." + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "Vælg den grænseflade du ønsker at ændre.\n\n" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "Tilknyttede kort" + +#: networking.c:520 +msgid "Remove" +msgstr "Fjern" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "Hvis du ændrer denne IP adresse, og du anvender fjern adgang, vil forbindelsen til %s blive brudt, så du må oprette forbindelse igen til den nye IP. Dette er risikabelt og bør kun gøres, hvis du har adgang til den fysiske computer, hvis noget går galt." + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "Vælg den grænseflade du ønsker at ændre." + +#: networking.c:729 +msgid "Default gateway:" +msgstr "Standard gateway:" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "Indtast DNS og gateway information. Disse indstillinger anvendes kun med statisk IP (og DHCP hvis DNS angivet) på RØD grænseflade." + +#: networking.c:773 +msgid "Default gateway" +msgstr "Standard gateway" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "Sekundær DNS angivet uden Primær DNS" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "Indtast 'root' adgangskode. Log ind som denne bruger for adgang til kommandoprompt." + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "Opsæt adgangskode" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "Opsæt 'root' adgangskode..." + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "Problem ved opsætning af 'root' adgangskode." + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "Indtast %s 'admin' adgangskode. Denne bruger bruges til at logge ind på %s web admin sider." + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "Opsætter %s 'admin' adgangskode..." + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "Problem ved opsætning af %s 'admin' adgangskode." + +#: passwords.c:76 +msgid "Password:" +msgstr "Adgangskode:" + +#: passwords.c:77 +msgid "Again:" +msgstr "Igen:" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "Adgangskode kan ikke være tom." + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "Adgangskoderne er ikke ens." + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "Adgangskoder kan ikke indeholde mellemrum." + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "Vælg den tidszone du er i på listen." diff --git a/src/setup/po/de.po b/src/setup/po/de.po index 2aab9e176..b1d7d3a9f 100644 --- a/src/setup/po/de.po +++ b/src/setup/po/de.po @@ -4,13 +4,14 @@ # # Translators: # Michael Tremer , 2014 +# Stefan Schantl , 2014 msgid "" msgstr "" "Project-Id-Version: IPFire Project\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-12 10:05+0000\n" -"PO-Revision-Date: 2014-08-12 10:10+0000\n" -"Last-Translator: Michael Tremer \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 18:01+0000\n" +"Last-Translator: Stefan Schantl \n" "Language-Team: German (http://www.transifex.com/projects/p/ipfire/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,63 +21,63 @@ msgstr "" #: dhcp.c:50 msgid "Start address:" -msgstr "" +msgstr "Startadresse:" #: dhcp.c:51 msgid "End address:" -msgstr "" +msgstr "Endadresse:" -#: dhcp.c:52 networking.c:718 +#: dhcp.c:52 networking.c:717 msgid "Primary DNS:" msgstr "Primärer DNS:" -#: dhcp.c:53 networking.c:724 +#: dhcp.c:53 networking.c:723 msgid "Secondary DNS:" msgstr "Sekundärer DNS:" #: dhcp.c:54 msgid "Default lease (mins):" -msgstr "" +msgstr "Vorgegebene Gültigkeitsdauer (min):" #: dhcp.c:55 msgid "Max lease (mins):" -msgstr "" +msgstr "Maximale Gültigkeitsdauer (min):" #: dhcp.c:56 msgid "Domain name suffix:" -msgstr "" +msgstr "Domänenname:" #: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 #: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 -#: networking.c:134 networking.c:255 networking.c:292 networking.c:347 -#: networking.c:443 networking.c:553 networking.c:604 networking.c:611 -#: networking.c:714 timezone.c:63 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 msgid "Unable to open settings file" -msgstr "" +msgstr "Settings-Datei konnte nicht geöffnet werden" #: dhcp.c:111 msgid "DHCP server configuration" -msgstr "" +msgstr "DHCP-Serverkonfiguration" #: dhcp.c:116 msgid "Configure the DHCP server by entering the settings information." -msgstr "" +msgstr "Konfigurieren Sie den DHCP-Server durch Eingabe der Einstellungen:" #: dhcp.c:125 msgid "Enabled" -msgstr "" +msgstr "Aktiviert" -#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:119 main.c:192 -#: main.c:194 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 -#: networking.c:270 networking.c:306 networking.c:410 networking.c:561 -#: networking.c:643 networking.c:654 networking.c:747 passwords.c:89 +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 #: timezone.c:78 msgid "OK" msgstr "OK" #: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 -#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:306 -#: networking.c:411 networking.c:561 networking.c:654 networking.c:747 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 #: passwords.c:89 timezone.c:78 msgid "Cancel" msgstr "Abbrechen" @@ -85,7 +86,7 @@ msgstr "Abbrechen" msgid "" "The following fields are invalid:\n" "\n" -msgstr "" +msgstr "Die folgenden Eingaben sind ungültig:\n\n" #: dhcp.c:159 msgid "Start address" @@ -95,488 +96,491 @@ msgstr "Startadresse" msgid "End address" msgstr "Endadresse" -#: dhcp.c:173 networking.c:756 +#: dhcp.c:173 networking.c:755 msgid "Primary DNS" msgstr "Primärer DNS" -#: dhcp.c:182 networking.c:765 +#: dhcp.c:182 networking.c:764 msgid "Secondary DNS" -msgstr "" +msgstr "Sekundärer DNS" #: dhcp.c:189 msgid "Default lease time" -msgstr "" +msgstr "Vorgegebene Gültigkeitsdauer" #: dhcp.c:195 msgid "Max. lease time" -msgstr "" +msgstr "Maximale Gültigkeitsdauer" -#: domainname.c:42 main.c:90 +#: domainname.c:42 main.c:70 msgid "Domain name" -msgstr "" +msgstr "Domänenname" #: domainname.c:42 msgid "Enter Domain name" -msgstr "" +msgstr "Bitte geben Sie den Domänennamen ein" #: domainname.c:48 msgid "Domain name cannot be empty." -msgstr "" +msgstr "Der Domänenname darf nicht leer sein." #: domainname.c:50 msgid "Domain name cannot contain spaces." -msgstr "" +msgstr "Der Domänenname darf keine Leerzeichen enthalten." #: domainname.c:53 msgid "Domain name may only contain letters, numbers, hyphens and periods." -msgstr "" +msgstr "Der Domänenname darf nur Buchstaben, Ziffern, Bindestriche oder Punkte enthalten." -#: hostname.c:46 main.c:89 +#: hostname.c:46 main.c:69 msgid "Hostname" msgstr "Hostname" #: hostname.c:46 msgid "Enter the machine's hostname." -msgstr "" +msgstr "Bitte geben Sie den Hostname der Maschine ein." #: hostname.c:53 msgid "Hostname cannot be empty." -msgstr "" +msgstr "Der Hostname darf nicht leer sein." #: hostname.c:55 msgid "Hostname cannot contain spaces." -msgstr "" +msgstr "Der Hostname darf keine Leerzeichen enthalten." #: hostname.c:58 msgid "Hostname may only contain letters, numbers and hyphens." -msgstr "" +msgstr "Der Hostname darf nur Buchstaben, Ziffern oder Bindestriche enthalten." -#: keymap.c:84 main.c:87 +#: keymap.c:84 main.c:67 msgid "Keyboard mapping" -msgstr "" +msgstr "Tastaturbelegung" #: keymap.c:85 msgid "Choose the type of keyboard you are using from the list below." -msgstr "" +msgstr "Wählen Sie aus dieser Liste den Tastatur-Typ aus, den Sie benutzen." -#: main.c:88 timezone.c:77 +#: main.c:68 timezone.c:77 msgid "Timezone" msgstr "Zeitzone" -#: main.c:91 networking.c:110 networking.c:115 networking.c:448 +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 msgid "Networking" msgstr "Netzwerk" -#: main.c:92 misc.c:147 +#: main.c:72 misc.c:147 msgid "ISDN" msgstr "ISDN" -#: main.c:93 +#: main.c:73 msgid "'root' password" -msgstr "" +msgstr "'root'-Passwort" -#: main.c:94 +#: main.c:74 msgid "'admin' password" -msgstr "" +msgstr "'admin'-Passwort" -#: main.c:110 +#: main.c:90 msgid " / between elements | selects" -msgstr "" +msgstr "/ wechselt die Auswahl | wählt aus" -#: main.c:117 +#: main.c:97 msgid "Section menu" -msgstr "" +msgstr "Hauptmenü" -#: main.c:118 +#: main.c:98 msgid "Select the item you wish to configure." -msgstr "" +msgstr "Wählen Sie den Bereich aus, den Sie konfigurieren möchten." -#: main.c:119 +#: main.c:99 msgid "Quit" msgstr "Beenden" -#: main.c:192 +#: main.c:172 msgid "Setup is complete." -msgstr "" +msgstr "Das Setup ist jetzt fertiggestellt." -#: main.c:194 netstuff.c:733 networking.c:561 networking.c:654 +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 msgid "Warning" msgstr "Warnung" -#: main.c:195 +#: main.c:175 msgid "" "Initial setup was not entirely complete. You must ensure that Setup is " "properly finished by running setup again at the shell." -msgstr "" +msgstr "Das erste Setup wurde nicht vollständig durchgeführt. Sie müssen Setup vollständig beenden; dies können Sie durch Ausführen von Setup in der Shell nachholen." #: misc.c:62 #, c-format msgid "Unable to write %s/main/hostname.conf" -msgstr "" +msgstr "Schreiben von %s/main/hostname.conf fehlgeschlagen." #: misc.c:71 msgid "Unable to open main hosts file." -msgstr "" +msgstr "Öffnen der primären hosts-Datei fehlgeschlagen." #: misc.c:76 msgid "Unable to write /etc/hosts." -msgstr "" +msgstr "Schreiben von /etc/hosts fehlgeschlagen." #: misc.c:117 msgid "Unable to write /etc/hosts.deny." -msgstr "" +msgstr "Schreiben von /etc/hosts.deny fehlgeschlagen." #: misc.c:125 msgid "Unable to write /etc/hosts.allow." -msgstr "" +msgstr "Schreiben von /etc/hosts.allow fehlgeschlagen." #: misc.c:136 msgid "Unable to set hostname." -msgstr "" +msgstr "Kann Hostnamen nicht setzen." #: misc.c:147 msgid "Scanning and configuring ISDN devices." -msgstr "" +msgstr "Suche und konfiguriere ISDN Geräte." #: misc.c:148 msgid "Unable to scan for ISDN devices." -msgstr "" +msgstr "Konnte ISDN Scan nicht durchführen." #: netstuff.c:86 #, c-format msgid "Interface - %s" -msgstr "" +msgstr "Interface - %s" #: netstuff.c:91 #, c-format msgid "Enter the IP address information for the %s interface." -msgstr "" +msgstr "Geben Sie die IP-Adressinformationen für die folgende Schnittstelle ein - %s." #: netstuff.c:103 msgid "Static" -msgstr "" +msgstr "Statisch" #: netstuff.c:104 msgid "DHCP" -msgstr "" +msgstr "DHCP" #: netstuff.c:105 msgid "PPP DIALUP (PPPoE, modem, ATM ...)" -msgstr "" +msgstr "PPP-Einwahl (PPPoE, Modem, ATM...)" #: netstuff.c:113 msgid "DHCP Hostname:" -msgstr "" +msgstr "DHCP-Hostname:" #: netstuff.c:115 msgid "Force DHCP MTU:" -msgstr "" +msgstr "DHCP MTU erzwingen:" #: netstuff.c:134 msgid "IP address:" -msgstr "" +msgstr "IP-Adresse:" #: netstuff.c:146 msgid "Network mask:" -msgstr "" +msgstr "Netzmaske:" -#: netstuff.c:173 networking.c:750 +#: netstuff.c:173 networking.c:749 msgid "The following fields are invalid:" -msgstr "" +msgstr "Die folgenden Felder sind ungültig:" #: netstuff.c:183 msgid "IP address" -msgstr "" +msgstr "IP-Adresse" #: netstuff.c:189 msgid "Network mask" -msgstr "" +msgstr "Netzmaske" #: netstuff.c:198 msgid "DHCP hostname" -msgstr "" +msgstr "DHCP-Hostname" #: netstuff.c:396 netstuff.c:709 msgid "Unset" -msgstr "" +msgstr "Entfernen" #: netstuff.c:669 #, c-format msgid "Please choose a networkcard for the following interface - %s." -msgstr "" +msgstr "Bitte wählen Sie eine Netzwerkkarte für das folgende Interface aus - %s." #: netstuff.c:672 msgid "Extended Network Menu" -msgstr "" +msgstr "Erweitertes Netzwerkmenü" -#: netstuff.c:673 networking.c:521 +#: netstuff.c:673 networking.c:520 msgid "Select" -msgstr "" +msgstr "Auswählen" #: netstuff.c:673 msgid "Identify" -msgstr "" +msgstr "Identifizieren" #: netstuff.c:678 msgid "Device Identification" -msgstr "" +msgstr "Device-Identifizierung" #: netstuff.c:678 msgid "The lights on the selected port should flash now for 10 seconds..." -msgstr "" +msgstr "Der ausgewählte Port sollte nun für 10 Sekunden blinken..." #: netstuff.c:679 msgid "Identification is not supported by this interface." -msgstr "" +msgstr "Dieser Netzwerkport unterstützt die Identifikation leider nicht." #: netstuff.c:691 msgid "There are no unassigned interfaces on your system." -msgstr "" +msgstr "Keine noch nicht zugewiesenen Schnittstellen auf dem System vorhanden." #: netstuff.c:732 #, c-format msgid "Do you really want to remove the assigned %s interface?" -msgstr "" +msgstr "Möchten Sie die ausgewählte Schnittstelle %s wirklich entfernen?" #: netstuff.c:755 msgid "Select network driver" -msgstr "" +msgstr "Kann die Netzwerkkarte nicht automatisch erkennen. Geben Sie den Modulnamen und eventuelle Parameter für die Netzwerkkarte an." #: netstuff.c:755 msgid "Set additional module parameters" -msgstr "" +msgstr "Optionale Modulparameter" #: netstuff.c:762 msgid "Loading module..." -msgstr "" +msgstr "Lade Module..." #: netstuff.c:777 msgid "Unable to load driver module." -msgstr "" +msgstr "Das Laden des Treibermoduls schlug fehl." #: netstuff.c:780 msgid "Module name cannot be blank." -msgstr "" +msgstr "Der Modulname darf nicht leer sein." #: networking.c:110 msgid "Stopping network..." -msgstr "" +msgstr "Stoppe Netzwerk..." #: networking.c:115 msgid "Restarting network..." -msgstr "" +msgstr "Starte Netzwerk neu..." #: networking.c:146 msgid "No GREEN interface assigned." -msgstr "" +msgstr "Keine GRÜNE Schnittstelle zugewiesen." #: networking.c:152 msgid "Missing an IP address on GREEN." -msgstr "" +msgstr "Fehlende IP auf der grünen Schnittstelle!" #: networking.c:163 msgid "Error" -msgstr "" +msgstr "Error" #: networking.c:163 msgid "Ignore" -msgstr "" +msgstr "Ignorieren" #: networking.c:164 msgid "No RED interface assigned." -msgstr "" +msgstr "Keine rote Schnittstelle zugewiesen." #: networking.c:173 msgid "Missing an IP address on RED." -msgstr "" +msgstr "Fehlende IP auf der roten Schnittstelle!" #: networking.c:183 msgid "No ORANGE interface assigned." -msgstr "" +msgstr "Keine orange Schnittstelle zugewiesen." #: networking.c:189 msgid "Missing an IP address on ORANGE." -msgstr "" +msgstr "Fehlende IP auf der orangen Schnittstelle!" #: networking.c:199 msgid "No BLUE interface assigned." -msgstr "" +msgstr "Keine blaue Schnittstelle zugewiesen." #: networking.c:205 msgid "Missing an IP address on BLUE." -msgstr "" +msgstr "Fehlende IP auf der blauen Schnittstelle!" #: networking.c:217 msgid "Misssing DNS." -msgstr "" +msgstr "Fehlende DNS Information." #: networking.c:224 msgid "Missing Default Gateway." -msgstr "" +msgstr "Fehlender Standardgateway." -#: networking.c:237 networking.c:305 +#: networking.c:237 networking.c:304 msgid "Network configuration type" -msgstr "" +msgstr "Typ der Netzwerkkonfiguration" -#: networking.c:238 networking.c:410 +#: networking.c:238 networking.c:409 msgid "Drivers and card assignments" -msgstr "" +msgstr "Netzwerkkartenzuordnungen" -#: networking.c:239 networking.c:641 +#: networking.c:239 networking.c:640 msgid "Address settings" -msgstr "" +msgstr "Adresseinstellungen" -#: networking.c:240 networking.c:744 +#: networking.c:240 networking.c:743 msgid "DNS and Gateway settings" -msgstr "" +msgstr "DNS- und Gatewayeinstellungen" #: networking.c:260 msgid "When configuration is complete, a network restart will be required." -msgstr "" +msgstr "Nach Abschluss der Konfiguration muss das Netzwerk neu gestartet werden." #: networking.c:267 #, c-format -msgid "Current config: %s%s" -msgstr "" +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "Aktuelle Konfiguration: %s\n\n%s" -#: networking.c:269 +#: networking.c:268 msgid "Network configuration menu" -msgstr "" +msgstr "Netzwerkkonfigurationsmenü" -#: networking.c:270 networking.c:521 networking.c:643 +#: networking.c:269 networking.c:520 networking.c:642 msgid "Done" -msgstr "" +msgstr "Fertig" -#: networking.c:301 +#: networking.c:300 #, c-format msgid "" "Select the network configuration for %s. The following configuration types " "list those interfaces which have ethernet attached. If you change this " "setting, a network restart will be required, and you will have to " "reconfigure the network driver assignments." -msgstr "" +msgstr "Wählen Sie die Netzwerkkonfiguration für %s aus. Die folgenden Konfigurationstypen listen diejenigen Schnittstellen auf, die am Ethernet angeschlossen sind. Wenn Sie diese Einstellung ändern, muss das Netzwerk neu gestartet werden und Sie müssen die Netzwerktreiber neu zuweisen." -#: networking.c:308 +#: networking.c:307 #, c-format msgid "" "Not enough netcards for your choice.\n" "\n" "Needed: %d - Available: %d\n" -msgstr "" +msgstr "Nicht genügend Schnittstellen für Ihre Auswahl vorhanden.\n\nBenötigt: %d - Vorhanden: %d\n" -#: networking.c:360 +#: networking.c:359 msgid "" "Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" "\n" -msgstr "" +msgstr "Konfigurieren Sie die Netzwerktreiber und geben Sie an, welcher Schnittstelle jede Karte zugewiesen ist. Die aktuelle Konfiguration ist wie folgt:\n\n" -#: networking.c:409 +#: networking.c:408 msgid "Do you wish to change these settings?" -msgstr "" +msgstr "Möchten Sie diese Einstellungen ändern?" -#: networking.c:448 +#: networking.c:447 msgid "Restarting non-local network..." -msgstr "" +msgstr "Starte Nicht-Lokale Netzwerke neu..." -#: networking.c:465 +#: networking.c:464 msgid "" "Please choose the interface you wish to change.\n" "\n" -msgstr "" +msgstr "Wählen Sie die Schnittstelle aus, die Sie konfigurieren möchten.\n\n" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "Zugewiesene Netzwerkkarten" #: networking.c:520 -msgid "Assigned Cards" -msgstr "" - -#: networking.c:521 msgid "Remove" -msgstr "" +msgstr "Entfernen" -#: networking.c:557 networking.c:650 +#: networking.c:556 networking.c:649 #, c-format msgid "" "If you change this IP address, and you are logged in remotely, your " "connection to the %s machine will be broken, and you will have to reconnect " "on the new IP. This is a risky operation, and should only be attempted if " "you have physical access to the machine, should something go wrong." -msgstr "" +msgstr "Wenn Sie diese IP-Adresse ändern, während Sie über den Fernwartungszugang zugreifen, wird die Verbindung zum %s-Rechner abbrechen. Sie müssen dann eine Verbindung zur neuen IP-Adresse aufbauen. Dies ist ein riskanter Vorgang, der nur versucht werden sollte, wenn Sie physikalischen Zugriff auf den Rechner haben, für den Fall, dass etwas schief geht." -#: networking.c:642 +#: networking.c:641 msgid "Select the interface you wish to reconfigure." -msgstr "" +msgstr "Wählen Sie die Schnittstelle aus, die Sie neu konfigurieren möchten." -#: networking.c:730 +#: networking.c:729 msgid "Default gateway:" -msgstr "" +msgstr "Standard-Gateway:" -#: networking.c:745 +#: networking.c:744 msgid "" "Enter the DNS and gateway information. These settings are used only with " "Static IP (and DHCP if DNS set) on the RED interface." -msgstr "" +msgstr "Geben Sie die DNS- und Gateway-Informationen ein. Diese Einstellungen werden nur bei einer statischen IP an der ROTEN Schnittstelle benutzt (und DHCP, falls DNS eingetragen wurde)." -#: networking.c:774 +#: networking.c:773 msgid "Default gateway" -msgstr "" +msgstr "Standard-Gateway" -#: networking.c:781 +#: networking.c:780 msgid "Secondary DNS specified without a Primary DNS" -msgstr "" +msgstr "Sekundären DNS angegeben ohne primären DNS" #: passwords.c:33 msgid "" "Enter the 'root' user password. Login as this user for commandline access." -msgstr "" +msgstr "Geben Sie das Passwort für den Benutzer 'root' ein. Melden Sie sich als dieser Benutzer an, um Zugriff auf die Befehlszeile zu erhalten." #: passwords.c:38 passwords.c:61 msgid "Setting password" -msgstr "" +msgstr "Setze das Passwort" #: passwords.c:38 msgid "Setting 'root' password...." -msgstr "" +msgstr "Setze 'root'-Passwort...." #: passwords.c:39 msgid "Problem setting 'root' password." -msgstr "" +msgstr "Setzen des 'root'-Passworts fehlgeschlagen." #: passwords.c:53 #, c-format msgid "" "Enter %s 'admin' user password. This is the user to use for logging into the" " %s web administration pages." -msgstr "" +msgstr "Geben Sie das Passwort für den %s-Administrator 'admin' ein. Das ist der Benutzer, mit dem Sie sich an den %s-Webadministrationsseiten anmelden." #: passwords.c:60 #, c-format msgid "Setting %s 'admin' user password..." -msgstr "" +msgstr "Setze %s 'admin'-Passwort...." #: passwords.c:62 #, c-format msgid "Problem setting %s 'admin' user password." -msgstr "" +msgstr "Setzen des %s 'admin'-Passworts fehlgeschlagen." #: passwords.c:76 msgid "Password:" -msgstr "" +msgstr "Passwort:" #: passwords.c:77 msgid "Again:" -msgstr "" +msgstr "Wiederholung:" #: passwords.c:95 msgid "Password cannot be blank." -msgstr "" +msgstr "Das Passwort darf nicht leer sein." #: passwords.c:102 msgid "Passwords do not match." -msgstr "" +msgstr "Die Passwörter stimmen nicht überein." #: passwords.c:109 msgid "Password cannot contain spaces." -msgstr "" +msgstr "Das Passwort darf keine Leerzeichen enthalten." #: timezone.c:77 msgid "Choose the timezone you are in from the list below." -msgstr "" +msgstr "Bitte wählen Sie die Zeitzone in der Sie sich befinden aus dem untenstehenden Menü aus." diff --git a/src/setup/po/el_GR.po b/src/setup/po/el_GR.po new file mode 100644 index 000000000..3d4d211cf --- /dev/null +++ b/src/setup/po/el_GR.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Greek (Greece) (http://www.transifex.com/projects/p/ipfire/language/el_GR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el_GR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/es.po b/src/setup/po/es.po new file mode 100644 index 000000000..53fa0b3a1 --- /dev/null +++ b/src/setup/po/es.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/ipfire/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/fa.po b/src/setup/po/fa.po new file mode 100644 index 000000000..2e2adc43c --- /dev/null +++ b/src/setup/po/fa.po @@ -0,0 +1,585 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Khalil Delavaran , 2014 +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Persian (http://www.transifex.com/projects/p/ipfire/language/fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "آغاز آدرس:" + +#: dhcp.c:51 +msgid "End address:" +msgstr "پایان آدرس:" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "نخستین DNS:" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "دومین DNS:" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "اجاره پیش پندار (دقیقه):" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "بیشینه اجاره (دقیقه):" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "پسوند نام دامنه:" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "پیکربندی سرور DHCP" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "پویا شد" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "بله" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "نمی خواهم" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "آغاز آدرس" + +#: dhcp.c:165 +msgid "End address" +msgstr "پایان آدرس" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "نخستین DNS" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "دومین DNS" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "مدت اجاره پیش پندار" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "بیشینه مدت پیش پندار" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "نام دامنه" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "نام دامین را بنویسید" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "نام دامنه نمی تواند تهی باشد." + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "نام دامنه نمی تواند فاصله داشته باشد." + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "نام هاست" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "نام هاست ماشین ها را بنویسید." + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "نام هاست نمی تواند تهی باشد." + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "نام هاست نمیتواند فاصله داشته باشد." + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "ISDN" + +#: main.c:73 +msgid "'root' password" +msgstr "گذر واژه 'root'" + +#: main.c:74 +msgid "'admin' password" +msgstr "گذر واژه 'admin'" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "برون رفت" + +#: main.c:172 +msgid "Setup is complete." +msgstr "برپا سازی به پایان رسید." + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "گوشزد" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "ایستا" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "DHCP" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "شماره گیری PPP (PPOE, modem, ATM ...)" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "نام هاست DHCP:" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "آدرس IP:" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "ماسک شبکه:" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "آدرس IP" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "ماسک شبکه" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "نام هاست DHCP" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "گزینش" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "گزینش راه انداز شبکه" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "ایراد" + +#: networking.c:163 +msgid "Ignore" +msgstr "نادیده گرفتن" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "پیکربندی آدرس" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "پایان" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "پاک کردن" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "Gateway پیش پندار:" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "Gateway پیش پندار" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "پیکربندی گذر واژه" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "پیکربندی گذر واژه 'root'...." + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "ایراد در پیکربندی گذواژه 'root'." + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "پیکربندی %s 'admin' گذر واژه کاربر..." + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "گذر واژه:" + +#: passwords.c:77 +msgid "Again:" +msgstr "دوباره:" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "گذر واژه نمی تواند خالی باشد." + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "گذر واژه ها یکسان نیستند." + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "در گذر واژه نمی توان فاصله گذاشت." + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/fr.po b/src/setup/po/fr.po new file mode 100644 index 000000000..914095d30 --- /dev/null +++ b/src/setup/po/fr.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: French (http://www.transifex.com/projects/p/ipfire/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/hu.po b/src/setup/po/hu.po new file mode 100644 index 000000000..3d7198314 --- /dev/null +++ b/src/setup/po/hu.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Hungarian (http://www.transifex.com/projects/p/ipfire/language/hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/id.po b/src/setup/po/id.po new file mode 100644 index 000000000..89c6c582e --- /dev/null +++ b/src/setup/po/id.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Indonesian (http://www.transifex.com/projects/p/ipfire/language/id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/it.po b/src/setup/po/it.po new file mode 100644 index 000000000..8f14b3751 --- /dev/null +++ b/src/setup/po/it.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Italian (http://www.transifex.com/projects/p/ipfire/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/ja.po b/src/setup/po/ja.po new file mode 100644 index 000000000..69c24c119 --- /dev/null +++ b/src/setup/po/ja.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Japanese (http://www.transifex.com/projects/p/ipfire/language/ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/km_KH.po b/src/setup/po/km_KH.po new file mode 100644 index 000000000..4d5c1002a --- /dev/null +++ b/src/setup/po/km_KH.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Khmer (Cambodia) (http://www.transifex.com/projects/p/ipfire/language/km_KH/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km_KH\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/nl.po b/src/setup/po/nl.po new file mode 100644 index 000000000..18d951287 --- /dev/null +++ b/src/setup/po/nl.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Dutch (http://www.transifex.com/projects/p/ipfire/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/pl.po b/src/setup/po/pl.po new file mode 100644 index 000000000..607394ac3 --- /dev/null +++ b/src/setup/po/pl.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Polish (http://www.transifex.com/projects/p/ipfire/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/pt_BR.po b/src/setup/po/pt_BR.po new file mode 100644 index 000000000..a16955b39 --- /dev/null +++ b/src/setup/po/pt_BR.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/ipfire/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/pt_PT.po b/src/setup/po/pt_PT.po new file mode 100644 index 000000000..f75c59141 --- /dev/null +++ b/src/setup/po/pt_PT.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/ipfire/language/pt_PT/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_PT\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/ro_RO.po b/src/setup/po/ro_RO.po new file mode 100644 index 000000000..e85d2f7bd --- /dev/null +++ b/src/setup/po/ro_RO.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/ipfire/language/ro_RO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro_RO\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/ru.po b/src/setup/po/ru.po new file mode 100644 index 000000000..34b1ac42b --- /dev/null +++ b/src/setup/po/ru.po @@ -0,0 +1,585 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# bubnov_pi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/ipfire/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "Первый адрес:" + +#: dhcp.c:51 +msgid "End address:" +msgstr "Последний адрес:" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "Первичный DNS:" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "Вторичный DNS:" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "Аренда по умолчанию (минут):" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "Максимальная аренда (минут):" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "Суффикс доменного имени:" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "Невозможно открыть файл настроек" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "Конфигурация сервера DHCP" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "Настройте сервер DHCP, указав необходимые настройки." + +#: dhcp.c:125 +msgid "Enabled" +msgstr "Включено" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "ОК" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "Отмена" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "Следующие поля некорректные:\n\n" + +#: dhcp.c:159 +msgid "Start address" +msgstr "Первый адрес" + +#: dhcp.c:165 +msgid "End address" +msgstr "Последний адрес" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "Первичный DNS" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "Вторичный DNS" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "Аренда по умолчанию" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "Максимальная аренда (минут)" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "Имя домена" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "Введите имя домена" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "Имя домена не может быть пустым." + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "Имя домена не может содержать пробелов." + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "Доменное имя может содержать только буквы, цифры, дефисы и точки." + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "Имя узла" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "Введите имя машины." + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "Имя узла не может быть пустым." + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "Имя узла не может содержать пробелы." + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "Имя узла может содержать только буквы, цифры и дефисы." + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "Раскладка клавиатуры" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "Выберите тип используемой клавиатуры из списка ниже." + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "Часовой пояс" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "Сеть" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "ISDN" + +#: main.c:73 +msgid "'root' password" +msgstr "Пароль 'root'" + +#: main.c:74 +msgid "'admin' password" +msgstr "Пароль 'admin'" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "/ переход между элементами | <Пробел> выбор" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/sk.po b/src/setup/po/sk.po new file mode 100644 index 000000000..8b5944ef1 --- /dev/null +++ b/src/setup/po/sk.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Slovak (http://www.transifex.com/projects/p/ipfire/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/sq.po b/src/setup/po/sq.po new file mode 100644 index 000000000..4378e9d38 --- /dev/null +++ b/src/setup/po/sq.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Albanian (http://www.transifex.com/projects/p/ipfire/language/sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/sv.po b/src/setup/po/sv.po new file mode 100644 index 000000000..a2acfe3b6 --- /dev/null +++ b/src/setup/po/sv.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Swedish (http://www.transifex.com/projects/p/ipfire/language/sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/th.po b/src/setup/po/th.po new file mode 100644 index 000000000..ad29452cc --- /dev/null +++ b/src/setup/po/th.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Thai (http://www.transifex.com/projects/p/ipfire/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/tk.po b/src/setup/po/tk.po new file mode 100644 index 000000000..073e06a4f --- /dev/null +++ b/src/setup/po/tk.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Turkmen (http://www.transifex.com/projects/p/ipfire/language/tk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/tr.po b/src/setup/po/tr.po new file mode 100644 index 000000000..758a66e43 --- /dev/null +++ b/src/setup/po/tr.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Turkish (http://www.transifex.com/projects/p/ipfire/language/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/uk.po b/src/setup/po/uk.po new file mode 100644 index 000000000..afcfa3012 --- /dev/null +++ b/src/setup/po/uk.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Ukrainian (http://www.transifex.com/projects/p/ipfire/language/uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/uz@Latn.po b/src/setup/po/uz@Latn.po new file mode 100644 index 000000000..904428334 --- /dev/null +++ b/src/setup/po/uz@Latn.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Uzbek (Latin) (http://www.transifex.com/projects/p/ipfire/language/uz@Latn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz@Latn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/vi.po b/src/setup/po/vi.po new file mode 100644 index 000000000..4d2457e65 --- /dev/null +++ b/src/setup/po/vi.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/ipfire/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" diff --git a/src/setup/po/zh.po b/src/setup/po/zh.po new file mode 100644 index 000000000..8b7faba17 --- /dev/null +++ b/src/setup/po/zh.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR The IPFire Project (www.ipfire.org) +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: IPFire Project\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-21 15:12+0000\n" +"PO-Revision-Date: 2014-08-21 15:13+0000\n" +"Last-Translator: Michael Tremer \n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/ipfire/language/zh/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dhcp.c:50 +msgid "Start address:" +msgstr "" + +#: dhcp.c:51 +msgid "End address:" +msgstr "" + +#: dhcp.c:52 networking.c:717 +msgid "Primary DNS:" +msgstr "" + +#: dhcp.c:53 networking.c:723 +msgid "Secondary DNS:" +msgstr "" + +#: dhcp.c:54 +msgid "Default lease (mins):" +msgstr "" + +#: dhcp.c:55 +msgid "Max lease (mins):" +msgstr "" + +#: dhcp.c:56 +msgid "Domain name suffix:" +msgstr "" + +#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70 +#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704 +#: networking.c:134 networking.c:255 networking.c:291 networking.c:346 +#: networking.c:442 networking.c:552 networking.c:603 networking.c:610 +#: networking.c:713 timezone.c:63 +msgid "Unable to open settings file" +msgstr "" + +#: dhcp.c:111 +msgid "DHCP server configuration" +msgstr "" + +#: dhcp.c:116 +msgid "Configure the DHCP server by entering the settings information." +msgstr "" + +#: dhcp.c:125 +msgid "Enabled" +msgstr "" + +#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172 +#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163 +#: networking.c:269 networking.c:305 networking.c:409 networking.c:560 +#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89 +#: timezone.c:78 +msgid "OK" +msgstr "" + +#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158 +#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305 +#: networking.c:410 networking.c:560 networking.c:653 networking.c:746 +#: passwords.c:89 timezone.c:78 +msgid "Cancel" +msgstr "" + +#: dhcp.c:156 +msgid "" +"The following fields are invalid:\n" +"\n" +msgstr "" + +#: dhcp.c:159 +msgid "Start address" +msgstr "" + +#: dhcp.c:165 +msgid "End address" +msgstr "" + +#: dhcp.c:173 networking.c:755 +msgid "Primary DNS" +msgstr "" + +#: dhcp.c:182 networking.c:764 +msgid "Secondary DNS" +msgstr "" + +#: dhcp.c:189 +msgid "Default lease time" +msgstr "" + +#: dhcp.c:195 +msgid "Max. lease time" +msgstr "" + +#: domainname.c:42 main.c:70 +msgid "Domain name" +msgstr "" + +#: domainname.c:42 +msgid "Enter Domain name" +msgstr "" + +#: domainname.c:48 +msgid "Domain name cannot be empty." +msgstr "" + +#: domainname.c:50 +msgid "Domain name cannot contain spaces." +msgstr "" + +#: domainname.c:53 +msgid "Domain name may only contain letters, numbers, hyphens and periods." +msgstr "" + +#: hostname.c:46 main.c:69 +msgid "Hostname" +msgstr "" + +#: hostname.c:46 +msgid "Enter the machine's hostname." +msgstr "" + +#: hostname.c:53 +msgid "Hostname cannot be empty." +msgstr "" + +#: hostname.c:55 +msgid "Hostname cannot contain spaces." +msgstr "" + +#: hostname.c:58 +msgid "Hostname may only contain letters, numbers and hyphens." +msgstr "" + +#: keymap.c:84 main.c:67 +msgid "Keyboard mapping" +msgstr "" + +#: keymap.c:85 +msgid "Choose the type of keyboard you are using from the list below." +msgstr "" + +#: main.c:68 timezone.c:77 +msgid "Timezone" +msgstr "" + +#: main.c:71 networking.c:110 networking.c:115 networking.c:447 +msgid "Networking" +msgstr "" + +#: main.c:72 misc.c:147 +msgid "ISDN" +msgstr "" + +#: main.c:73 +msgid "'root' password" +msgstr "" + +#: main.c:74 +msgid "'admin' password" +msgstr "" + +#: main.c:90 +msgid " / between elements | selects" +msgstr "" + +#: main.c:97 +msgid "Section menu" +msgstr "" + +#: main.c:98 +msgid "Select the item you wish to configure." +msgstr "" + +#: main.c:99 +msgid "Quit" +msgstr "" + +#: main.c:172 +msgid "Setup is complete." +msgstr "" + +#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653 +msgid "Warning" +msgstr "" + +#: main.c:175 +msgid "" +"Initial setup was not entirely complete. You must ensure that Setup is " +"properly finished by running setup again at the shell." +msgstr "" + +#: misc.c:62 +#, c-format +msgid "Unable to write %s/main/hostname.conf" +msgstr "" + +#: misc.c:71 +msgid "Unable to open main hosts file." +msgstr "" + +#: misc.c:76 +msgid "Unable to write /etc/hosts." +msgstr "" + +#: misc.c:117 +msgid "Unable to write /etc/hosts.deny." +msgstr "" + +#: misc.c:125 +msgid "Unable to write /etc/hosts.allow." +msgstr "" + +#: misc.c:136 +msgid "Unable to set hostname." +msgstr "" + +#: misc.c:147 +msgid "Scanning and configuring ISDN devices." +msgstr "" + +#: misc.c:148 +msgid "Unable to scan for ISDN devices." +msgstr "" + +#: netstuff.c:86 +#, c-format +msgid "Interface - %s" +msgstr "" + +#: netstuff.c:91 +#, c-format +msgid "Enter the IP address information for the %s interface." +msgstr "" + +#: netstuff.c:103 +msgid "Static" +msgstr "" + +#: netstuff.c:104 +msgid "DHCP" +msgstr "" + +#: netstuff.c:105 +msgid "PPP DIALUP (PPPoE, modem, ATM ...)" +msgstr "" + +#: netstuff.c:113 +msgid "DHCP Hostname:" +msgstr "" + +#: netstuff.c:115 +msgid "Force DHCP MTU:" +msgstr "" + +#: netstuff.c:134 +msgid "IP address:" +msgstr "" + +#: netstuff.c:146 +msgid "Network mask:" +msgstr "" + +#: netstuff.c:173 networking.c:749 +msgid "The following fields are invalid:" +msgstr "" + +#: netstuff.c:183 +msgid "IP address" +msgstr "" + +#: netstuff.c:189 +msgid "Network mask" +msgstr "" + +#: netstuff.c:198 +msgid "DHCP hostname" +msgstr "" + +#: netstuff.c:396 netstuff.c:709 +msgid "Unset" +msgstr "" + +#: netstuff.c:669 +#, c-format +msgid "Please choose a networkcard for the following interface - %s." +msgstr "" + +#: netstuff.c:672 +msgid "Extended Network Menu" +msgstr "" + +#: netstuff.c:673 networking.c:520 +msgid "Select" +msgstr "" + +#: netstuff.c:673 +msgid "Identify" +msgstr "" + +#: netstuff.c:678 +msgid "Device Identification" +msgstr "" + +#: netstuff.c:678 +msgid "The lights on the selected port should flash now for 10 seconds..." +msgstr "" + +#: netstuff.c:679 +msgid "Identification is not supported by this interface." +msgstr "" + +#: netstuff.c:691 +msgid "There are no unassigned interfaces on your system." +msgstr "" + +#: netstuff.c:732 +#, c-format +msgid "Do you really want to remove the assigned %s interface?" +msgstr "" + +#: netstuff.c:755 +msgid "Select network driver" +msgstr "" + +#: netstuff.c:755 +msgid "Set additional module parameters" +msgstr "" + +#: netstuff.c:762 +msgid "Loading module..." +msgstr "" + +#: netstuff.c:777 +msgid "Unable to load driver module." +msgstr "" + +#: netstuff.c:780 +msgid "Module name cannot be blank." +msgstr "" + +#: networking.c:110 +msgid "Stopping network..." +msgstr "" + +#: networking.c:115 +msgid "Restarting network..." +msgstr "" + +#: networking.c:146 +msgid "No GREEN interface assigned." +msgstr "" + +#: networking.c:152 +msgid "Missing an IP address on GREEN." +msgstr "" + +#: networking.c:163 +msgid "Error" +msgstr "" + +#: networking.c:163 +msgid "Ignore" +msgstr "" + +#: networking.c:164 +msgid "No RED interface assigned." +msgstr "" + +#: networking.c:173 +msgid "Missing an IP address on RED." +msgstr "" + +#: networking.c:183 +msgid "No ORANGE interface assigned." +msgstr "" + +#: networking.c:189 +msgid "Missing an IP address on ORANGE." +msgstr "" + +#: networking.c:199 +msgid "No BLUE interface assigned." +msgstr "" + +#: networking.c:205 +msgid "Missing an IP address on BLUE." +msgstr "" + +#: networking.c:217 +msgid "Misssing DNS." +msgstr "" + +#: networking.c:224 +msgid "Missing Default Gateway." +msgstr "" + +#: networking.c:237 networking.c:304 +msgid "Network configuration type" +msgstr "" + +#: networking.c:238 networking.c:409 +msgid "Drivers and card assignments" +msgstr "" + +#: networking.c:239 networking.c:640 +msgid "Address settings" +msgstr "" + +#: networking.c:240 networking.c:743 +msgid "DNS and Gateway settings" +msgstr "" + +#: networking.c:260 +msgid "When configuration is complete, a network restart will be required." +msgstr "" + +#: networking.c:267 +#, c-format +msgid "" +"Current config: %s\n" +"\n" +"%s" +msgstr "" + +#: networking.c:268 +msgid "Network configuration menu" +msgstr "" + +#: networking.c:269 networking.c:520 networking.c:642 +msgid "Done" +msgstr "" + +#: networking.c:300 +#, c-format +msgid "" +"Select the network configuration for %s. The following configuration types " +"list those interfaces which have ethernet attached. If you change this " +"setting, a network restart will be required, and you will have to " +"reconfigure the network driver assignments." +msgstr "" + +#: networking.c:307 +#, c-format +msgid "" +"Not enough netcards for your choice.\n" +"\n" +"Needed: %d - Available: %d\n" +msgstr "" + +#: networking.c:359 +msgid "" +"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n" +"\n" +msgstr "" + +#: networking.c:408 +msgid "Do you wish to change these settings?" +msgstr "" + +#: networking.c:447 +msgid "Restarting non-local network..." +msgstr "" + +#: networking.c:464 +msgid "" +"Please choose the interface you wish to change.\n" +"\n" +msgstr "" + +#: networking.c:519 +msgid "Assigned Cards" +msgstr "" + +#: networking.c:520 +msgid "Remove" +msgstr "" + +#: networking.c:556 networking.c:649 +#, c-format +msgid "" +"If you change this IP address, and you are logged in remotely, your " +"connection to the %s machine will be broken, and you will have to reconnect " +"on the new IP. This is a risky operation, and should only be attempted if " +"you have physical access to the machine, should something go wrong." +msgstr "" + +#: networking.c:641 +msgid "Select the interface you wish to reconfigure." +msgstr "" + +#: networking.c:729 +msgid "Default gateway:" +msgstr "" + +#: networking.c:744 +msgid "" +"Enter the DNS and gateway information. These settings are used only with " +"Static IP (and DHCP if DNS set) on the RED interface." +msgstr "" + +#: networking.c:773 +msgid "Default gateway" +msgstr "" + +#: networking.c:780 +msgid "Secondary DNS specified without a Primary DNS" +msgstr "" + +#: passwords.c:33 +msgid "" +"Enter the 'root' user password. Login as this user for commandline access." +msgstr "" + +#: passwords.c:38 passwords.c:61 +msgid "Setting password" +msgstr "" + +#: passwords.c:38 +msgid "Setting 'root' password...." +msgstr "" + +#: passwords.c:39 +msgid "Problem setting 'root' password." +msgstr "" + +#: passwords.c:53 +#, c-format +msgid "" +"Enter %s 'admin' user password. This is the user to use for logging into the" +" %s web administration pages." +msgstr "" + +#: passwords.c:60 +#, c-format +msgid "Setting %s 'admin' user password..." +msgstr "" + +#: passwords.c:62 +#, c-format +msgid "Problem setting %s 'admin' user password." +msgstr "" + +#: passwords.c:76 +msgid "Password:" +msgstr "" + +#: passwords.c:77 +msgid "Again:" +msgstr "" + +#: passwords.c:95 +msgid "Password cannot be blank." +msgstr "" + +#: passwords.c:102 +msgid "Passwords do not match." +msgstr "" + +#: passwords.c:109 +msgid "Password cannot contain spaces." +msgstr "" + +#: timezone.c:77 +msgid "Choose the timezone you are in from the list below." +msgstr "" From bc0c55088ecd267159cd3451d5afc4c8ba70c914 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 21 Aug 2014 20:35:48 +0200 Subject: [PATCH 106/297] Remove old installer/setup translations --- doc/language_missings | 15 - langs/de/install/lang_de.c | 630 ------------------------------------- langs/en/install/lang_en.c | 626 ------------------------------------ langs/es/install/lang_es.c | 622 ------------------------------------ langs/fr/install/lang_fr.c | 622 ------------------------------------ langs/nl/install/lang_nl.c | 626 ------------------------------------ langs/pl/install/lang_pl.c | 622 ------------------------------------ langs/ru/install/lang_ru.c | 620 ------------------------------------ langs/tr/install/lang_tr.c | 626 ------------------------------------ tools/check_langs.sh | 8 - 10 files changed, 5017 deletions(-) delete mode 100644 langs/de/install/lang_de.c delete mode 100644 langs/en/install/lang_en.c delete mode 100644 langs/es/install/lang_es.c delete mode 100644 langs/fr/install/lang_fr.c delete mode 100644 langs/nl/install/lang_nl.c delete mode 100644 langs/pl/install/lang_pl.c delete mode 100644 langs/ru/install/lang_ru.c delete mode 100644 langs/tr/install/lang_tr.c diff --git a/doc/language_missings b/doc/language_missings index 376a460ce..a511ad2d6 100644 --- a/doc/language_missings +++ b/doc/language_missings @@ -1,16 +1,10 @@ ############################################################################ -# Checking install/setup translations for language: en # -############################################################################ -############################################################################ # Checking cgi-bin translations for language: en # ############################################################################ < addon < ccd maxclients < ovpn_fragment ############################################################################ -# Checking install/setup translations for language: fr # -############################################################################ -############################################################################ # Checking cgi-bin translations for language: fr # ############################################################################ < addon @@ -556,9 +550,6 @@ < wlan client wpa mode ccmp tkip < wlan client wpa mode tkip tkip ############################################################################ -# Checking install/setup translations for language: es # -############################################################################ -############################################################################ # Checking cgi-bin translations for language: es # ############################################################################ < addon @@ -1097,9 +1088,6 @@ < wlan client wpa mode ccmp tkip < wlan client wpa mode tkip tkip ############################################################################ -# Checking install/setup translations for language: pl # -############################################################################ -############################################################################ # Checking cgi-bin translations for language: pl # ############################################################################ < addon @@ -1613,9 +1601,6 @@ < wlan client wpa mode ccmp tkip < wlan client wpa mode tkip tkip ############################################################################ -# Checking install/setup translations for language: ru # -############################################################################ -############################################################################ # Checking cgi-bin translations for language: ru # ############################################################################ < Add a route diff --git a/langs/de/install/lang_de.c b/langs/de/install/lang_de.c deleted file mode 100644 index eac680594..000000000 --- a/langs/de/install/lang_de.c +++ /dev/null @@ -1,630 +0,0 @@ -/* - * German (de) Data File - * - * This file is part of the IPFire. - * - * IPCop 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. - * - * IPCop 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 IPCop; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * (c) IPFire Team - * - * based on work of SmoothWall and IPCop - * - * (c) The SmoothWall Team - * - * IPCop translation - * (c) 2003 Dirk Loss, Ludwig Steininger, Michael Knappe, Michael Linke, - * Richard Hartmann, Ufuk Altinkaynak, Gerhard Abrahams, Benjamin Kohberg, - * Samuel Wiktor - */ - -#include "libsmooth.h" - -char *de_tr[] = { - -/* TR_ISDN */ -"ISDN", -/* TR_ERROR_PROBING_ISDN */ -"Konnte ISDN Scan nicht durchführen.", -/* TR_PROBING_ISDN */ -"Suche und konfiguriere ISDN Geräte.", -/* TR_MISSING_GREEN_IP */ -"Fehlende IP auf der grünen Schnittstelle!", -/* TR_CHOOSE_FILESYSTEM */ -"Bitte wählen Sie ihr Dateisystem aus:", -/* TR_NOT_ENOUGH_INTERFACES */ -"Nicht genügend Netzwerkkarten für diese Auswahl gefunden.\n\nBenötigt: %d - Gefunden: %d\n", -/* TR_INTERFACE_CHANGE */ -"Bitte wählen Sie das Interface aus das geändert werden soll.\n\n", -/* TR_NETCARD_COLOR */ -"Zugewiesene Karten", -/* TR_REMOVE */ -"Entfernen", -/* TR_MISSING_DNS */ -"Kein DNS eingetragen\n", -/* TR_MISSING_DEFAULT */ -"Kein default Gateway eingetragen.\n", -/* TR_JOURNAL_EXT3 */ -"Erstelle Journal für Ext3...", -/* TR_CHOOSE_NETCARD */ -"Bitte wählen Sie eine der untenstehenden Netzwerkkarten für die folgene Schnittstelle aus - %s.", -/* TR_NETCARDMENU2 */ -"Erweitertes Netzwerkmenu", -/* TR_ERROR_INTERFACES */ -"Es wurden leider keine freien Netzwerkkarten für die Schnittstelle in ihrem System gefunden.", -/* TR_REMOVE_CARD */ -"Soll die Zuordnung der folgende Netzwerkkarte entfernt werden? - %s", -/* TR_JOURNAL_ERROR */ -"Konnte das Journal nicht erstelle, verwende ext2 Fallback.", -/* TR_FILESYSTEM */ -"Dateisystemauswahl", -/* TR_ADDRESS_SETTINGS */ -"Adress-Einstellungen", -/* TR_ADMIN_PASSWORD */ -"'admin'-Passwort", -/* TR_AGAIN_PROMPT */ -"Wiederholung:", -/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */ -"Alle Karten wurden erfolgreich zugeordnet.", -/* TR_AUTODETECT */ -"* AUTOMATISCHE ERKENNUNG *", -/* TR_BUILDING_INITRD */ -"Erzeuge Ramdisk...", -/* TR_CANCEL */ -"Abbrechen", -/* TR_CARD_ASSIGNMENT */ -"Karten-Zuordnung", -/* TR_CHECKING */ -"Überprüfe URL...", -/* TR_CHECKING_FOR */ -"Suche nach: %s", -/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */ -"Wähle die ISDN-Karte in diesem Computer aus:", -/* TR_CHOOSE_THE_ISDN_PROTOCOL */ -"Wählen Sie das benötigte ISDN-Protokoll.", -/* TR_CONFIGURE_DHCP */ -"Konfigurieren Sie den DHCP-Server durch Eingabe der Einstellungen:", -/* TR_CONFIGURE_NETWORKING */ -"Netzwerk konfigurieren", -/* TR_CONFIGURE_NETWORKING_LONG */ -"Sie sollten jetzt das Netzwerk konfigurieren. Laden Sie zunächst den richtigen Treiber für die GRÜNE Schnittstelle, indem Sie die Netzwerkkarte entweder automatisch erkennen lassen oder den richtigen Treiber aus einer Liste auswählen. Wenn Sie mehr als eine Netzwerkkarte installiert haben, können Sie die anderen später konfigurieren. Sollten Sie mehrere Karten vom gleichen Typ wie die an der GRÜNEN Schnittstelle haben und jede Karte spezielle Modulparameter benötigen, sollten Sie jetzt die Parameter für alle diese Karten eingeben, so dass alle Karten aktiv werden, wenn Sie die GRÜNE Schnittstelle konfigurieren.", -/* TR_CONFIGURE_NETWORK_DRIVERS */ -"Konfigurieren Sie die Netzwerktreiber und geben Sie an, welcher Schnittstelle jede Karte zugewiesen ist. Die aktuelle Konfiguration ist wie folgt:\n\n", -/* TR_CONFIGURE_THE_CDROM */ -"Konfigurieren Sie das CD-ROM-Laufwerk, indem Sie die richtigen Werte für IO-Adresse und/oder IRQ eingeben.", -/* TR_CONGRATULATIONS */ -"Herzlichen Glückwunsch!", -/* TR_CONGRATULATIONS_LONG */ -"%s wurde erfolgreich installiert. Entfernen Sie bitte alle eventuellen CDs aus dem Computer. Nun wird das Setup-Programm gestartet, in dem Sie ISDN, Netzwerkkarten und die Systempasswörter konfigurieren können. Wenn dies fertiggestellt ist, rufen Sie in Ihrem Webbrowser die Box mit https://%s:444 (oder welchen Namen Sie Ihrem %s auch immer gegeben haben) auf und konfigurieren die Wählverbindung und (falls nötig) die Fernwartung.", -/* TR_CONTINUE_NO_SWAP */ -"Ihre Festplatte ist sehr klein, aber sie können mit einer minimalen Auslagerungspartition weitermachen. (Mit Vorsicht benutzen).", -/* TR_CURRENT_CONFIG */ -"Aktuelle Einstellung: %s%s", -/* TR_DEFAULT_GATEWAY */ -"Standard-Gateway:", -/* TR_DEFAULT_GATEWAY_CR */ -"Standard-Gateway\n", -/* TR_DEFAULT_LEASE */ -"Voreingestellte Haltezeit (min):", -/* TR_DEFAULT_LEASE_CR */ -"Voreinstellung der Haltezeit\n", -/* TR_DETECTED */ -"Gefunden wurde: %s", -/* TR_DHCP_HOSTNAME */ -"DHCP-Hostname:", -/* TR_DHCP_HOSTNAME_CR */ -"DHCP-Hostname\n", -/* TR_DHCP_SERVER_CONFIGURATION */ -"DHCP-Konfiguration", -/* TR_DISABLED */ -"Deaktiviert", -/* TR_DISABLE_ISDN */ -"ISDN deaktivieren", -/* TR_DISK_TOO_SMALL */ -"Ihre Festplatte ist zu klein.", -/* TR_DNS_AND_GATEWAY_SETTINGS */ -"DNS- und Gateway-Einstellungen", -/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */ -"Geben Sie die DNS- und Gateway-Informationen ein. Diese Einstellungen werden nur bei einer statischen IP an der ROTEN Schnittstelle benutzt (und DHCP, falls DNS eingetragen wurde).", -/* TR_DNS_GATEWAY_WITH_GREEN */ -"Ihre Konfiguration benutzt keine Ethernet-Karte für die ROTE Schnittstelle. DNS- und Gateway-Informationen für Einwahl- verbindungen werden automatisch beim Einwählen konfiguriert.", -/* TR_DOMAINNAME */ -"Domainname", -/* TR_DOMAINNAME_CANNOT_BE_EMPTY */ -"Domain Name darf nicht leer sein.", -/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */ -"Domainname darf keine Leerzeichen enthalten.", -/* TR_DOMAINNAME_NOT_VALID_CHARS */ -"Domain Name darf nur Buchstaben, Ziffern, Bindestriche und Punkte enthalten.", -/* TR_DOMAIN_NAME_SUFFIX */ -"Domainnamen-Suffix:", -/* TR_DOMAIN_NAME_SUFFIX_CR */ -"Domainnamen-Suffix\n", -/* TR_DONE */ -"Fertig", -/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */ -"\nMöchten Sie die Einstellungen ändern?", -/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */ -"Treiber- und Karten-Zuordnungen", -/* TR_ENABLED */ -"aktiviert", -/* TR_ENABLE_ISDN */ -"ISDN aktivieren", -/* TR_END_ADDRESS */ -"Endadresse:", -/* TR_END_ADDRESS_CR */ -"Endadresse\n", -/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */ -"Einige ISDN-Karten (besonders ISA-Karten) benötigen zusätzliche Modulparameter, um die IRQ- und IO-Adress-Informationen einzustellen. Wenn Sie eine solche ISDN-Karte haben, geben Sie diese Parameter hier ein (z. B. \"io=0x280 irq=9\"). Sie werden dann bei der Erkennung der Karte berücksichtigt.", -/* TR_ENTER_ADMIN_PASSWORD */ -"Geben Sie das Passwort für den %s-Administrator 'admin' ein. Das ist der Benutzer, mit dem Sie sich an den %s-Webadministrationsseiten anmelden.", -/* TR_ENTER_DOMAINNAME */ -"Bitte geben Sie den Domainnamen ein", -/* TR_ENTER_HOSTNAME */ -"Geben Sie den Hostnamen des Rechners an:", -/* TR_ENTER_IP_ADDRESS_INFO */ -"Geben Sie die IP-Adressinformationen ein", -/* TR_ENTER_NETWORK_DRIVER */ -"Kann die Netzwerkkarte nicht automatisch erkennen. Geben Sie den Modulnamen und eventuelle Parameter für die Netzwerkkarte an.", -/* TR_ENTER_ROOT_PASSWORD */ -"Geben Sie das Passwort für den Benutzer 'root' ein. Melden Sie sich als dieser Benutzer an, um Zugriff auf die Befehlszeile zu erhalten.", -/* TR_ENTER_SETUP_PASSWORD */ -"Geben Sie das Passwort für den Benutzer 'setup' ein. Melden Sie sich als dieser Benutzer an, um das Setup-Programm zu starten.", -/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */ -"Geben Sie die IP-Adressinformationen für die folgende Schnittstelle ein - %s.", -/* TR_ENTER_THE_LOCAL_MSN */ -"Geben Sie Ihre lokale Telefonnummer ein (MSN/EAZ):", -/* TR_ENTER_URL */ -"Geben Sie die URL für ipcop-.tgz und die images/scsidrv-.img-Dateien ein. WARNUNG: DNS ist nicht verfügbar! Sie sollten jetzt nur etwas im Format 'http://X.X.X.X/' eingeben. ", -/* TR_ERROR */ -"Fehler", -/* TR_ERROR_PROBING_CDROM */ -"Kein CDROM-Laufwerk gefunden.", -/* TR_ERROR_WRITING_CONFIG */ -"Fehler beim Schreiben der Konfigurationsinformationen.", -/* TR_EURO_EDSS1 */ -"DSS1 (Euro-ISDN) (meist richtig)", -/* TR_EXTRACTING_MODULES */ -"Entpacke die Module...", -/* TR_FAILED_TO_FIND */ -"Konnte die URL-Datei nicht finden.", -/* TR_FOUND_NIC */ -"%s hat den folgenden NIC in Ihrer Maschine erkannt: %s", -/* TR_GERMAN_1TR6 */ -"1TR6", -/* TR_HELPLINE */ -" / wechselt zwischen Elementen | wählt aus", -/* TR_HOSTNAME */ -"Hostname", -/* TR_HOSTNAME_CANNOT_BE_EMPTY */ -"Der Hostname darf nicht leer sein.", -/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */ -"Der Hostname darf keine Leerzeichen enthalten.", -/* TR_HOSTNAME_NOT_VALID_CHARS */ -"Hostname darf nur Buchstaben, Ziffern und Bindestriche enthalten.", -/* TR_INITIALISING_ISDN */ -"Initialisiere ISDN...", -/* TR_INSERT_CDROM */ -"Legen Sie bitte die %s CD in das CD-ROM-Laufwerk ein.", -/* TR_INSERT_FLOPPY */ -"Legen Sie bitte die %s-Treiberdiskette in das Diskettenlaufwerk ein.", -/* TR_INSTALLATION_CANCELED */ -"Installation abgebrochen.", -/* TR_INSTALLING_FILES */ -"Installiere Dateien...", -/* TR_INSTALLING_GRUB */ -"Installiere GRUB...", -/* TR_INSTALLING_LANG_CACHE */ -"Installiere Sprachunterstützung...", -/* TR_INTERFACE */ -"Schnittstelle - %s", -/* TR_INTERFACE_FAILED_TO_COME_UP */ -"Schnittstelle konnte nicht aktiviert werden.", -/* TR_INVALID_FIELDS */ -"Die folgenden Felder sind ungültig:\n\n", -/* TR_INVALID_IO */ -"Die angegebenen Einstellungen für den IO-Port sind ungültig. ", -/* TR_INVALID_IRQ */ -"Die eingegebenen IRQ-Einstellungen sind ungültig.", -/* TR_IP_ADDRESS_CR */ -"IP-Adresse\n", -/* TR_IP_ADDRESS_PROMPT */ -"IP-Adresse:", -/* TR_ISDN_CARD */ -"ISDN-Karte", -/* TR_ISDN_CARD_NOT_DETECTED */ -"Keine ISDN-Karte gefunden. Möglicherweise müssen Sie zusätzliche Modulparameter angeben, wenn es sich um eine ISA-Karte handelt oder die Karte spezielle Anforderungen hat.", -/* TR_ISDN_CARD_SELECTION */ -"Auswahl der ISDN-Karte", -/* TR_ISDN_CONFIGURATION */ -"ISDN-Konfiguration", -/* TR_ISDN_CONFIGURATION_MENU */ -"ISDN-Konfigurationsmenü", -/* TR_ISDN_NOT_SETUP */ -"ISDN nicht eingestellt. Einige Parameter wurden nicht ausgewählt.", -/* TR_ISDN_NOT_YET_CONFIGURED */ -"ISDN wurde noch nicht konfiguriert. Wählen Sie aus, was Sie konfigurieren möchten.", -/* TR_ISDN_PROTOCOL_SELECTION */ -"Auswahl des ISDN-Protokolls", -/* TR_ISDN_STATUS */ -"ISDN ist momentan %s.\n\n Protokoll: %s\n Karte: %s\n Lokale Telefonnummer: %s\n\nWählen Sie aus, was Sie konfigurieren möchten, oder verwerfen Sie die aktuellen Einstellungen.", -/* TR_KEYBOARD_MAPPING */ -"Tastatur-Layout", -/* TR_KEYBOARD_MAPPING_LONG */ -"Wählen Sie aus dieser Liste den Tastatur-Typ aus, den Sie benutzen.", -/* TR_LEASED_LINE */ -"Standleitung (leased line)", -/* TR_LOADING_MODULE */ -"Lade Modul...", -/* TR_LOADING_PCMCIA */ -"PCMCIA-Module werden geladen...", -/* TR_LOOKING_FOR_NIC */ -"Suche nach: %s", -/* TR_MAKING_BOOT_FILESYSTEM */ -"Erstelle das Boot-Dateisystem...", -/* TR_MAKING_LOG_FILESYSTEM */ -"Erstelle das Log-Dateisystem...", -/* TR_MAKING_ROOT_FILESYSTEM */ -"Erstelle das Root-Dateisystem...", -/* TR_MAKING_SWAPSPACE */ -"Erstelle Swap-Partition...", -/* TR_MANUAL */ -"* MANUELL *", -/* TR_MAX_LEASE */ -"Maximale Haltezeit (min):", -/* TR_MAX_LEASE_CR */ -"Maximale Haltezeit\n", -/* TR_MISSING_BLUE_IP */ -"Fehlende IP-Information für das BLAUE Interface.", -/* TR_MISSING_ORANGE_IP */ -"IP-Informationen für die ORANGE Schnittstelle fehlen.", -/* TR_MISSING_RED_IP */ -"IP-Informationen für die ROTE Schnittstelle fehlen.", -/* TR_MODULE_NAME_CANNOT_BE_BLANK */ -"Der Modulname darf nicht leer sein.", -/* TR_MODULE_PARAMETERS */ -"Geben Sie den Modulnamen und die Parameter für den benötigten Treiber an.", -/* TR_MOUNTING_BOOT_FILESYSTEM */ -"Mounte das Boot-Dateisystem...", -/* TR_MOUNTING_LOG_FILESYSTEM */ -"Mounte das Log-Dateisystem...", -/* TR_MOUNTING_ROOT_FILESYSTEM */ -"Mounte das Root-Dateisystem...", -/* TR_MOUNTING_SWAP_PARTITION */ -"Mounte die Swap-Partition...", -/* TR_MSN_CONFIGURATION */ -"Lokale Telefonnummer (MSN/EAZ)", -/* TR_NETMASK_PROMPT */ -"Subnetzmaske:", -/* TR_NETWORKING */ -"Netzwerk", -/* TR_NETWORK_ADDRESS_CR */ -"Netzwerkadresse\n", -/* TR_NETWORK_ADDRESS_PROMPT */ -"Netzwerkadresse:", -/* TR_NETWORK_CONFIGURATION_MENU */ -"Netzwerkkonfiguration", -/* TR_NETWORK_CONFIGURATION_TYPE */ -"Typ der Netzwerkkonfiguration", -/* TR_NETWORK_CONFIGURATION_TYPE_LONG */ -"Wählen Sie die Netzwerkkonfiguration für %s aus. Die folgenden Konfigurationstypen listen diejenigen Schnittstellen auf, die am Ethernet angeschlossen sind. Wenn Sie diese Einstellung ändern, muss das Netzwerk neu gestartet werden und Sie müssen die Netzwerktreiber neu zuweisen.", -/* TR_NETWORK_MASK_CR */ -"Subnetzmaske\n", -/* TR_NETWORK_SETUP_FAILED */ -"Netzwerk-Setup fehlgeschlagen.", -/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */ -"Nicht genügend Karten wurden zugeordnet.", -/* TR_NO_BLUE_INTERFACE */ -"Kein BLAUES Interface zugeordnet.", -/* TR_NO_CDROM */ -"Kein CD-ROM gefunden.", -/* TR_NO_GREEN_INTERFACE */ -"Keine GRÜNE Schnittstelle zugewiesen.", -/* TR_NO_HARDDISK */ -"Keine Festplatte gefunden.", -/* TR_DISK_SELECTION */ -"Festplattenauswahl", -/* TR_DISK_SELECTION_MSG */ -"Wählen Sie die Festplatte(n), auf die Sie IPFire installieren möchten. Diese wird dann zuerst partitioniert und danach wird ein Dateisystem auf die Partitionen installiert.\n\nALLE DATEN AUF DER FESTPLATTE WERDEN GELÖSCHT.", -/* TR_NO_DISK_SELECTED */ -"Es wurde kein Datenträger ausgewählt.\n\nBitte wählen Sie einen oder mehrere Festplatten aus, um mit der Installation fortzufahren.", -/* TR_DISK_SETUP */ -"Festplatten-Setup", -/* TR_DISK_SETUP_DESC */ -"Das Installationsprogramm wird nun die ausgewählte Festplatte vorbereiten:\n\n %s\n\nMöchten Sie fortfahren?", -/* TR_RAID_SETUP */ -"RAID-Setup", -/* TR_RAID_SETUP_DESC */ -"Das Installationsprogramm wird nun eine RAID-Konfiguration auf den ausgewählten Festplatten anlegen:\n\n %s\n %s\n\nMöchten Sie fortfahren?", -/* TR_DELETE_ALL_DATA */ -"Alle Daten löschen", -/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ -"Ihre gewünschte Auswahl wird derzeit nicht unterstützt.", -/* TR_CREATING_FILESYSTEMS */ -"Erstelle Dateisysteme...", -/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ -"Die Dateisysteme konnten nicht erstellt werden.", -/* TR_MOUNTING_FILESYSTEMS */ -"Hänge Dateisysteme ein...", -/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ -"Die Dateisysteme konnten nicht eingehangen werden.", -/* TR_BUILDING_RAID */ -"Erstelle RAID...", -/* TR_UNABLE_TO_BUILD_RAID */ -"Das RAID konnte nicht erstellt werden.", -/* TR_NO_IPCOP_TARBALL_FOUND */ -"Auf dem Webserver wurde kein ipcop-Tarball gefunden.", -/* TR_NO_ORANGE_INTERFACE */ -"Keine ORANGE Schnittstelle zugewiesen.", -/* TR_NO_RED_INTERFACE */ -"Keine ROTE Schnittstelle zugewiesen.", -/* TR_NO_SCSI_IMAGE_FOUND */ -"Auf dem Webserver wurde kein SCSI-Image gefunden.", -/* TR_NO_UNALLOCATED_CARDS */ -"Es sind keine nicht zugeteilten Karten übrig; es werden aber noch mehr benötigt. Sie könnten einen Treiber aus der Liste auswählen oder eine automatische Erkennung starten.", -/* TR_OK */ -"Ok", -/* TR_PARTITIONING_DISK */ -"Partitioniere die Festplatte...", -/* TR_PASSWORDS_DO_NOT_MATCH */ -"Die Passwörter stimmen nicht überein.", -/* TR_PASSWORD_CANNOT_BE_BLANK */ -"Die Passwörter dürfen nicht leer sein.", -/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */ -"Das Passwort darf keine Leerzeichen enthalten.", -/* TR_PASSWORD_PROMPT */ -"Passwort:", -/* TR_PHONENUMBER_CANNOT_BE_EMPTY */ -"Die Telefonnummer darf nicht leer sein.", -/* TR_PREPARE_HARDDISK */ -"Das Installationsprogramm wird jetzt die Festplatte %s vorbereiten. Zunächst wird die Festplatte partitioniert. Danach wird auf den Partitionen ein Dateisystem erstellt.\n\nALLE DATEN AUF DEM LAUFWERK WERDEN GELÖSCHT. Einverstanden?", -/* TR_PRESS_OK_TO_REBOOT */ -"Drücken Sie Ok, um neu zu starten.", -/* TR_PRIMARY_DNS */ -"Primärer DNS:", -/* TR_PRIMARY_DNS_CR */ -"Primärer DNS\n", -/* TR_PROBE */ -"Automatische Erkennung", -/* TR_PROBE_FAILED */ -"Automatische Erkennung fehlgeschlagen.", -/* TR_PROBING_HARDWARE */ -"Hardwareerkennung läuft...", -/* TR_PROBING_FOR_NICS */ -"Netzwerkkartenerkennung läuft...", -/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */ -"Problem beim Setzen des %s Administrator-Passworts.", -/* TR_PROBLEM_SETTING_ROOT_PASSWORD */ -"Problem beim Setzen des 'root'-Passworts.", -/* TR_PROBLEM_SETTING_SETUP_PASSWORD */ -"Problem beim Setzen des 'setup'-Passworts.", -/* TR_PROTOCOL_COUNTRY */ -"Protokoll/Land", -/* TR_PULLING_NETWORK_UP */ -"Starte Netzwerk...", -/* TR_PUSHING_NETWORK_DOWN */ -"Fahre Netzwerk herunter...", -/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */ -"Fahre nicht-lokales Netzwerk herunter...", -/* TR_QUIT */ -"Beenden", -/* TR_RED_IN_USE */ -"ISDN (oder eine andere externe Verbindung) wird momentan benutzt. Sie können ISDN nicht konfigurieren, während die ROTE Schnittstelle aktiv ist.", -/* TR_RESTART_REQUIRED */ -"\n\nWenn die Konfiguration komplett ist, muss das Netzwerk neu gestartet werden.", -/* TR_RESTORE */ -"Wiederherstellen", -/* TR_RESTORE_CONFIGURATION */ -"Falls Sie eine Diskette mit %s-Systemeinstellungen haben, legen Sie die Diskette in das Floppylaufwerk und \ndrücken auf ", -/* TR_ROOT_PASSWORD */ -"'root'-Passwort", -/* TR_SECONDARY_DNS */ -"Sekundärer DNS:", -/* TR_SECONDARY_DNS_CR */ -"Sekundärer DNS\n", -/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */ -"Sekundären DNS angegeben ohne primären DNS", -/* TR_SECTION_MENU */ -"Auswahlmenu", -/* TR_SELECT */ -"Auswählen", -/* TR_SELECT_CDROM_TYPE */ -"Wählen Sie den Typ des CD-ROM-Laufwerks aus", -/* TR_SELECT_CDROM_TYPE_LONG */ -"Es wurde kein CD-ROM-Laufwerk in diesem Rechner gefunden. Bitte wählen Sie aus, welchen der folgenden Treiber Sie benutzen möchten, damit %s das CD-ROM-Laufwerk ansprechen kann.", -/* TR_SELECT_INSTALLATION_MEDIA */ -"Wählen Sie das Installationsmedium", -/* TR_SELECT_INSTALLATION_MEDIA_LONG */ -"%s kann von verschiedenen Programmquellen installiert werden. Am einfachsten ist, Sie benutzen das eingebaute CD-ROM-Laufwerk. Falls der Computer kein CD-ROM-Laufwerk besitzt, können Sie von einem anderen Rechner im LAN installieren, der die Installationsdateien per HTTP oder FTP zur Verfügung stellt.", -/* TR_SELECT_NETWORK_DRIVER */ -"Wählen Sie den Netzwerktreiber aus", -/* TR_SELECT_NETWORK_DRIVER_LONG */ -"Wählen Sie den Treiber für die in diesem Rechner eingebaute Netzwerkkarte aus. Wenn Sie MANUELL auswählen, können Sie den Modulnamen des Treibers und die Parameter selbst angeben (z. B. für Treiber mit speziellen Anforderungen, wie bei ISA-Karten).", -/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */ -"Wählen Sie die Schnittstelle aus, die Sie neu konfigurieren möchten.", -/* TR_SELECT_THE_ITEM */ -"Wählen Sie den Punkt aus, den Sie konfigurieren möchten:", -/* TR_SETTING_ADMIN_PASSWORD */ -"Setze %s-Administrator-Passwort....", -/* TR_SETTING_ROOT_PASSWORD */ -"Setze 'root'-Passwort....", -/* TR_SETTING_SETUP_PASSWORD */ -"Setze 'setup'-Passwort...", -/* TR_SETUP_FINISHED */ -"Das Setup ist vollständig beendet. Drücken Sie Ok.", -/* TR_SETUP_NOT_COMPLETE */ -"Das erste Setup wurde nicht vollständig durchgeführt. Sie müssen Setup vollständig beenden; dies können Sie durch Ausführen von Setup in der Shell nachholen.", -/* TR_SETUP_PASSWORD */ -"'setup'-Passwort", -/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */ -"Zusätzliche Modulparameter angeben", -/* TR_SINGLE_GREEN */ -"In ihrer Konfiguration ist eine GRÜNE Schnittstelle eingestellt.", -/* TR_SKIP */ -"Überspringen", -/* TR_START_ADDRESS */ -"Anfangsadresse:", -/* TR_START_ADDRESS_CR */ -"Anfangsadressen\n", -/* TR_STATIC */ -"Statisch", -/* TR_SUGGEST_IO */ -"(schlage vor %x)", -/* TR_SUGGEST_IRQ */ -"(schlage vor %d)", -/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */ -"Dieses Treibermodul ist bereits geladen.", -/* TR_TIMEZONE */ -"Zeitzone", -/* TR_TIMEZONE_LONG */ -"Wählen Sie die Zeitzone aus, in der Sie sich befinden.", -/* TR_UNABLE_TO_EJECT_CDROM */ -"Kann die CD-ROM nicht auswerfen.", -/* TR_UNABLE_TO_EXTRACT_MODULES */ -"Module können nicht extrahiert werden.", -/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */ -"Kann keine weiteren Treiber finden.", -/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */ -"Kann keine ISDN-Karte in diesem Computer finden. Möglicherweise müssen Sie zusätzliche Modulparameter angeben, wenn es sich um eine ISA-Karte handelt oder die Karte spezielle Anforderungen hat.", -/* TR_UNABLE_TO_INITIALISE_ISDN */ -"Kann ISDN nicht initialisieren.", -/* TR_UNABLE_TO_INSTALL_FILES */ -"Kann die Dateien nicht installieren.", -/* TR_UNABLE_TO_INSTALL_LANG_CACHE */ -"Kann Sprachunterstützung nicht installieren.", -/* TR_UNABLE_TO_INSTALL_GRUB */ -"Kann GRUB nicht installieren.", -/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */ -"Kann Treibermodul nicht laden.", -/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */ -"Kann das Boot-Dateisystem nicht erstellen.", -/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */ -"Kann das Log-Dateisystem nicht erstellen.", -/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */ -"Kann das Root-Dateisystem nicht erstellen.", -/* TR_UNABLE_TO_MAKE_SWAPSPACE */ -"Kann Swap-Partition nicht erstellen.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */ -"Kann symbolischen Link /dev/harddisk nicht anlegen.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */ -"Kann symbolischen Link /dev/harddisk1 nicht anlegen.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */ -"Kann symbolischen Link /dev/harddisk2 nicht anlegen.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */ -"Kann symbolischen Link /dev/harddisk3 nicht anlegen.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */ -"Kann symbolischen Link /dev/harddisk4 nicht anlegen.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */ -"Symlink /dev/root kann nicht erzeugt werden.", -/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */ -"Kann das Root-Dateisystem nicht mounten.", -/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */ -"Kann das Log-Dateisystem nicht mounten.", -/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */ -"Das proc-Dateisystem kann nicht gemountet werden.", -/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */ -"Kann das Root-Dateisystem nicht mounten.", -/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */ -"Kann die Swap-Partition nicht unmounten.", -/* TR_UNABLE_TO_OPEN_HOSTS_FILE */ -"Kann primäre hosts-Datei nicht öffnen.", -/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */ -"Kann Datei mit Einstellungen nicht öffnen", -/* TR_UNABLE_TO_PARTITION */ -"Kann die Festplatte nicht partitionieren.", -/* TR_UNABLE_TO_REMOVE_TEMP_FILES */ -"Kann temporär heruntergeladene Dateien nicht löschen.", -/* TR_UNABLE_TO_SET_HOSTNAME */ -"Kann Hostnamen nicht setzen.", -/* TR_UNABLE_TO_UNMOUNT_CDROM */ -"Kann die CD-ROM bzw. Floppy nicht unmounten.", -/* TR_UNABLE_TO_UNMOUNT_HARDDISK */ -"Kann die Festplatte nicht unmounten.", -/* TR_UNABLE_TO_WRITE_ETC_FSTAB */ -"Kann /etc/fstab nicht schreiben", -/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */ -"Kann /etc/hostname nicht schreiben", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS */ -"Kann /etc/hosts nicht schreiben.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */ -"Kann /etc/hosts.allow nicht schreiben.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */ -"Kann /etc/hosts.deny nicht schreiben.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */ -"Kann %s/ethernet/settings nicht schreiben.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */ -"Kann %s/main/hostname.conf nicht schreiben", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */ -"Kann %s/main/settings nicht schreiben.", -/* TR_UNCLAIMED_DRIVER */ -"Es gibt eine nicht zugeordnete Ethernet-Karte des Typs:\n%s\n\nSie können sie zuweisen an:", -/* TR_UNKNOWN */ -"UNBEKANNT", -/* TR_UNSET */ -"NICHT GESETZT", -/* TR_USB_KEY_VFAT_ERR */ -"Dieser USB-Stick ist ungültig (keine VFAT Partiton gefunden).", -/* TR_US_NI1 */ -"US NI1", -/* TR_WARNING */ -"WARNUNG", -/* TR_WARNING_LONG */ -"Wenn Sie diese IP-Adresse ändern, während Sie über den Fernwartungszugang zugreifen, wird die Verbindung zum %s-Rechner abbrechen. Sie müssen dann eine Verbindung zur neuen IP-Adresse aufbauen. Dies ist ein riskanter Vorgang, der nur versucht werden sollte, wenn Sie physikalischen Zugriff auf den Rechner haben, für den Fall, dass etwas schief geht.", -/* TR_WELCOME */ -"Willkommen zum %s Installationsprogramm. Wenn Sie auf irgendeiner der folgenden Seiten 'Abbrechen' auswählen, wird der Computer neu gestartet.", -/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */ -"Ihre Konfiguration ist für eine einzelne GRÜNE Schnittstelle eingestellt, der bereits ein Treiber zugewiesen ist.", -/* TR_YES */ -"Ja", -/* TR_NO */ -"Nein", -/* TR_AS */ -"als", -/* TR_IGNORE */ -"Ignorieren", -/* TR_PPP_DIALUP */ -"PPP Einwahl (PPPoE, Modem, ATM ...)", -/* TR_DHCP */ -"DHCP", -/* TR_DHCP_STARTSERVER */ -"Starte den DHCP-Server ...", -/* TR_DHCP_STOPSERVER */ -"Stoppe den DHCP-Server ...", -/* TR_LICENSE_ACCEPT */ -"Ich akzeptiere diese Lizenz.", -/* TR_LICENSE_NOT_ACCEPTED */ -"Die Lizenz wurde nicht akzeptiert. Abbruch!", -/* TR_EXT4FS */ -"EXT4 - Dateisystem", -/* TR_EXT4FS_WO_JOURNAL */ -"EXT4 - Dateisystem ohne Journal", -/* TR_XFS */ -"XFS - Dateisystem", -/* TR_REISERFS */ -"ReiserFS - Dateisystem", -/* TR_NO_LOCAL_SOURCE */ -"Kein lokales Quellmedium gefunden. Starte Download.", -/* TR_DOWNLOADING_ISO */ -"Lade Installations-Abbild ...", -/* TR_DOWNLOAD_ERROR */ -"Beim Herunterladen ist ein Fehler aufgetreten!", -/* TR_DHCP_FORCE_MTU */ -"DHCP MTU setzen:", -/* TR_IDENTIFY */ -"Identifizieren", -/* TR_IDENTIFY_SHOULD_BLINK */ -"Die Leds dieses Netzwerkports sollten jetzt blinken ...", -/* TR_IDENTIFY_NOT_SUPPORTED */ -"Dieser Netzwerkport untestützt die Funktion leider nicht.", -}; diff --git a/langs/en/install/lang_en.c b/langs/en/install/lang_en.c deleted file mode 100644 index 12321cdeb..000000000 --- a/langs/en/install/lang_en.c +++ /dev/null @@ -1,626 +0,0 @@ -/* - * English (en) Data File - * - * This file is part of the IPFire. - * - * IPCop 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. - * - * IPCop 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 IPCop; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * (c) IPFire Team - * - * based on work of SmoothWall and IPCop - * - * (c) The SmoothWall Team - * - */ - -#include "libsmooth.h" - -char *en_tr[] = { - -/* TR_ISDN */ -"ISDN", -/* TR_ERROR_PROBING_ISDN */ -"Unable to scan for ISDN devices.", -/* TR_PROBING_ISDN */ -"Scanning and configuring ISDN devices.", -/* TR_MISSING_GREEN_IP */ -"Missing Green IP!", -/* TR_CHOOSE_FILESYSTEM */ -"Please choose your filesystem:", -/* TR_NOT_ENOUGH_INTERFACES */ -"Not enough netcards for your choice.\n\nNeeded: %d - Available: %d\n", -/* TR_INTERFACE_CHANGE */ -"Please choose the interface you wish to change.\n\n", -/* TR_NETCARD_COLOR */ -"Assigned Cards", -/* TR_REMOVE */ -"Remove", -/* TR_MISSING_DNS */ -"Misssing DNS.\n", -/* TR_MISSING_DEFAULT */ -"Missing Default Gateway.\n", -/* TR_JOURNAL_EXT3 */ -"Creating journal for Ext3...", -/* TR_CHOOSE_NETCARD */ -"Please choose a networkcard for the following interface - %s.", -/* TR_NETCARDMENU2 */ -"Extended Networkmenu", -/* TR_ERROR_INTERFACES */ -"There are no free interfaces on your system.", -/* TR_REMOVE_CARD */ -"Should the allocation for the networkcard be deleted? - %s", -/* TR_JOURNAL_ERROR */ -"Could not create the journal, using fallback to ext2.", -/* TR_FILESYSTEM */ -"Choose Filesystem", -/* TR_ADDRESS_SETTINGS */ -"Address settings", -/* TR_ADMIN_PASSWORD */ -"'admin' password", -/* TR_AGAIN_PROMPT */ -"Again:", -/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */ -"All cards successfully allocated.", -/* TR_AUTODETECT */ -"* AUTODETECT *", -/* TR_BUILDING_INITRD */ -"Building ramdisk...", -/* TR_CANCEL */ -"Cancel", -/* TR_CARD_ASSIGNMENT */ -"Card assignment", -/* TR_CHECKING */ -"Checking URL...", -/* TR_CHECKING_FOR */ -"Checking for: %s", -/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */ -"Choose the ISDN card installed in this computer.", -/* TR_CHOOSE_THE_ISDN_PROTOCOL */ -"Choose the ISDN protocol you require.", -/* TR_CONFIGURE_DHCP */ -"Configure the DHCP server by entering the settings information.", -/* TR_CONFIGURE_NETWORKING */ -"Configure networking", -/* TR_CONFIGURE_NETWORKING_LONG */ -"You should now configure networking by first loading the correct driver for the GREEN interface. You can do this by either auto-probing for a network card, or by choosing the correct driver from a list. Note that if you have more then one network card installed, you will be able to configure the others later on in the installation. Also note that if you have more then one card which is the same type as GREEN and each card requires special module parameters, you should enter parameters for all cards of this type such that all cards can become active when you configure the GREEN interface.", -/* TR_CONFIGURE_NETWORK_DRIVERS */ -"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n\n", -/* TR_CONFIGURE_THE_CDROM */ -"Configure the CDROM by choosing the appropriate IO address and/or IRQ.", -/* TR_CONGRATULATIONS */ -"Congratulations!", -/* TR_CONGRATULATIONS_LONG */ -"%s was successfully installed. Please remove any CDROMs in the computer. Setup will now run where you may configure ISDN, network cards, and the system passwords. After Setup has been completed, you should point your web browser at https://%s:444 (or whatever you name your %s), and configure dialup networking (if required) and remote access.", -/* TR_CONTINUE_NO_SWAP */ -"Your harddisk is very small, but you can continue with an very small swap. (Use with caution).", -/* TR_CURRENT_CONFIG */ -"Current config: %s%s", -/* TR_DEFAULT_GATEWAY */ -"Default Gateway:", -/* TR_DEFAULT_GATEWAY_CR */ -"Default Gateway\n", -/* TR_DEFAULT_LEASE */ -"Default lease (mins):", -/* TR_DEFAULT_LEASE_CR */ -"Default lease time\n", -/* TR_DETECTED */ -"Detected a: %s", -/* TR_DHCP_HOSTNAME */ -"DHCP Hostname:", -/* TR_DHCP_HOSTNAME_CR */ -"DHCP Hostname\n", -/* TR_DHCP_SERVER_CONFIGURATION */ -"DHCP server configuration", -/* TR_DISABLED */ -"Disabled", -/* TR_DISABLE_ISDN */ -"Disable ISDN", -/* TR_DISK_TOO_SMALL */ -"Your harddisk is too small.", -/* TR_DNS_AND_GATEWAY_SETTINGS */ -"DNS and Gateway settings", -/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */ -"Enter the DNS and gateway information. These settings are used only with Static IP (and DHCP if DNS set) on the RED interface.", -/* TR_DNS_GATEWAY_WITH_GREEN */ -"Your configuration does not utilise an ethernet adaptor for its RED interface. DNS and Gateway information for dialup users is configured automatically at dialup time.", -/* TR_DOMAINNAME */ -"Domain name", -/* TR_DOMAINNAME_CANNOT_BE_EMPTY */ -"Domain name cannot be empty.", -/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */ -"Domain name cannot contain spaces.", -/* TR_DOMAINNAME_NOT_VALID_CHARS */ -"Domain name may only contain letters, numbers, hyphens and periods.", -/* TR_DOMAIN_NAME_SUFFIX */ -"Domain name suffix:", -/* TR_DOMAIN_NAME_SUFFIX_CR */ -"Domain name suffix\n", -/* TR_DONE */ -"Done", -/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */ -"\nDo you wish to change these settings?", -/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */ -"Drivers and card assignments", -/* TR_ENABLED */ -"Enabled", -/* TR_ENABLE_ISDN */ -"Enable ISDN", -/* TR_END_ADDRESS */ -"End address:", -/* TR_END_ADDRESS_CR */ -"End address\n", -/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */ -"Some ISDN cards (especially ISA ones) may require additional module parameters for setting IRQ and IO address information. If you have such a ISDN card, enter these extra parameters here. For example: \"io=0x280 irq=9\". They will be used during card detection.", -/* TR_ENTER_ADMIN_PASSWORD */ -"Enter %s 'admin' user password. This is the user to use for logging into the %s web administration pages.", -/* TR_ENTER_DOMAINNAME */ -"Enter Domain name", -/* TR_ENTER_HOSTNAME */ -"Enter the machine's hostname.", -/* TR_ENTER_IP_ADDRESS_INFO */ -"Enter the IP address information", -/* TR_ENTER_NETWORK_DRIVER */ -"Failed to detect a network card automatically. Enter the driver and optional parameters for the network card.", -/* TR_ENTER_ROOT_PASSWORD */ -"Enter the 'root' user password. Login as this user for commandline access.", -/* TR_ENTER_SETUP_PASSWORD */ -"TO BE REMOVED", -/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */ -"Enter the IP address information for the %s interface.", -/* TR_ENTER_THE_LOCAL_MSN */ -"Enter the local phone number (MSN/EAZ).", -/* TR_ENTER_URL */ -"Enter the URL path to the ipcop-.tgz and images/scsidrv-.img files. WARNING: DNS not available! This should now just be http://X.X.X.X/", -/* TR_ERROR */ -"Error", -/* TR_ERROR_PROBING_CDROM */ -"No CDROM drive found.", -/* TR_ERROR_WRITING_CONFIG */ -"Error writing configuration information.", -/* TR_EURO_EDSS1 */ -"Euro (EDSS1)", -/* TR_EXTRACTING_MODULES */ -"Extracting modules...", -/* TR_FAILED_TO_FIND */ -"Failed to find URL file.", -/* TR_FOUND_NIC */ -"%s has detected the following NIC in your machine: %s", -/* TR_GERMAN_1TR6 */ -"German 1TR6", -/* TR_HELPLINE */ -" / between elements | selects", -/* TR_HOSTNAME */ -"Hostname", -/* TR_HOSTNAME_CANNOT_BE_EMPTY */ -"Hostname cannot be empty.", -/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */ -"Hostname cannot contain spaces.", -/* TR_HOSTNAME_NOT_VALID_CHARS */ -"Hostname may only contain letters, numbers and hyphens.", -/* TR_INITIALISING_ISDN */ -"Initialising ISDN...", -/* TR_INSERT_CDROM */ -"Please insert the %s CD in the CDROM drive.", -/* TR_INSERT_FLOPPY */ -"Please insert the %s driver diskette in the floppy drive.", -/* TR_INSTALLATION_CANCELED */ -"Installation cancelled.", -/* TR_INSTALLING_FILES */ -"Installing files...", -/* TR_INSTALLING_GRUB */ -"Installing GRUB...", -/* TR_INSTALLING_LANG_CACHE */ -"Installing language files...", -/* TR_INTERFACE */ -"Interface - %s", -/* TR_INTERFACE_FAILED_TO_COME_UP */ -"Interface failed to come up.", -/* TR_INVALID_FIELDS */ -"The following fields are invalid:\n\n", -/* TR_INVALID_IO */ -"The IO port details entered are invalid. ", -/* TR_INVALID_IRQ */ -"The IRQ details entered are invalid.", -/* TR_IP_ADDRESS_CR */ -"IP address\n", -/* TR_IP_ADDRESS_PROMPT */ -"IP address:", -/* TR_ISDN_CARD */ -"ISDN card", -/* TR_ISDN_CARD_NOT_DETECTED */ -"ISDN card not detected. You may need to specify additional module parameters if the card is an ISA type or it has special requirements.", -/* TR_ISDN_CARD_SELECTION */ -"ISDN card selection", -/* TR_ISDN_CONFIGURATION */ -"ISDN Configuration", -/* TR_ISDN_CONFIGURATION_MENU */ -"ISDN configuration menu", -/* TR_ISDN_NOT_SETUP */ -"ISDN not setup. Some items have not been selected.", -/* TR_ISDN_NOT_YET_CONFIGURED */ -"ISDN has not yet been configured. Select the item you wish to configure.", -/* TR_ISDN_PROTOCOL_SELECTION */ -"ISDN protocol selection", -/* TR_ISDN_STATUS */ -"ISDN is currently %s.\n\n Protocol: %s\n Card: %s\n Local phone number: %s\n\nSelect the item you wish to reconfigure, or choose to use the current settings.", -/* TR_KEYBOARD_MAPPING */ -"Keyboard mapping", -/* TR_KEYBOARD_MAPPING_LONG */ -"Choose the type of keyboard you are using from the list below.", -/* TR_LEASED_LINE */ -"Leased line", -/* TR_LOADING_MODULE */ -"Loading module...", -/* TR_LOADING_PCMCIA */ -"Loading PCMCIA modules...", -/* TR_LOOKING_FOR_NIC */ -"Looking for: %s", -/* TR_MAKING_BOOT_FILESYSTEM */ -"Making boot filesystem...", -/* TR_MAKING_LOG_FILESYSTEM */ -"Making log filesystem...", -/* TR_MAKING_ROOT_FILESYSTEM */ -"Making root filesystem...", -/* TR_MAKING_SWAPSPACE */ -"Making swap space...", -/* TR_MANUAL */ -"* MANUAL *", -/* TR_MAX_LEASE */ -"Max lease (mins):", -/* TR_MAX_LEASE_CR */ -"Max lease time\n", -/* TR_MISSING_BLUE_IP */ -"Missing IP information on the BLUE interface.", -/* TR_MISSING_ORANGE_IP */ -"Missing IP information on the ORANGE interface.", -/* TR_MISSING_RED_IP */ -"Missing IP information on the RED interface.", -/* TR_MODULE_NAME_CANNOT_BE_BLANK */ -"Module name cannot be blank.", -/* TR_MODULE_PARAMETERS */ -"Enter the module name and parameters for the driver you require.", -/* TR_MOUNTING_BOOT_FILESYSTEM */ -"Mounting boot filesystem...", -/* TR_MOUNTING_LOG_FILESYSTEM */ -"Mounting log filesystem...", -/* TR_MOUNTING_ROOT_FILESYSTEM */ -"Mounting root filesystem...", -/* TR_MOUNTING_SWAP_PARTITION */ -"Mounting swap partition...", -/* TR_MSN_CONFIGURATION */ -"Local phone number (MSN/EAZ)", -/* TR_NETMASK_PROMPT */ -"Network mask:", -/* TR_NETWORKING */ -"Networking", -/* TR_NETWORK_ADDRESS_CR */ -"Network address\n", -/* TR_NETWORK_ADDRESS_PROMPT */ -"Network address:", -/* TR_NETWORK_CONFIGURATION_MENU */ -"Network configuration menu", -/* TR_NETWORK_CONFIGURATION_TYPE */ -"Network configuration type", -/* TR_NETWORK_CONFIGURATION_TYPE_LONG */ -"Select the network configuration for %s. The following configuration types list those interfaces which have ethernet attached. If you change this setting, a network restart will be required, and you will have to reconfigure the network driver assignments.", -/* TR_NETWORK_MASK_CR */ -"Network mask\n", -/* TR_NETWORK_SETUP_FAILED */ -"Network setup failed.", -/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */ -"Not enough cards were allocated.", -/* TR_NO_BLUE_INTERFACE */ -"No BLUE interface assigned.", -/* TR_NO_CDROM */ -"No CD-ROM found.", -/* TR_NO_GREEN_INTERFACE */ -"No GREEN interface assigned.", -/* TR_NO_HARDDISK */ -"No hard disk found.", -/* TR_DISK_SELECTION */ -"Disk Selection", -/* TR_DISK_SELECTION_MSG */ -"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", -/* TR_NO_DISK_SELECTED */ -"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", -/* TR_DISK_SETUP */ -"Disk Setup", -/* TR_DISK_SETUP_DESC */ -"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", -/* TR_RAID_SETUP */ -"RAID Setup", -/* TR_RAID_SETUP_DESC */ -"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", -/* TR_DELETE_ALL_DATA */ -"Delete all data", -/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ -"You disk configuration is currently not supported.", -/* TR_CREATING_FILESYSTEMS */ -"Creating filesystems...", -/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ -"Unable to create filesystems.", -/* TR_MOUNTING_FILESYSTEMS */ -"Mounting filesystems...", -/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ -"Unable to mount filesystems.", -/* TR_BUILDING_RAID */ -"Building RAID...", -/* TR_UNABLE_TO_BUILD_RAID */ -"Unable to build RAID.", -/* TR_NO_IPCOP_TARBALL_FOUND */ -"No ipcop tarball found on Web Server.", -/* TR_NO_ORANGE_INTERFACE */ -"No ORANGE interface assigned.", -/* TR_NO_RED_INTERFACE */ -"No RED interface assigned.", -/* TR_NO_SCSI_IMAGE_FOUND */ -"No SCSI image found on Web Server.", -/* TR_NO_UNALLOCATED_CARDS */ -"No unallocated cards remaining, more are required. You may autodetect and look for more cards, or choose to select a driver from the list.", -/* TR_OK */ -"Ok", -/* TR_PARTITIONING_DISK */ -"Partitioning disk...", -/* TR_PASSWORDS_DO_NOT_MATCH */ -"Passwords do not match.", -/* TR_PASSWORD_CANNOT_BE_BLANK */ -"Password cannot be blank.", -/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */ -"Password cannot contain spaces.", -/* TR_PASSWORD_PROMPT */ -"Password:", -/* TR_PHONENUMBER_CANNOT_BE_EMPTY */ -"Phone number cannot be empty.", -/* TR_PREPARE_HARDDISK */ -"The installation program will now prepare the harddisk on %s. First the disk will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED. Do you agree to continue?", -/* TR_PRESS_OK_TO_REBOOT */ -"Press Ok to reboot.", -/* TR_PRIMARY_DNS */ -"Primary DNS:", -/* TR_PRIMARY_DNS_CR */ -"Primary DNS\n", -/* TR_PROBE */ -"Probe", -/* TR_PROBE_FAILED */ -"Auto detecting failed.", -/* TR_PROBING_HARDWARE */ -"Probing hardware...", -/* TR_PROBING_FOR_NICS */ -"Probing for NICs...", -/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */ -"Problem setting %s 'admin' user password.", -/* TR_PROBLEM_SETTING_ROOT_PASSWORD */ -"Problem setting 'root' password.", -/* TR_PROBLEM_SETTING_SETUP_PASSWORD */ -"TO BE REMOVED", -/* TR_PROTOCOL_COUNTRY */ -"Protocol/Country", -/* TR_PULLING_NETWORK_UP */ -"Pulling network up...", -/* TR_PUSHING_NETWORK_DOWN */ -"Pushing network down...", -/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */ -"Pushing non local network down...", -/* TR_QUIT */ -"Quit", -/* TR_RED_IN_USE */ -"ISDN (or another external connection) is currently in use. You may not configure ISDN while the RED interface is active.", -/* TR_RESTART_REQUIRED */ -"\n\nWhen configuration is complete, a network restart will be required.", -/* TR_RESTORE */ -"Restore", -/* TR_RESTORE_CONFIGURATION */ -"If you have a floppy with an %s system configuration on it, place the floppy in the floppy drive and press the Restore button.", -/* TR_ROOT_PASSWORD */ -"'root' password", -/* TR_SECONDARY_DNS */ -"Secondary DNS:", -/* TR_SECONDARY_DNS_CR */ -"Secondary DNS\n", -/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */ -"Secondary DNS specified without a Primary DNS", -/* TR_SECTION_MENU */ -"Section menu", -/* TR_SELECT */ -"Select", -/* TR_SELECT_CDROM_TYPE */ -"Select CDROM type", -/* TR_SELECT_CDROM_TYPE_LONG */ -"No CD-ROM was detected in this machine. Please select which of the following drivers you wish to use so that %s can access the CD-ROM.", -/* TR_SELECT_INSTALLATION_MEDIA */ -"Select installation media", -/* TR_SELECT_INSTALLATION_MEDIA_LONG */ -"%s can be installed from multiple sources. The simplest is to use the machines CDROM drive. If the computer lacks a drive, you may install via another machine on the LAN which has the installation files available via HTTP or FTP.", -/* TR_SELECT_NETWORK_DRIVER */ -"Select network driver", -/* TR_SELECT_NETWORK_DRIVER_LONG */ -"Select the network driver for the card installed in this machine. If you select MANUAL, you will be given an opportunity to enter the driver module name and parameters for drivers which have special requirements, such as ISA cards.", -/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */ -"Select the interface you wish to reconfigure.", -/* TR_SELECT_THE_ITEM */ -"Select the item you wish to configure.", -/* TR_SETTING_ADMIN_PASSWORD */ -"Setting %s 'admin' user password...", -/* TR_SETTING_ROOT_PASSWORD */ -"Setting 'root' password....", -/* TR_SETTING_SETUP_PASSWORD */ -"TO BE REMOVED", -/* TR_SETUP_FINISHED */ -"Setup is complete. Press Ok.", -/* TR_SETUP_NOT_COMPLETE */ -"Initial setup was not entirely complete. You must ensure that Setup is properly finished by running setup again at the shell.", -/* TR_SETUP_PASSWORD */ -"TO BE REMOVED", -/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */ -"Set additional module parameters", -/* TR_SINGLE_GREEN */ -"Your configuration is set for a single GREEN interface.", -/* TR_SKIP */ -"Skip", -/* TR_START_ADDRESS */ -"Start address:", -/* TR_START_ADDRESS_CR */ -"Start address\n", -/* TR_STATIC */ -"Static", -/* TR_SUGGEST_IO */ -"(suggest %x)", -/* TR_SUGGEST_IRQ */ -"(suggest %d)", -/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */ -"This driver module is already loaded.", -/* TR_TIMEZONE */ -"Timezone", -/* TR_TIMEZONE_LONG */ -"Choose the timezone you are in from the list below.", -/* TR_UNABLE_TO_EJECT_CDROM */ -"Unable to eject the CDROM.", -/* TR_UNABLE_TO_EXTRACT_MODULES */ -"Unable to extract modules.", -/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */ -"Unable to find any additional drivers.", -/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */ -"Unable to find an ISDN card in this computer. You may need to specify additional module parameters if the card is an ISA type or it has special requirements.", -/* TR_UNABLE_TO_INITIALISE_ISDN */ -"Unable to initialise ISDN.", -/* TR_UNABLE_TO_INSTALL_FILES */ -"Unable to install files.", -/* TR_UNABLE_TO_INSTALL_LANG_CACHE */ -"Unable to install language files.", -/* TR_UNABLE_TO_INSTALL_GRUB */ -"Unable to install GRUB.", -/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */ -"Unable to load driver module.", -/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */ -"Unable to make boot filesystem.", -/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */ -"Unable to make log filesystem.", -/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */ -"Unable to make root filesystem.", -/* TR_UNABLE_TO_MAKE_SWAPSPACE */ -"Unable to make swap space.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */ -"Unable to create symlink /dev/harddisk.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */ -"Unable to create symlink /dev/harddisk1.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */ -"Unable to create symlink /dev/harddisk2.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */ -"Unable to create symlink /dev/harddisk3.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */ -"Unable to create symlink /dev/harddisk4.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */ -"Unable to create symlink /dev/root.", -/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */ -"Unable to mount boot filesystem.", -/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */ -"Unable to mount log filesystem.", -/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */ -"Unable to mount proc filesystem.", -/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */ -"Unable to mount root filesystem.", -/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */ -"Unable to mount the swap partition.", -/* TR_UNABLE_TO_OPEN_HOSTS_FILE */ -"Unable to open main hosts file.", -/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */ -"Unable to open settings file", -/* TR_UNABLE_TO_PARTITION */ -"Unable to partition the disk.", -/* TR_UNABLE_TO_REMOVE_TEMP_FILES */ -"Unable to remove temporary downloaded files.", -/* TR_UNABLE_TO_SET_HOSTNAME */ -"Unable to set hostname.", -/* TR_UNABLE_TO_UNMOUNT_CDROM */ -"Unable to unmount the CDROM/floppydisk.", -/* TR_UNABLE_TO_UNMOUNT_HARDDISK */ -"Unable to unmount harddisk.", -/* TR_UNABLE_TO_WRITE_ETC_FSTAB */ -"Unable to write /etc/fstab", -/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */ -"Unable to write /etc/hostname", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS */ -"Unable to write /etc/hosts.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */ -"Unable to write /etc/hosts.allow.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */ -"Unable to write /etc/hosts.deny.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */ -"Unable to write %s/ethernet/settings.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */ -"Unable to write %s/main/hostname.conf", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */ -"Unable to write %s/main/settings.", -/* TR_UNCLAIMED_DRIVER */ -"There is an unclaimed ethernet card of type:\n%s\n\nYou can assign this to:", -/* TR_UNKNOWN */ -"UNKNOWN", -/* TR_UNSET */ -"UNSET", -/* TR_USB_KEY_VFAT_ERR */ -"This USB key is invalid (no vfat partition found).", -/* TR_US_NI1 */ -"US NI1", -/* TR_WARNING */ -"WARNING", -/* TR_WARNING_LONG */ -"If you change this IP address, and you are logged in remotely, your connection to the %s machine will be broken, and you will have to reconnect on the new IP. This is a risky operation, and should only be attempted if you have physical access to the machine, should something go wrong.", -/* TR_WELCOME */ -"Welcome to the %s installation program. Selecting Cancel on any of the following screens will reboot the computer.", -/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */ -"Your configuration is set for a single GREEN interface, which already has a driver assigned.", -/* TR_YES */ -"Yes", -/* TR_NO */ -"No", -/* TR_AS */ -"as", -/* TR_IGNORE */ -"Ignore", -/* TR_PPP_DIALUP */ -"PPP DIALUP (PPPoE, modem, ATM ...)", -/* TR_DHCP */ -"DHCP", -/* TR_DHCP_STARTSERVER */ -"Starting DHCP-server ...", -/* TR_DHCP_STOPSERVER */ -"Stopping DHCP-server ...", -/* TR_LICENSE_ACCEPT */ -"I accept this license.", -/* TR_LICENSE_NOT_ACCEPTED */ -"License not accepted. Exit!", -/* TR_EXT4FS */ -"EXT4 - Filesystem", -/* TR_EXT4FS_WO_JOURNAL */ -"EXT4 - Filesystem without journal", -/* TR_XFS */ -"XFS - Filesystem", -/* TR_REISERFS */ -"ReiserFS - Filesystem", -/* TR_NO_LOCAL_SOURCE */ -"No local source media found. Starting download.", -/* TR_DOWNLOADING_ISO */ -"Downloading Installation-Image ...", -/* TR_DOWNLOAD_ERROR */ -"Error while downloading!", -/* TR_DHCP_FORCE_MTU */ -"Force DHCP mtu:", -/* TR_IDENTIFY */ -"Identify", -/* TR_IDENTIFY_SHOULD_BLINK */ -"Selected port should blink now ...", -/* TR_IDENTIFY_NOT_SUPPORTED */ -"Function is not supported by this port.", -}; diff --git a/langs/es/install/lang_es.c b/langs/es/install/lang_es.c deleted file mode 100644 index b23bb573c..000000000 --- a/langs/es/install/lang_es.c +++ /dev/null @@ -1,622 +0,0 @@ -/* - * Spanish (es) Data File - * - * This file is part of the IPFire. - * - * IPFire 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. - * - * IPFire 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 IPFire; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * (c) IPFire Team - * - */ - -#include "libsmooth.h" - -char *es_tr[] = { - -/* TR_ISDN */ -"ISDN", -/* TR_ERROR_PROBING_ISDN */ -"Imposibe escanear dispositivos ISDN.", -/* TR_PROBING_ISDN */ -"Buscando y configurando dispositivos ISDN.", -/* TR_MISSING_GREEN_IP */ -"¡Hace falta la dirección ip en GREEN!", -/* TR_CHOOSE_FILESYSTEM */ -"Por favor elija su sistema de Archivos:", -/* TR_NOT_ENOUGH_INTERFACES */ -"No hay suficientes tarjetas de red para su selección.\n\nNecesarias: %d - Disponibles: %d\n", -/* TR_INTERFACE_CHANGE */ -"Por favor elija la interfaz que desea modificar.\n\n", -/* TR_NETCARD_COLOR */ -"Tarjetas de red asignadas", -/* TR_REMOVE */ -"Remover", -/* TR_MISSING_DNS */ -"Faltan DNS.\n", -/* TR_MISSING_DEFAULT */ -"Falta la puerta de enlace por defecto.\n", -/* TR_JOURNAL_EXT3 */ -"Creando journal para Ext3...", -/* TR_CHOOSE_NETCARD */ -"Por favor elija una tarjeta de red para la siguiente interfaz - %s.", -/* TR_NETCARDMENU2 */ -"Menú de Red extendido", -/* TR_ERROR_INTERFACES */ -"No hay interfaces libres en su sistema.", -/* TR_REMOVE_CARD */ -"La ubicación de la tarjeta de red debería ser borrada? - %s", -/* TR_JOURNAL_ERROR */ -"No se pudo crear el journal usando fallback a ext2.", -/* TR_FILESYSTEM */ -"Seleccione el sistema de Archivos", -/* TR_ADDRESS_SETTINGS */ -"Configuración de direcciones", -/* TR_ADMIN_PASSWORD */ -"Contraseña 'admin'", -/* TR_AGAIN_PROMPT */ -"Nuevamente:", -/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */ -"Todas las tarjetas se asignaron correctamente.", -/* TR_AUTODETECT */ -"* AUTODETECTANDO *", -/* TR_BUILDING_INITRD */ -"Construyendo ramdisk...", -/* TR_CANCEL */ -"Cancelar", -/* TR_CARD_ASSIGNMENT */ -"Asignación de Tarjetas", -/* TR_CHECKING */ -"Revisando URL...", -/* TR_CHECKING_FOR */ -"Probando : %s", -/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */ -"Seleccione el tipo de tarjeta ISDN instalada en este computador.", -/* TR_CHOOSE_THE_ISDN_PROTOCOL */ -"Seleccione el protocolo ISDN que ud. requiera.", -/* TR_CONFIGURE_DHCP */ -"Configure el servidor DHCP introduciendo la siguiente información.", -/* TR_CONFIGURE_NETWORKING */ -"Configuraciónes de Red", -/* TR_CONFIGURE_NETWORKING_LONG */ -"Ahora debería configurar la red primeramente cargando el driver correcto para la interfaz GREEN. Puede hacer esto, ya sea por medio de auto-detección de la tarjeta de red, o eligiendo el driver correcto de la lista. Tome en cuenta que si usted tiene mas de una tarjeta de red instalada, podrá configurar las demás posteriormente durante la instalación. También tenga en cuenta que si posee mas de una tarjeta que sea del mismo tipo que su interfaz GREEN, cada una requerirá parámetros de módulo especiales, los cuales debe introducir para cada una de las tarjetas, ya que todas las tarjetas se podrían activar cuando se configure la interfaz GREEN.", -/* TR_CONFIGURE_NETWORK_DRIVERS */ -"Configure los drivers de red, y a cual interfaz será asignada cada tarjeta. La configuración actual es la siguiente:\n\n", -/* TR_CONFIGURE_THE_CDROM */ -"Configure la unidad de CDROM eligiendo la dirección IO apropiada y/o la dirección IRQ.", -/* TR_CONGRATULATIONS */ -"¡Felicidades!", -/* TR_CONGRATULATIONS_LONG */ -"%s fué instalado exitosamente. Por favor retire cualquier CDROM de las unidades. La instalación se ejecutará ahora y usted podrá configurar las parámetros de ISDN, Tarjetas de red, y las contraseñas del sistema. Una vez que la instalación se halla completado usted podrá dirigir su navegador de internet a https://%s:444 (o a cualquiera que sea el nombre de su %s), y configurar la red por dialup (si fuese necesario) y el acceso remoto.", -/* TR_CONTINUE_NO_SWAP */ -"Su disco duro es muy pequeño, pero podrá continuar un swap muy reducido (Use con precaución).", -/* TR_CURRENT_CONFIG */ -"Configuración Actual: %s%s", -/* TR_DEFAULT_GATEWAY */ -"Puerta de enlace por defecto:", -/* TR_DEFAULT_GATEWAY_CR */ -"Puerta de enlace por defecto\n", -/* TR_DEFAULT_LEASE */ -"Default lease (mins):", -/* TR_DEFAULT_LEASE_CR */ -"Default lease time\n", -/* TR_DETECTED */ -"Se detectó: %s", -/* TR_DHCP_HOSTNAME */ -"DHCP Hostname:", -/* TR_DHCP_HOSTNAME_CR */ -"DHCP Hostname\n", -/* TR_DHCP_SERVER_CONFIGURATION */ -"Configuración de servidor DHCP", -/* TR_DISABLED */ -"Desactivado", -/* TR_DISABLE_ISDN */ -"Desactivar ISDN", -/* TR_DISK_TOO_SMALL */ -"Su disco duro es muy pequeño.", -/* TR_DNS_AND_GATEWAY_SETTINGS */ -"Configuraciones de DNS y Puerta de enlace(Gateway)", -/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */ -"Introduzca la información de DNS y puerta de enlace predeterminado. Estas configuraciones sólo son utilizadas con IP estática (y DHCP si se configura el DNS) en la interfaz RED", -/* TR_DNS_GATEWAY_WITH_GREEN */ -"Su configuración no utiliza una interfaz ethernet para la interfaz RED. La información de Puerta de enlace y DNS para usuarios de dialup, es configurada automáticamente en el momento de marcar.", -/* TR_DOMAINNAME */ -"Nombre de dominio", -/* TR_DOMAINNAME_CANNOT_BE_EMPTY */ -"Nombre de domino no puede estar vacío", -/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */ -"El nombre de dominio no puede contener espacios", -/* TR_DOMAINNAME_NOT_VALID_CHARS */ -"Los nombres de dominio sólo pueden contener letras, números, guiones y guion_bajo", -/* TR_DOMAIN_NAME_SUFFIX */ -"Sufijo de nombre de dominio:", -/* TR_DOMAIN_NAME_SUFFIX_CR */ -"Sufijo de nombre de dominio\n", -/* TR_DONE */ -"Terminado", -/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */ -"\n¿Desea cambiar estas configuraciones?", -/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */ -"Drivers y asignación de tarjeta", -/* TR_ENABLED */ -"Activado", -/* TR_ENABLE_ISDN */ -"Activar ISDN", -/* TR_END_ADDRESS */ -"Dirección final:", -/* TR_END_ADDRESS_CR */ -"Dirección final\n", -/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */ -"Algunas tarjetas ISDN (especialmente las ISA) pueden requerir parámetros adicionales de módulo para configuracioenes como IRQ la dirección de dirección IO. Si usted tiene una tarjeta de este tipo, introduzca los parámetros adicionales aquí. Por ejemplo: 'io=0x280 irq=9'. Serán utilizados durante la detección de la tarjeta.", -/* TR_ENTER_ADMIN_PASSWORD */ -"Introduzca la contraseña del usuario %s'admin'. Este es el usuario que accederá a la página de administración %sweb", -/* TR_ENTER_DOMAINNAME */ -"Introduzca el nombre de dominio", -/* TR_ENTER_HOSTNAME */ -"Introduzca el nombre host de la máquina", -/* TR_ENTER_IP_ADDRESS_INFO */ -"Introduzca la dirección IP", -/* TR_ENTER_NETWORK_DRIVER */ -"Fallo la detección automática de la tarjeta de red. Introduzca el driver y los parámetros opcionales para esta tarjeta de red.", -/* TR_ENTER_ROOT_PASSWORD */ -"Introduzca la contraseña del usuario 'root'. Acceda como este usuario para obtener acceso a la línea de comandos.", -/* TR_ENTER_SETUP_PASSWORD */ -"A REMOVER", -/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */ -"Introduzca la dirección IP para la interfaz %s .", -/* TR_ENTER_THE_LOCAL_MSN */ -"Introduzca el número telefónico local", -/* TR_ENTER_URL */ -"Introduzca la ruta URL de losarchivo ipcop.tgz e images/scsidrv-.img ADVERTENCIA: ¡DNS no disponible! Ahora debería ser solamente http://X.X.X.X/", -/* TR_ERROR */ -"Error", -/* TR_ERROR_PROBING_CDROM */ -"No se encontró unidad de CD/DVDROM", -/* TR_ERROR_WRITING_CONFIG */ -"Error escribiendo la información de configuración", -/* TR_EURO_EDSS1 */ -"Euro (EDSS1)", -/* TR_EXTRACTING_MODULES */ -"Extrayendo modulos...", -/* TR_FAILED_TO_FIND */ -"Fallo al encontrar el archivo URL", -/* TR_FOUND_NIC */ -"%s ha detectado la siguiente tarjeta de red en su máquina %s", -/* TR_GERMAN_1TR6 */ -"German 1TR6", -/* TR_HELPLINE */ -" / entre elementos | selecciona", -/* TR_HOSTNAME */ -"Nombre de host", -/* TR_HOSTNAME_CANNOT_BE_EMPTY */ -"Nombre de host no puede estar vacío", -/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */ -"Nombre de host no puede contener espacios.", -/* TR_HOSTNAME_NOT_VALID_CHARS */ -"El nombre de host solo puede contener letra, números y guiones", -/* TR_INITIALISING_ISDN */ -"Inicializando ISDN...", -/* TR_INSERT_CDROM */ -"Por favor inserte el CD %s en la unidad de CD/DVD", -/* TR_INSERT_FLOPPY */ -"Por favor inserte el diskette de drivers %s en la unidad floppy", -/* TR_INSTALLATION_CANCELED */ -"Instalación cancelada", -/* TR_INSTALLING_FILES */ -"Instalando archivos...", -/* TR_INSTALLING_GRUB */ -"Instalando GRUB...", -/* TR_INSTALLING_LANG_CACHE */ -"Instalando archivos de idioma...", -/* TR_INTERFACE */ -"Interfaz - %s", -/* TR_INTERFACE_FAILED_TO_COME_UP */ -"La interfaz falló en arrancar", -/* TR_INVALID_FIELDS */ -"Los siguientes campos son inválidos:\n\n", -/* TR_INVALID_IO */ -"Los detalles de puerto IO insertados son inválidos.", -/* TR_INVALID_IRQ */ -"Los detalles de IRQ insertados son inválidos.", -/* TR_IP_ADDRESS_CR */ -"Dirección IP\n", -/* TR_IP_ADDRESS_PROMPT */ -"Dirección IP:", -/* TR_ISDN_CARD */ -"Tarjeta ISDN", -/* TR_ISDN_CARD_NOT_DETECTED */ -"La tarjeta ISDN no fue detectada. Tal vez debería específicar módulos de parámetro adicionales si la tarjeta es tipo ISA o tiene requerimentos especiales.", -/* TR_ISDN_CARD_SELECTION */ -"Selección de tarjeta ISDN", -/* TR_ISDN_CONFIGURATION */ -"Configuración ISDN", -/* TR_ISDN_CONFIGURATION_MENU */ -"Menú de configuración ISDN", -/* TR_ISDN_NOT_SETUP */ -"ISDN no está configurado. Algunos elementos no han sido seleccionados.", -/* TR_ISDN_NOT_YET_CONFIGURED */ -"ISDN no ha sido configurado aún. Seleccione el elemento que desea configurar", -/* TR_ISDN_PROTOCOL_SELECTION */ -"Selección de protocolo ISDN", -/* TR_ISDN_STATUS */ -"ISDN actual es %s.\n\n Protocolo: %s\n Tarjeta: %s\n Número de teléfono lcoal: %s\n\nSeleccione el elemento que desea reconfigurar, o elija usar la configuración actual.", -/* TR_KEYBOARD_MAPPING */ -"Mapeo de teclado", -/* TR_KEYBOARD_MAPPING_LONG */ -"Seleccione de la lista el tipo de teclado que está utilizando.", -/* TR_LEASED_LINE */ -"Concesión de línea", -/* TR_LOADING_MODULE */ -"Cargando módulo...", -/* TR_LOADING_PCMCIA */ -"Cargando módulos PCMCIA...", -/* TR_LOOKING_FOR_NIC */ -"Buscando: %s", -/* TR_MAKING_BOOT_FILESYSTEM */ -"Generando el sistema de arranque...", -/* TR_MAKING_LOG_FILESYSTEM */ -"Generando el sistema de log...", -/* TR_MAKING_ROOT_FILESYSTEM */ -"Generando el sistema de archivos root...", -/* TR_MAKING_SWAPSPACE */ -"Generando el espacio swap....", -/* TR_MANUAL */ -"* MANUAL *", -/* TR_MAX_LEASE */ -"Concesión MAX (mins):", -/* TR_MAX_LEASE_CR */ -"Tiempo MAX de concesión\n", -/* TR_MISSING_BLUE_IP */ -"Falta información IP en la interfaz BLUE", -/* TR_MISSING_ORANGE_IP */ -"Falta información IP en la interfaz ORANGE", -/* TR_MISSING_RED_IP */ -"Falta información IP en la interfaz RED", -/* TR_MODULE_NAME_CANNOT_BE_BLANK */ -"El nombre de módulo no puede estar vacío.", -/* TR_MODULE_PARAMETERS */ -"Introduzca el nombre del módulo y los parámetros que requiera para sus drivers.", -/* TR_MOUNTING_BOOT_FILESYSTEM */ -"Montando sistema de archivos de arranque...", -/* TR_MOUNTING_LOG_FILESYSTEM */ -"Montando sistema archvos log...", -/* TR_MOUNTING_ROOT_FILESYSTEM */ -"Montando sistema de archivos root....", -/* TR_MOUNTING_SWAP_PARTITION */ -"Montando partición swap...", -/* TR_MSN_CONFIGURATION */ -"Número telefónico local (MSN/EAZ)", -/* TR_NETMASK_PROMPT */ -"Máscara de red:", -/* TR_NETWORKING */ -"Redes", -/* TR_NETWORK_ADDRESS_CR */ -"Dirección de red\n", -/* TR_NETWORK_ADDRESS_PROMPT */ -"Dirección de red:", -/* TR_NETWORK_CONFIGURATION_MENU */ -"Menú de configuración de red", -/* TR_NETWORK_CONFIGURATION_TYPE */ -"Tipo de configuración de red", -/* TR_NETWORK_CONFIGURATION_TYPE_LONG */ -"Seleccione la configuración de red para %s. Los siguientes tipos de configuración muestran aquellas interfaces que tengan asignada una tarjeta ethernet. Si ud. cambia esta configuración, será necesario reiniciar el servicio de red, y ud. deberá volver a asignar las asignaciones de tarjetas de red.", -/* TR_NETWORK_MASK_CR */ -"Máscara de red\n", -/* TR_NETWORK_SETUP_FAILED */ -"Configuración de red falló.", -/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */ -"No hay suficientes tarjetas de red para asignar.", -/* TR_NO_BLUE_INTERFACE */ -"No se asignó interfaz BLUE.", -/* TR_NO_CDROM */ -"No se encontró CD/DVD.", -/* TR_NO_GREEN_INTERFACE */ -"No se asignó interfaz GREEN.", -/* TR_NO_HARDDISK */ -"No se encontró unidad de disco duro.", -/* TR_DISK_SELECTION */ -"Disk Selection", -/* TR_DISK_SELECTION_MSG */ -"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", -/* TR_NO_DISK_SELECTED */ -"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", -/* TR_DISK_SETUP */ -"Disk Setup", -/* TR_DISK_SETUP_DESC */ -"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", -/* TR_RAID_SETUP */ -"RAID Setup", -/* TR_RAID_SETUP_DESC */ -"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", -/* TR_DELETE_ALL_DATA */ -"Delete all data", -/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ -"You disk configuration is currently not supported.", -/* TR_CREATING_FILESYSTEMS */ -"Creating filesystems...", -/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ -"Unable to create filesystems.", -/* TR_MOUNTING_FILESYSTEMS */ -"Mounting filesystems...", -/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ -"Unable to mount filesystems.", -/* TR_BUILDING_RAID */ -"Building RAID...", -/* TR_UNABLE_TO_BUILD_RAID */ -"Unable to build RAID.", -/* TR_NO_IPCOP_TARBALL_FOUND */ -"No se encontró ningun archivo tarball de ipcop en el servidor web", -/* TR_NO_ORANGE_INTERFACE */ -"No se asignó Interfaz ORANGE.", -/* TR_NO_RED_INTERFACE */ -"No se asignó interfaz ROJA.", -/* TR_NO_SCSI_IMAGE_FOUND */ -"No se encontró imagen SCSI en el servidor web.", -/* TR_NO_UNALLOCATED_CARDS */ -"No quedan tarjetas sin asignar. Se necesitan mas. Se puede proceder a autodetección y búsqueda de mas tarjetas o elegir un driver de la lista.", -/* TR_OK */ -"Ok", -/* TR_PARTITIONING_DISK */ -"Particionando Disco...", -/* TR_PASSWORDS_DO_NOT_MATCH */ -"Las contraseñas no concuerdan.", -/* TR_PASSWORD_CANNOT_BE_BLANK */ -"La contraseña no puede ir en blanco.", -/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */ -"La contraseña no puede llevar espacios.", -/* TR_PASSWORD_PROMPT */ -"Contraseña:", -/* TR_PHONENUMBER_CANNOT_BE_EMPTY */ -"Número telefónico no puede ir en blanco.", -/* TR_PREPARE_HARDDISK */ -"El programa de instalación va a preparar el disco duro en %s. Primero el disco será particionado y después se les colocará un sistema de archivos a las particiones.", -/* TR_PRESS_OK_TO_REBOOT */ -"Presione Ok para reiniciar el sistema.", -/* TR_PRIMARY_DNS */ -"DNS Primario:", -/* TR_PRIMARY_DNS_CR */ -"DNS Primario\n", -/* TR_PROBE */ -"Detección", -/* TR_PROBE_FAILED */ -"Falló la auto detección", -/* TR_PROBING_HARDWARE */ -"Detectando Hardware...", -/* TR_PROBING_FOR_NICS */ -"Detectando NICs....", -/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */ -"Problema estableciendo la contraseña del usuario %s 'admin'", -/* TR_PROBLEM_SETTING_ROOT_PASSWORD */ -"Problema estableciendo la contraseña del usuario 'root'", -/* TR_PROBLEM_SETTING_SETUP_PASSWORD */ -"A REMOVER", -/* TR_PROTOCOL_COUNTRY */ -"Protocolo/País", -/* TR_PULLING_NETWORK_UP */ -"Encendiendo la red...", -/* TR_PUSHING_NETWORK_DOWN */ -"Apagando la red....", -/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */ -"Apagando red no local...", -/* TR_QUIT */ -"Salir", -/* TR_RED_IN_USE */ -"ISDN (u otra conexión externa) se encuentra en uso. No puede configurar ISDN mientras la interfaz RED está activa.", -/* TR_RESTART_REQUIRED */ -"\n\nCuando la configuración se complete, Un reinicio de red será requerido", -/* TR_RESTORE */ -"Restaurar", -/* TR_RESTORE_CONFIGURATION */ -"Si cuenta con un floppy con la configuración del %s sistema en el, insertelo en la unidad lectora y presione el botón restaurar.", -/* TR_ROOT_PASSWORD */ -"Contraseña 'root'", -/* TR_SECONDARY_DNS */ -"DNS Secundario:", -/* TR_SECONDARY_DNS_CR */ -"DNS Secundario\n", -/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */ -"DNS Secundario especificado sinun servidor DNS primario", -/* TR_SECTION_MENU */ -"Sección de Menú", -/* TR_SELECT */ -"Selección", -/* TR_SELECT_CDROM_TYPE */ -"Seleccione tipo de CDROM", -/* TR_SELECT_CDROM_TYPE_LONG */ -"No se detectó unidad de CD/DVD en esta máquina. Por favor seleccione cual de los siguientes drivers desea usar para que %s pueda acceder a la unidad de CD/DVD", -/* TR_SELECT_INSTALLATION_MEDIA */ -"Seleccione medio de instalación", -/* TR_SELECT_INSTALLATION_MEDIA_LONG */ -"%s puede ser instalado desde múltiples fuentes. La mas sencilla es usar la unidad de CD/DVD. Si la máquina carece de una, puede instalarlo desde otra máquina en la red local que tenga los archivos de instalación disponibles via HTTP o FTP.", -/* TR_SELECT_NETWORK_DRIVER */ -"Seleccione drivers de red", -/* TR_SELECT_NETWORK_DRIVER_LONG */ -"Seleccione el driver de red para la tarjeta instalada en esta máquina. Si usted elige MANUAL, se le dará una oportunidad de introducir los parámetros y nombres de módulo para los drivers que requieran configuracioens especiales como las tarjetas ISA", -/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */ -"Seleccione la interfaz que desea reconfigurar", -/* TR_SELECT_THE_ITEM */ -"Seleccione el elemento que desea configurar", -/* TR_SETTING_ADMIN_PASSWORD */ -"Estableciendo la contraseña del usuario %s 'admin'...", -/* TR_SETTING_ROOT_PASSWORD */ -"Estableciendo la contraseña del usuario 'root'...", -/* TR_SETTING_SETUP_PASSWORD */ -"A REMOVER", -/* TR_SETUP_FINISHED */ -"La configuración se ha completado. Presione Ok.", -/* TR_SETUP_NOT_COMPLETE */ -"La configuración inicial no se completó totalmente. Asegúrese de configurar todo correctamente ejecutando setup de nuevo desde la línea de comandos.", -/* TR_SETUP_PASSWORD */ -"A REMOVER", -/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */ -"Configurar parámetros de módulo adicionales", -/* TR_SINGLE_GREEN */ -"Su configuración está dispuesta para una interface GREEN única", -/* TR_SKIP */ -"Omitir", -/* TR_START_ADDRESS */ -"Dirección de inicio:", -/* TR_START_ADDRESS_CR */ -"Dirección de inicio\n", -/* TR_STATIC */ -"Estático", -/* TR_SUGGEST_IO */ -"(sugerir %x)", -/* TR_SUGGEST_IRQ */ -"(sugerir %d)", -/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */ -"El módulo de este driver ya ha sido cargado.", -/* TR_TIMEZONE */ -"Zona de tiempo", -/* TR_TIMEZONE_LONG */ -"Seleccione su zona de tiempo de la siguiente lista.", -/* TR_UNABLE_TO_EJECT_CDROM */ -"Imposible expulsar el CD/DVD", -/* TR_UNABLE_TO_EXTRACT_MODULES */ -"Imposible extraer módulos.", -/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */ -"Imposible encontrar drivers adicionales", -/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */ -"Imposible encontrar tarjeta ISDN en esta máquina. Podría necesitar especificar parámetros de módulo adicionales si la tarjeta es tipo ISA o tiene requerimientos especiales", -/* TR_UNABLE_TO_INITIALISE_ISDN */ -"Imposible inicializar ISDN", -/* TR_UNABLE_TO_INSTALL_FILES */ -"Imposible instalar archivos.", -/* TR_UNABLE_TO_INSTALL_LANG_CACHE */ -"Imposible instalar archivos de Idioma.", -/* TR_UNABLE_TO_INSTALL_GRUB */ -"Imposible instalar GRUB.", -/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */ -"Imposible cargar driver de módulo.", -/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */ -"Imposibe crear sistema de archivos de arranque.", -/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */ -"Imposible crear sistema de archivos log.", -/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */ -"Imposible crear sistema de archivos root.", -/* TR_UNABLE_TO_MAKE_SWAPSPACE */ -"Imposible crear espacio swap", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */ -"Imposible crear enlace simbólico /dev/harddisk.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */ -"Imposible crear enlace simbólico /dev/harddisk1.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */ -"Imposible crear enlace simbólico /dev/harddisk2.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */ -"Imposible crear enlace simbólico /dev/harddisk3.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */ -"Imposible crear enlace simbólico /dev/harddisk4.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */ -"Imposible crear enlace simbólico a /dev/root", -/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */ -"Imposible montar boot filesystem.", -/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */ -"Imposible montar log filesystem.", -/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */ -"Imposible montar proc filesystem.", -/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */ -"Imposible montar root filesystem.", -/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */ -"Imposible montar the swap partition.", -/* TR_UNABLE_TO_OPEN_HOSTS_FILE */ -"Imposible abrir main hosts file.", -/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */ -"Imposible abrir settings file", -/* TR_UNABLE_TO_PARTITION */ -"Imposible particionar el disco.", -/* TR_UNABLE_TO_REMOVE_TEMP_FILES */ -"Imposible remover archivos de descarga temporales.", -/* TR_UNABLE_TO_SET_HOSTNAME */ -"Imposible asignar el nombre de host.", -/* TR_UNABLE_TO_UNMOUNT_CDROM */ -"Imposible desmontar la unidad CDROM/Floppydisk.", -/* TR_UNABLE_TO_UNMOUNT_HARDDISK */ -"Imposible desmontar disco duro.", -/* TR_UNABLE_TO_WRITE_ETC_FSTAB */ -"Imposible escribir /etc/fstab", -/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */ -"Imposible escribir /etc/hostname", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS */ -"Imposible escribir /etc/hosts.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */ -"Imposible escribir /etc/hosts.allow.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */ -"Imposible escribir /etc/hosts.deny.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */ -"Imposible escribir %s/ethernet/settings.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */ -"Imposible escribir %s/main/hostname.conf", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */ -"Imposible escribir %s/main/settings.", -/* TR_UNCLAIMED_DRIVER */ -"There is an unclaimed ethernet card of type:\n%s\n\nYou can assign this to:", -/* TR_UNKNOWN */ -"DESCONOCIDO", -/* TR_UNSET */ -"NO ASIGNADO", -/* TR_USB_KEY_VFAT_ERR */ -"Esta unidad USB no es válida (no se encontró partición vfat).", -/* TR_US_NI1 */ -"US NI1", -/* TR_WARNING */ -"ADVERTENCIA", -/* TR_WARNING_LONG */ -"Si usted cambia esta dirección IP mientras se encuentra conectado de manera remota, su conexión a esta máquina %s será terminada, i tendrá que reconectarse con la nueva dirección IP. Esta es una operación riesgosa y solamente debería ser intentada si usted tiene acceso físico a la máquina en caso de que algo salga mal.", -/* TR_WELCOME */ -"Bienvenido al programa de instalación de %s. Si selecciona cancelar en cualquiera de las pantallas siguientes su computadora será reiniciada.", -/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */ -"Su sistema está configurado a interfaz GREEN única, la cual ya ha sido asignada.", -/* TR_YES */ -"Si", -/* TR_NO */ -"No", -/* TR_AS */ -"as", -/* TR_IGNORE */ -"Ignorar", -/* TR_PPP_DIALUP */ -"PPP DIALUP (PPPoE, modem, ATM ...)", -/* TR_DHCP */ -"DHCP", -/* TR_DHCP_STARTSERVER */ -"Iniciando Servidor DHCP ...", -/* TR_DHCP_STOPSERVER */ -"Deteniendo Servidor DHCP ...", -/* TR_LICENSE_ACCEPT */ -"I accept this license.", -/* TR_LICENSE_NOT_ACCEPTED */ -"License not accepted. Exit!", -/* TR_EXT4FS */ -"EXT4 - Filesystem", -/* TR_EXT4FS_WO_JOURNAL */ -"EXT4 - Filesystem without journal", -/* TR_XFS */ -"XFS - Filesystem", -/* TR_REISERFS */ -"ReiserFS - Filesystem", -/* TR_NO_LOCAL_SOURCE */ -"No local source media found. Starting download.", -/* TR_DOWNLOADING_ISO */ -"Downloading Installation-Image ...", -/* TR_DOWNLOAD_ERROR */ -"Error while downloading!", -/* TR_DHCP_FORCE_MTU */ -"Force DHCP mtu:", -/* TR_IDENTIFY */ -"Identify", -/* TR_IDENTIFY_SHOULD_BLINK */ -"Selected port should blink now ...", -/* TR_IDENTIFY_NOT_SUPPORTED */ -"Function is not supported by this port.", -}; diff --git a/langs/fr/install/lang_fr.c b/langs/fr/install/lang_fr.c deleted file mode 100644 index a1702ef24..000000000 --- a/langs/fr/install/lang_fr.c +++ /dev/null @@ -1,622 +0,0 @@ -/* - * French (fr) Data File - * - * This file is part of the IPFire. - * - * IPCop 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. - * - * IPCop 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 IPCop; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * (c) IPFire Team - * - */ - -#include "libsmooth.h" - -char *fr_tr[] = { - -/* TR_ISDN */ -"RNIS", -/* TR_ERROR_PROBING_ISDN */ -"Impossible de scanner les périphériques RNIS.", -/* TR_PROBING_ISDN */ -"Recherche et configuration des périphériques RNIS.", -/* TR_MISSING_GREEN_IP */ -"Adresse IP de l'interface verte manquante !", -/* TR_CHOOSE_FILESYSTEM */ -"Choisissez SVP votre système de fichiers :", -/* TR_NOT_ENOUGH_INTERFACES */ -"Il n'y a pas assez de cartes réseau pour ce choix.\n\nRequise : %d - Disponible : %d\n", -/* TR_INTERFACE_CHANGE */ -"Choisissez SVP l'interface que vous souhaitez modifier.\n\n", -/* TR_NETCARD_COLOR */ -"Cartes assignées", -/* TR_REMOVE */ -"Enlever", -/* TR_MISSING_DNS */ -"DNS manquants.\n", -/* TR_MISSING_DEFAULT */ -"Passerelle par défaut manquante.\n", -/* TR_JOURNAL_EXT3 */ -"Création du journal pour Ext3...", -/* TR_CHOOSE_NETCARD */ -"Choisissez SVP une carte réseau pour l'interface suivante - %s.", -/* TR_NETCARDMENU2 */ -"Menu réseau étendu", -/* TR_ERROR_INTERFACES */ -"Il n'y a aucune interface de libre sur votre système.", -/* TR_REMOVE_CARD */ -"L'attribution de la carte réseau doit-elle être supprimée ? - %s", -/* TR_JOURNAL_ERROR */ -"Impossible de céer le journal, utilisation de ext2 en remplacement.", -/* TR_FILESYSTEM */ -"Choix du système de fichier", -/* TR_ADDRESS_SETTINGS */ -"Paramètres d'adresse", -/* TR_ADMIN_PASSWORD */ -"Mot de passe 'admin'", -/* TR_AGAIN_PROMPT */ -"Encore:", -/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */ -"Attribution de toutes les cartes avec succès.", -/* TR_AUTODETECT */ -"* AUTO-DETECTION *", -/* TR_BUILDING_INITRD */ -"Génération du ramdisk...", -/* TR_CANCEL */ -"Annuler", -/* TR_CARD_ASSIGNMENT */ -"Attribution de la carte", -/* TR_CHECKING */ -"Vérification de l'URL...", -/* TR_CHECKING_FOR */ -"Vérification pour : %s", -/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */ -"Choisissez la carte RNIS sur cet ordinateur.", -/* TR_CHOOSE_THE_ISDN_PROTOCOL */ -"Choisissez le procole RNIS requis.", -/* TR_CONFIGURE_DHCP */ -"Configurez le serveur DHCP en saisissant les paramètres.", -/* TR_CONFIGURE_NETWORKING */ -"Configuration du réseau", -/* TR_CONFIGURE_NETWORKING_LONG */ -"Vous devriez maintenant configurer le réseau en commençant par choisir le pilote approprié pour l'interface verte. Vous pouvez essayer la détection automatique ou choisir vous-même le bon pilote. Notez que si vous avez plus d'une carte réseau installée, vous pourrez configurer les autres ultérieurement. Notez également que si vous avez plus d'une carte qui a le même type que la VERTE et que chacune requiert des paramètres de module spéciaux, vous devriez saisir les paramètres pour toutes les cartes de ce type maintenant de façon à ce que toutes cartes deviennent actives quand vous configurez l'interface verte.", -/* TR_CONFIGURE_NETWORK_DRIVERS */ -"Configurer les pilotes réseaux, et à quelle interface chaque carte est assignée. La configuration actuelle est comme suit :\n\n", -/* TR_CONFIGURE_THE_CDROM */ -"Configurez le CDROM en choisissant l'adresse IO et/ou IRQ appropriées.", -/* TR_CONGRATULATIONS */ -"Félicitation!", -/* TR_CONGRATULATIONS_LONG */ -"%s a été installé avec succès. Merci de retirer les CDROMs de l'ordinateur. L'installation va maintenant commencer la configuration pendant laquelle vous pourrez configurer RNIS, les cartes réseaux et les mots de passe du système. Après la fin de l'installation, vous pourrez vous rendre avec votre navigateur web à l'adresse https://%s:444 (ou quelque soit le nom %s que vous avez donné), afin de configurer le réseau commuté (si nécessaire) et l'accès distant.", -/* TR_CONTINUE_NO_SWAP */ -"Votre disque dur est très petit, mais vous pouvez continuer avec une petite partition d'échange. (Utiliser avec précaution).", -/* TR_CURRENT_CONFIG */ -"Configuration actuelle : %s%s", -/* TR_DEFAULT_GATEWAY */ -"Passerelle par défaut :", -/* TR_DEFAULT_GATEWAY_CR */ -"Passerelle par défaut\n", -/* TR_DEFAULT_LEASE */ -"Bail par défaut (mins):", -/* TR_DEFAULT_LEASE_CR */ -"Bail par défaut\n", -/* TR_DETECTED */ -"Détecté: %s", -/* TR_DHCP_HOSTNAME */ -"Hôte DHCP :", -/* TR_DHCP_HOSTNAME_CR */ -"Hôte DHCP\n", -/* TR_DHCP_SERVER_CONFIGURATION */ -"Configuration du serveur DHCP", -/* TR_DISABLED */ -"Désactivé", -/* TR_DISABLE_ISDN */ -"Désactiver RNIS", -/* TR_DISK_TOO_SMALL */ -"Votre disque dur est trop petit.", -/* TR_DNS_AND_GATEWAY_SETTINGS */ -"Paramètres DNS et de la passerelle", -/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */ -"Saisissez les DNS et les informations de la passerelle. Ces paramètres ne sont utilisés qu'avec une IP statique (et DHCP si les DNS sont saisis) sur l'interface rouge (RED).", -/* TR_DNS_GATEWAY_WITH_GREEN */ -"Votre configuration n'utilise pas d'adaptateur ethernet pour l'interface rouge. DNS et les informations de la passerelle pour les utilisateur de réseau commuté est configuré automatiquement au moment de la connexion.", -/* TR_DOMAINNAME */ -"Nom de domaine", -/* TR_DOMAINNAME_CANNOT_BE_EMPTY */ -"Le nom de domaine ne peut être vide.", -/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */ -"Le nom de domaine ne peut pas contenir d'espaces.", -/* TR_DOMAINNAME_NOT_VALID_CHARS */ -"Le nom de domaine ne peut contenir que des lettres, chiffres, -, et des points.", -/* TR_DOMAIN_NAME_SUFFIX */ -"Suffixe du nom de domaine :", -/* TR_DOMAIN_NAME_SUFFIX_CR */ -"Suffixe du nom de domaine\n", -/* TR_DONE */ -"Terminé", -/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */ -"\nVoulez-vous changer ces paramètres ?", -/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */ -"Attribution des pilotes et des cartes", -/* TR_ENABLED */ -"Activé", -/* TR_ENABLE_ISDN */ -"Activer RNIS", -/* TR_END_ADDRESS */ -"Adresse de fin :", -/* TR_END_ADDRESS_CR */ -"Adresse de fin\n", -/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */ -"Certaines cartes RNIS (particulièrement les ISA) peut nécessiter des paramètres supplémentaires pour configurer les adresses IRQ et IO. Si vous avez une telle carte, saisissez ces paramètres ici. Par exemple : \"io=0x280 irq=9\". Ils seront utilisés pendant la détection des cartes.", -/* TR_ENTER_ADMIN_PASSWORD */ -"Saisissez le mot de passe pour l'administrateur 'admin' d'%s. C'est l'utilisateur à utiliser pour l'interface d'administration web %s.", -/* TR_ENTER_DOMAINNAME */ -"Entrez un nom de domaine", -/* TR_ENTER_HOSTNAME */ -"Entrez le nom d'hôte de la machine.", -/* TR_ENTER_IP_ADDRESS_INFO */ -"Entez l'adresse IP", -/* TR_ENTER_NETWORK_DRIVER */ -"La détection automatique de la carte réseau a échoué. Entrez les pilotes et paramètres optionnels pour la carte réseau.", -/* TR_ENTER_ROOT_PASSWORD */ -"Entrez le mot de passe 'root'. Il est utilisé pour l'accès en ligne de commande.", -/* TR_ENTER_SETUP_PASSWORD */ -"A ENLEVER", -/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */ -"Entrez les informations IP pour l'interface %s.", -/* TR_ENTER_THE_LOCAL_MSN */ -"Entrez le numéro de téléphone local (MSN/EAZ).", -/* TR_ENTER_URL */ -"Entrez l'URL vers ipcop-.tgz et les fichiers images/scsidrv-.img. ATTENTION : DNS non disponibles ! Ca devrait être quelque chose comme http://X.X.X.X/", -/* TR_ERROR */ -"Erreur", -/* TR_ERROR_PROBING_CDROM */ -"Aucun lecteur CDROM trouvé.", -/* TR_ERROR_WRITING_CONFIG */ -"Erreur lors de l'écriture des informations de configuration.", -/* TR_EURO_EDSS1 */ -"Euro (EDSS1)", -/* TR_EXTRACTING_MODULES */ -"Extraction des modules...", -/* TR_FAILED_TO_FIND */ -"Impossible de trouver le fichier URL.", -/* TR_FOUND_NIC */ -"%s a détecté la carte réseau suivante sur votre machine : %s", -/* TR_GERMAN_1TR6 */ -"German 1TR6", -/* TR_HELPLINE */ -" / changer d'élément | sélectionner", -/* TR_HOSTNAME */ -"Nom d'hôte", -/* TR_HOSTNAME_CANNOT_BE_EMPTY */ -"Le nom d'hôte ne peut être vide.", -/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */ -"Le nom d'hôte ne peut contenir d'espaces.", -/* TR_HOSTNAME_NOT_VALID_CHARS */ -"Le nom d'hôte ne peut contenir que des lettres, chiffres et traits d'union.", -/* TR_INITIALISING_ISDN */ -"Initialisation RNIS...", -/* TR_INSERT_CDROM */ -"Insérez le CD %s dans le lecteur de CDROM.", -/* TR_INSERT_FLOPPY */ -"Insérez la disquette du driver %s dans le lecteur de disquette.", -/* TR_INSTALLATION_CANCELED */ -"Installation annulée.", -/* TR_INSTALLING_FILES */ -"Installation des fichiers...", -/* TR_INSTALLING_GRUB */ -"Installation de GRUB...", -/* TR_INSTALLING_LANG_CACHE */ -"Installation des fichiers de langues...", -/* TR_INTERFACE */ -"Interface - %s", -/* TR_INTERFACE_FAILED_TO_COME_UP */ -"L'interface n'a pas pu être activée.", -/* TR_INVALID_FIELDS */ -"Les champs suivants sont invalides :\n\n", -/* TR_INVALID_IO */ -"Les détails du port d'IO sont invalides. ", -/* TR_INVALID_IRQ */ -"Les détails IRQ sont invalides.", -/* TR_IP_ADDRESS_CR */ -"Adresse IP\n", -/* TR_IP_ADDRESS_PROMPT */ -"Adresse IP :", -/* TR_ISDN_CARD */ -"Carte RNIS", -/* TR_ISDN_CARD_NOT_DETECTED */ -"Carte RNIS non détectée. Vous devez peut-être spécifier des paramètres additionnels si la carte est de type ISA ou si elle a des spécifications particulières.", -/* TR_ISDN_CARD_SELECTION */ -"Sélection de la carte RNIS", -/* TR_ISDN_CONFIGURATION */ -"Configuration RNIS", -/* TR_ISDN_CONFIGURATION_MENU */ -"Menu de configuration RNIS", -/* TR_ISDN_NOT_SETUP */ -"RNIS non installé. Certains paramètres n'ont pas été sélectionnés.", -/* TR_ISDN_NOT_YET_CONFIGURED */ -"RNIS n'a pas encore été configuré. Sélectionnez le paramètre que vous souhaitez configurer.", -/* TR_ISDN_PROTOCOL_SELECTION */ -"Sélection du protocole RNIS", -/* TR_ISDN_STATUS */ -"RNIS est actuellement %s.\n\n Protocole : %s\n Carte : %s\n Numéro de téléphone local : %s\n\nSélectionnez le paramètre que vous voulez reconfigurer, ou utilisez les paramètres actuels.", -/* TR_KEYBOARD_MAPPING */ -"Organisation du clavier", -/* TR_KEYBOARD_MAPPING_LONG */ -"Choisissez le type de clavier que vous utilisez dans la liste ci-dessous.", -/* TR_LEASED_LINE */ -"Leased line (ligne dédiée)", -/* TR_LOADING_MODULE */ -"Chargement du module...", -/* TR_LOADING_PCMCIA */ -"Chargement du module PCMCIA...", -/* TR_LOOKING_FOR_NIC */ -"Recherche de: %s", -/* TR_MAKING_BOOT_FILESYSTEM */ -"Génération du système de fichier de démarrage...", -/* TR_MAKING_LOG_FILESYSTEM */ -"Génération du système de fichier de log...", -/* TR_MAKING_ROOT_FILESYSTEM */ -"Génération du système de fichier de root...", -/* TR_MAKING_SWAPSPACE */ -"Génération de la partition swap...", -/* TR_MANUAL */ -"* MANUEL *", -/* TR_MAX_LEASE */ -"Bail Max (mins):", -/* TR_MAX_LEASE_CR */ -"Bail Max\n", -/* TR_MISSING_BLUE_IP */ -"Paramètres IP manquants sur l'interface BLEUE.", -/* TR_MISSING_ORANGE_IP */ -"Paramètres IP manquants sur l'interface ORANGE.", -/* TR_MISSING_RED_IP */ -"Paramètres IP manquants sur l'interface ROUGE.", -/* TR_MODULE_NAME_CANNOT_BE_BLANK */ -"Le nom du module ne peut être vide.", -/* TR_MODULE_PARAMETERS */ -"Entrer les paramètres et le nom du module pour le pilote requis.", -/* TR_MOUNTING_BOOT_FILESYSTEM */ -"Montage du système de fichier de boot...", -/* TR_MOUNTING_LOG_FILESYSTEM */ -"Montage du système de fichier de log...", -/* TR_MOUNTING_ROOT_FILESYSTEM */ -"Montage du système de fichier de root...", -/* TR_MOUNTING_SWAP_PARTITION */ -"Montage de la partition swap...", -/* TR_MSN_CONFIGURATION */ -"Numéro de téléphone local (MSN/EAZ)", -/* TR_NETMASK_PROMPT */ -"Masque réseau :", -/* TR_NETWORKING */ -"Réseau", -/* TR_NETWORK_ADDRESS_CR */ -"Adresse réseau\n", -/* TR_NETWORK_ADDRESS_PROMPT */ -"Adresse réseau :", -/* TR_NETWORK_CONFIGURATION_MENU */ -"Menu de configuration du réseau", -/* TR_NETWORK_CONFIGURATION_TYPE */ -"Type de configuration réseau", -/* TR_NETWORK_CONFIGURATION_TYPE_LONG */ -"Sélectionnez la configuration réseau pour %s. Les types de configuration suivants listent les interfaces ethernet. Si vous changez ce paramètre, un redémarrage du réseau est requis, et vous devrez reconfigurer les attributions des pilotes.", -/* TR_NETWORK_MASK_CR */ -"Masque réseau\n", -/* TR_NETWORK_SETUP_FAILED */ -"Installation du réseau échouée.", -/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */ -"Trop peu de cartes ont été attribuée.", -/* TR_NO_BLUE_INTERFACE */ -"Interface BLEUE non attribuée.", -/* TR_NO_CDROM */ -"Aucun CD-ROM trouvé.", -/* TR_NO_GREEN_INTERFACE */ -"Interface VERTE non attribuée.", -/* TR_NO_HARDDISK */ -"Aucun disque dur trouvé.", -/* TR_DISK_SELECTION */ -"Disk Selection", -/* TR_DISK_SELECTION_MSG */ -"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", -/* TR_NO_DISK_SELECTED */ -"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", -/* TR_DISK_SETUP */ -"Disk Setup", -/* TR_DISK_SETUP_DESC */ -"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", -/* TR_RAID_SETUP */ -"RAID Setup", -/* TR_RAID_SETUP_DESC */ -"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", -/* TR_DELETE_ALL_DATA */ -"Delete all data", -/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ -"You disk configuration is currently not supported.", -/* TR_CREATING_FILESYSTEMS */ -"Creating filesystems...", -/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ -"Unable to create filesystems.", -/* TR_MOUNTING_FILESYSTEMS */ -"Mounting filesystems...", -/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ -"Unable to mount filesystems.", -/* TR_BUILDING_RAID */ -"Building RAID...", -/* TR_UNABLE_TO_BUILD_RAID */ -"Unable to build RAID.", -/* TR_NO_IPCOP_TARBALL_FOUND */ -"Aucun tarball ipcop trouvé sur le serveur Web.", -/* TR_NO_ORANGE_INTERFACE */ -"Interface ORANGE non attribuée.", -/* TR_NO_RED_INTERFACE */ -"Interface ROUGE non attribuée.", -/* TR_NO_SCSI_IMAGE_FOUND */ -"Aucune image SCSI trouvée sur le serveur Web.", -/* TR_NO_UNALLOCATED_CARDS */ -"Aucune carte non attribuée restante, il en faut plus. Vous pouvez auto-détecter et rechercher plus de cartes ou choisissez un pilote dans la liste.", -/* TR_OK */ -"Ok", -/* TR_PARTITIONING_DISK */ -"Partitionnement du disque...", -/* TR_PASSWORDS_DO_NOT_MATCH */ -"Les mots de passe ne correspondent pas.", -/* TR_PASSWORD_CANNOT_BE_BLANK */ -"Le mot de passe ne peut être vide.", -/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */ -"Le mot de passe ne peut contenir d'espaces.", -/* TR_PASSWORD_PROMPT */ -"Mot de passe :", -/* TR_PHONENUMBER_CANNOT_BE_EMPTY */ -"Le numéro de téléphone ne peut être vide.", -/* TR_PREPARE_HARDDISK */ -"Le programme d'installation va maintenant préparer le disque %s. Il sera d'abord partitionné, puis les systèmes de fichiers seront installés.", -/* TR_PRESS_OK_TO_REBOOT */ -"Appuyer sur Ok pour redémarrer.", -/* TR_PRIMARY_DNS */ -"DNS primaire :", -/* TR_PRIMARY_DNS_CR */ -"DNS primaire\n", -/* TR_PROBE */ -"Auto-détection", -/* TR_PROBE_FAILED */ -"Auto-détection échouée.", -/* TR_PROBING_HARDWARE */ -"Détection du matériel...", -/* TR_PROBING_FOR_NICS */ -"Détection des cartes réseaux...", -/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */ -"Problème lors de la configuration du mot de passe 'admin' %s.", -/* TR_PROBLEM_SETTING_ROOT_PASSWORD */ -"Problème lors de la configuration du mot de passe 'root'.", -/* TR_PROBLEM_SETTING_SETUP_PASSWORD */ -"A ENLEVER", -/* TR_PROTOCOL_COUNTRY */ -"Protocole/Pays", -/* TR_PULLING_NETWORK_UP */ -"Démarrage du réseau...", -/* TR_PUSHING_NETWORK_DOWN */ -"Arrêt du réseau...", -/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */ -"Arrêt du réseau distant...", -/* TR_QUIT */ -"Quitter", -/* TR_RED_IN_USE */ -"RNIS (ou une autre connexion externe) est actuellement utilisée. Vous ne pouvez pas configurer RNIS pendant que l'interface ROUGE est utilisée.", -/* TR_RESTART_REQUIRED */ -"\n\nLorsque la configuration sera terminée, un redémarrage du réseau sera requis.", -/* TR_RESTORE */ -"Restaurer", -/* TR_RESTORE_CONFIGURATION */ -"Si vous avez une disquette avec une configuration système %s, insérez la disquette dans le lecteur et appuyer sur restaurer.", -/* TR_ROOT_PASSWORD */ -"Mot de passe 'root'", -/* TR_SECONDARY_DNS */ -"DNS secondaire :", -/* TR_SECONDARY_DNS_CR */ -"DNS secondaire\n", -/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */ -"DNS secondaire spécifié sans un DNS primaire", -/* TR_SECTION_MENU */ -"Menu de sélection", -/* TR_SELECT */ -"Sélectionner", -/* TR_SELECT_CDROM_TYPE */ -"Sélectionner le type de CDROM", -/* TR_SELECT_CDROM_TYPE_LONG */ -"Aucun CD-ROM détecté sur la machine. Sélectionnez lequel des pilotes suivants vous voulez utiliser afin que %s accède au CD-ROM.", -/* TR_SELECT_INSTALLATION_MEDIA */ -"Sélectionner le média d'installation", -/* TR_SELECT_INSTALLATION_MEDIA_LONG */ -"%s peut être installé depuis de multiples sources. La manière la plus simple est d'utiliser une machine avec un CD-ROM. S'il n'y a aucun lecteur, vous pouvez installer via une autre machine du réseau qui possède les fichiers d'installation disponibles par FTP ou HTTP.", -/* TR_SELECT_NETWORK_DRIVER */ -"Sélectionner un pilote réseau", -/* TR_SELECT_NETWORK_DRIVER_LONG */ -"Sélectionner le pilote réseau pour la carte installée sur la machine. Si vous sélectionner MANUEL, vous pourrez saisir le nom du pilote ainsi que les paramètres pour les pilotes qui sont spécifiques comme les cartes ISA.", -/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */ -"Sélectionnez l'interface que vous voulez reconfigurer.", -/* TR_SELECT_THE_ITEM */ -"Sélectionner l'élément que vous voulez configurer.", -/* TR_SETTING_ADMIN_PASSWORD */ -"Paramétrage le mot de passe 'admin' de %s...", -/* TR_SETTING_ROOT_PASSWORD */ -"Paramétrage du mot de passe 'root'....", -/* TR_SETTING_SETUP_PASSWORD */ -"A ENLEVER", -/* TR_SETUP_FINISHED */ -"Installation terminée.", -/* TR_SETUP_NOT_COMPLETE */ -"L'installation initiale n'est pas complètement finie. Vous devez vous assurer que l'installation s'est finie correctement en relançant l'installation depuis le shell.", -/* TR_SETUP_PASSWORD */ -"A ENLEVER", -/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */ -"Choisissez les paramètres additionnels du module", -/* TR_SINGLE_GREEN */ -"Votre configuration est définie pour une unique interface VERTE.", -/* TR_SKIP */ -"Passer", -/* TR_START_ADDRESS */ -"Adresse de début :", -/* TR_START_ADDRESS_CR */ -"Adresse de début\n", -/* TR_STATIC */ -"Statique", -/* TR_SUGGEST_IO */ -"(suggère %x)", -/* TR_SUGGEST_IRQ */ -"(suggère %d)", -/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */ -"Ce pilote est déjà chargé.", -/* TR_TIMEZONE */ -"Fuseau horaire", -/* TR_TIMEZONE_LONG */ -"Choisissez votre fuseau horaire dans la liste ci-dessous.", -/* TR_UNABLE_TO_EJECT_CDROM */ -"Impossible d'éjecter le CD-ROM.", -/* TR_UNABLE_TO_EXTRACT_MODULES */ -"Impossible d'extraire les modules.", -/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */ -"Impossible de trouver des pilotes supplémentaires.", -/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */ -"Impossible de trouver une carte RNIS sur cet ordinateur. Vous devrez peut-être spécifier des paramètres additionnels si la carte est de type ISA ou si elle a des spécificités.", -/* TR_UNABLE_TO_INITIALISE_ISDN */ -"Impossible d'initialiser RNIS.", -/* TR_UNABLE_TO_INSTALL_FILES */ -"Impossible d'installer les fichiers.", -/* TR_UNABLE_TO_INSTALL_LANG_CACHE */ -"Impossible d'installer les fichiers de langues.", -/* TR_UNABLE_TO_INSTALL_GRUB */ -"Impossible d'installer GRUB.", -/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */ -"Impossible de charger le pilote.", -/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */ -"Impossible de générer le système de fichiers boot.", -/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */ -"Impossible de générer le système de fichiers log.", -/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */ -"Impossible de générer le système de fichiers root.", -/* TR_UNABLE_TO_MAKE_SWAPSPACE */ -"Impossible de générer la partition swap.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */ -"Impossible de créer le symlink /dev/harddisk.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */ -"Impossible de créer le simlink /dev/harddisk1.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */ -"Impossible de créer le symlink /dev/harddisk2.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */ -"Impossible de créer le symlink /dev/harddisk3.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */ -"Impossible de créer le symlink /dev/harddisk4.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */ -"Impossible de créer le symlink /dev/root.", -/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */ -"Impossible de monter le système de fichier boot.", -/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */ -"Impossible de monter le système de fichier log.", -/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */ -"Impossible de monter le système de fichier proc.", -/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */ -"Impossible de monter le système de fichier root.", -/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */ -"Impossible de monter la partition swap.", -/* TR_UNABLE_TO_OPEN_HOSTS_FILE */ -"Impossible d'ouvrir le fichier hosts principal.", -/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */ -"Impossible d'ouvrir le fichier settings", -/* TR_UNABLE_TO_PARTITION */ -"Impossible de partitionner le disque.", -/* TR_UNABLE_TO_REMOVE_TEMP_FILES */ -"Impossible de supprimer les fichiers téléchargés temporaires.", -/* TR_UNABLE_TO_SET_HOSTNAME */ -"Impossible de définir le nom d'hôte.", -/* TR_UNABLE_TO_UNMOUNT_CDROM */ -"Impossible de démonter le CDROM/disquette.", -/* TR_UNABLE_TO_UNMOUNT_HARDDISK */ -"Impossible de démonter le disque dur.", -/* TR_UNABLE_TO_WRITE_ETC_FSTAB */ -"Impossible d'écrire /etc/fstab", -/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */ -"Impossible d'écrire /etc/hostname", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS */ -"Impossible d'écrire /etc/hosts.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */ -"Impossible d'écrire /etc/hosts.allow.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */ -"Impossible d'écrire /etc/hosts.deny.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */ -"Impossible d'écrire %s/ethernet/settings.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */ -"Impossible d'écrire %s/main/hostname.conf", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */ -"Impossible d'écrire %s/main/settings.", -/* TR_UNCLAIMED_DRIVER */ -"Il y a une carte ethernet non assignée de type :\n%s\n\nVous pouvez l'assigner à :", -/* TR_UNKNOWN */ -"INCONNU", -/* TR_UNSET */ -"NON DEFINIE", -/* TR_USB_KEY_VFAT_ERR */ -"La clé USB est invalide (aucune partition vfat).", -/* TR_US_NI1 */ -"US NI1", -/* TR_WARNING */ -"ATTENTION", -/* TR_WARNING_LONG */ -"Si vous changez cette adresse IP et que vous êtes connecté à distance, la connexion à la machine %s sera interrompue et vous aurez à vous reconnecter avec la nouvelle IP. C'est une opération risquée et ne devrait pas être tentée si vous n'avez pas d'accès physique à la machine dans le cas où quelque chose se passe mal.", -/* TR_WELCOME */ -"Bienvenue dans le programme d'installation d'%s. Si vous sélectionnez Annuler sur n'importe lequel des écrans suivants, ceci redémarrera l'ordinateur.", -/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */ -"Votre configuration est définie pour une interface VERTE unique, qui a déjà un pilote assigné.", -/* TR_YES */ -"Oui", -/* TR_NO */ -"Non", -/* TR_AS */ -"comme", -/* TR_IGNORE */ -"Ignorer", -/* TR_PPP_DIALUP */ -"PPP DIALUP (PPPoE, Modem, ATM ...)", -/* TR_DHCP */ -"DHCP", -/* TR_DHCP_STARTSERVER */ -"Démarrage du serveur DHCP ...", -/* TR_DHCP_STOPSERVER */ -"Arrêt du serveur DHCP ...", -/* TR_LICENSE_ACCEPT */ -"J'accepte les termes de cette licence.", -/* TR_LICENSE_NOT_ACCEPTED */ -"Je n'accepte pas les termes de cette licence, quitter le programme d'installation.", -/* TR_EXT4FS */ -"EXT4 - Filesystem", -/* TR_EXT4FS_WO_JOURNAL */ -"EXT4 - Filesystem without journal", -/* TR_XFS */ -"XFS - Filesystem", -/* TR_REISERFS */ -"ReiserFS - Filesystem", -/* TR_NO_LOCAL_SOURCE */ -"Pas de source locale trouvée. Démarrage du téléchargement.", -/* TR_DOWNLOADING_ISO */ -"Téléchargement du fichier image ISO ...", -/* TR_DOWNLOAD_ERROR */ -"Erreur pendant le téléchargement!", -/* TR_DHCP_FORCE_MTU */ -"Force DHCP mtu:", -/* TR_IDENTIFY */ -"Identify", -/* TR_IDENTIFY_SHOULD_BLINK */ -"Selected port should blink now ...", -/* TR_IDENTIFY_NOT_SUPPORTED */ -"Function is not supported by this port.", -}; diff --git a/langs/nl/install/lang_nl.c b/langs/nl/install/lang_nl.c deleted file mode 100644 index 36cd44335..000000000 --- a/langs/nl/install/lang_nl.c +++ /dev/null @@ -1,626 +0,0 @@ -/* - * Dutch (nl) Data File - * - * This file is part of the IPFire. - * - * IPCop 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. - * - * IPCop 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 IPCop; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * (c) IPFire Team - * - * based on work of SmoothWall and IPCop - * - * (c) The SmoothWall Team - * - */ - -#include "libsmooth.h" - -char *nl_tr[] = { - -/* TR_ISDN */ -"ISDN", -/* TR_ERROR_PROBING_ISDN */ -"Kan ISDN-apparaten niet detecteren.", -/* TR_PROBING_ISDN */ -"Detecteren en configureren van ISDN-apparaten.", -/* TR_MISSING_GREEN_IP */ -"Groen IP-adres ontbreekt!", -/* TR_CHOOSE_FILESYSTEM */ -"Kies uw bestandssysteem:", -/* TR_NOT_ENOUGH_INTERFACES */ -"Onvoldoende netwerkkaarten voor uw keuze.\n\nNodig: %d - Beschikbaar: %d\n", -/* TR_INTERFACE_CHANGE */ -"Kies de interface die u wilt wijzigen.\n\n", -/* TR_NETCARD_COLOR */ -"Toegewezen kaarten", -/* TR_REMOVE */ -"Verwijder", -/* TR_MISSING_DNS */ -"DNS ontbreekt.\n", -/* TR_MISSING_DEFAULT */ -"Standaard gateway ontbreekt.\n", -/* TR_JOURNAL_EXT3 */ -"Aanmaken journal voor Ext3...", -/* TR_CHOOSE_NETCARD */ -"Kies een netwerkkaart voor de volgende interface - %s.", -/* TR_NETCARDMENU2 */ -"Uitgebreide Netwerkmenu", -/* TR_ERROR_INTERFACES */ -"Er zijn geen vrije interfaces op uw systeem.", -/* TR_REMOVE_CARD */ -"Moet de toewijzing voor de netwerkkaart worden verwijderd? - %s", -/* TR_JOURNAL_ERROR */ -"Kon het journaalboek niet aanmaken, valt terug op gebruik van ext2.", -/* TR_FILESYSTEM */ -"Kies uw bestandssysteem", -/* TR_ADDRESS_SETTINGS */ -"Adresinstellingen", -/* TR_ADMIN_PASSWORD */ -"'admin' wachtwoord", -/* TR_AGAIN_PROMPT */ -"Nogmaals:", -/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */ -"Alle kaarten zijn succesvol toegewezen.", -/* TR_AUTODETECT */ -"* AUTOMATISCH DETECTEREN *", -/* TR_BUILDING_INITRD */ -"Aanmaken ramdisk...", -/* TR_CANCEL */ -"Annuleren", -/* TR_CARD_ASSIGNMENT */ -"Kaart toewijzing", -/* TR_CHECKING */ -"Controleert URL...", -/* TR_CHECKING_FOR */ -"Controleert voor: %s", -/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */ -"Kies de ISDN-kaart die geïnstalleerd is op deze computer.", -/* TR_CHOOSE_THE_ISDN_PROTOCOL */ -"Kies het ISDN-protocol dat u nodig heeft.", -/* TR_CONFIGURE_DHCP */ -"Configureer de DHCP server door de instellingen in te voeren.", -/* TR_CONFIGURE_NETWORKING */ -"Configureer het netwerk", -/* TR_CONFIGURE_NETWORKING_LONG */ -"U moet nu het netwerk configureren door eerst de juiste driver te laden voor de GROENE interface. U kunt dit doen door ofwel automatisch te zoeken naar een netwerkkaart, of door de juiste driver te kiezen uit een lijst. Als u meer dan een kaart in uw machine heeft, dan kunt u die later in het installatieproces configureren. Mocht u meer dan een kaart van hetzelfde type als GROEN gebruiken en iedere kaart vereist speciale moduleparameters, dan moet u de parameters voor alle kaarten van dit type invoeren zodat alle kaarten actief kunnen worden waneer u de GROENE interface configureert.", -/* TR_CONFIGURE_NETWORK_DRIVERS */ -"Configureer netwerkdrivers en bepaal welke interface iedere kaart krijgt toegewezen.\nDe huidige configuratie is als volgt:\n\n", -/* TR_CONFIGURE_THE_CDROM */ -"Configureer de CDROM door het juiste IO-adres en/of IRQ te kiezen.", -/* TR_CONGRATULATIONS */ -"Gefeliciteerd!", -/* TR_CONGRATULATIONS_LONG */ -"%s is succesvol geïnstalleerd. Verwijder a.u.b. de CDROM's in uw computer. U kunt nu de netwerkkaarten en ISDN configureren en de systeemwachtwoorden instellen. Nadat de setup is afgerond, kunt u met de webbrowser naar https://%s:444 (of hoe u %s ook genoemd heeft) en het inbelnetwerk configureren (als nodig) en de remote toegang.", -/* TR_CONTINUE_NO_SWAP */ -"Uw vaste schijf is erg klein, maar u kunt verder gaan met een zeer kleine swap. (Wees hier voorzichtig mee).", -/* TR_CURRENT_CONFIG */ -"Huidige configuratie: %s%s", -/* TR_DEFAULT_GATEWAY */ -"Standaard Gateway:", -/* TR_DEFAULT_GATEWAY_CR */ -"Standaard Gateway\n", -/* TR_DEFAULT_LEASE */ -"Standaard lease (min.):", -/* TR_DEFAULT_LEASE_CR */ -"Standaard leasetijd\n", -/* TR_DETECTED */ -"Gedetecteerd: %s", -/* TR_DHCP_HOSTNAME */ -"DHCP Hostnaam:", -/* TR_DHCP_HOSTNAME_CR */ -"DHCP Hostnaam\n", -/* TR_DHCP_SERVER_CONFIGURATION */ -"DHCP serverconfiguratie", -/* TR_DISABLED */ -"Uitgeschakeld", -/* TR_DISABLE_ISDN */ -"ISDN uitschakelen", -/* TR_DISK_TOO_SMALL */ -"Uw vaste schijf is te klein.", -/* TR_DNS_AND_GATEWAY_SETTINGS */ -"DNS en Gateway instellingen", -/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */ -"Voer de DNS en gateway informatie in. Deze instellingen worden alleen gebruikt met statische IP-adressen (en DHCP als DNS is ingesteld) op de RODE interface.", -/* TR_DNS_GATEWAY_WITH_GREEN */ -"Uw configuratie gebruikt geen ethernetadapter voor z'n RODE interface. DNS en gateway voor inbelgebruikers worden automatisch geconfigureerd tijdens inbellen.", -/* TR_DOMAINNAME */ -"Domeinnaam", -/* TR_DOMAINNAME_CANNOT_BE_EMPTY */ -"Domeinnaam mag niet leeg zijn.", -/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */ -"Domeinnaam mag geen spaties bevatten.", -/* TR_DOMAINNAME_NOT_VALID_CHARS */ -"Domeinnaam mag alleen letters, getallen, koppeltekens en punten bevatten.", -/* TR_DOMAIN_NAME_SUFFIX */ -"Domeinnaam toevoeging:", -/* TR_DOMAIN_NAME_SUFFIX_CR */ -"Domeinnaam toevoeging\n", -/* TR_DONE */ -"Klaar", -/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */ -"\nWilt u deze instellingen wijzigen?", -/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */ -"Drivers en kaarttoewijzingen", -/* TR_ENABLED */ -"Ingeschakeld", -/* TR_ENABLE_ISDN */ -"Inschakelen ISDN", -/* TR_END_ADDRESS */ -"Eindadres:", -/* TR_END_ADDRESS_CR */ -"Eindadres\n", -/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */ -"Bepaalde ISDN-kaarten (met name de ISA-kaarten) kunnen extra moduleparameters vereisen voor het instellen van IRQ- en IO-adressen. Als u zo'n ISDN-kaart heeft, voer deze parameters dan hier in. Bijvoorbeeld: \"io=0x280 irq=9\". Deze gegevens worden gebruikt tijdens de kaartdetectie.", -/* TR_ENTER_ADMIN_PASSWORD */ -"Voer het %s 'admin' wachtwoord in. Dit is de gebruikersnaam die gebruikt wordt om in te loggen op de %s webbeheerpagina's.", -/* TR_ENTER_DOMAINNAME */ -"Voer de domeinnaam in", -/* TR_ENTER_HOSTNAME */ -"Voer de machinehostnaam in", -/* TR_ENTER_IP_ADDRESS_INFO */ -"Voer de IP-adres informatie in", -/* TR_ENTER_NETWORK_DRIVER */ -"Automatisch detecteren van netwerkkaart is mislukt. Voer de drivernaam en optionele parameters in voor de netwerkkaart.", -/* TR_ENTER_ROOT_PASSWORD */ -"Voer het 'root' wachtwoord in. Log in als deze gebruiker voor commandoregel toegang.", -/* TR_ENTER_SETUP_PASSWORD */ -"WORDT VERWIJDERD", -/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */ -"Voer de IP-adres informatie in voor de %s interface.", -/* TR_ENTER_THE_LOCAL_MSN */ -"Voer lokaal telefoonnummer in (MSN/EAZ).", -/* TR_ENTER_URL */ -"Voer het URL-pad in naar de ipcop-.tgz en images/scsidrv-.img bestanden. WAARSCHUWING: DNS is niet beschikbaar! Dit zou http://X.X.X.X/ moeten zijn", -/* TR_ERROR */ -"Fout", -/* TR_ERROR_PROBING_CDROM */ -"Geen CDROM-speler gevonden.", -/* TR_ERROR_WRITING_CONFIG */ -"Fout bij wegschrijven van configuratie informatie.", -/* TR_EURO_EDSS1 */ -"Euro (EDSS1)", -/* TR_EXTRACTING_MODULES */ -"Uitpakken modules...", -/* TR_FAILED_TO_FIND */ -"URL-bestand niet gevonden.", -/* TR_FOUND_NIC */ -"%s heeft de volgende NIC in uw machine gedetecteerd: %s", -/* TR_GERMAN_1TR6 */ -"German 1TR6", -/* TR_HELPLINE */ -" / schakel tussen elementen | selecteer", -/* TR_HOSTNAME */ -"Hostnaam", -/* TR_HOSTNAME_CANNOT_BE_EMPTY */ -"Hostnaam mag niet leeg zijn.", -/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */ -"Hostnaam mag geen spaties bevatten.", -/* TR_HOSTNAME_NOT_VALID_CHARS */ -"Hostnaam mag alleen letters, getallen en koppeltekens bevatten.", -/* TR_INITIALISING_ISDN */ -"Initialiseert ISDN...", -/* TR_INSERT_CDROM */ -"Plaats de %s CD in the CDROM-speler a.u.b.", -/* TR_INSERT_FLOPPY */ -"Plaats de %s driver-diskette in het station a.u.b.", -/* TR_INSTALLATION_CANCELED */ -"Installatie afgebroken.", -/* TR_INSTALLING_FILES */ -"Installeert bestanden...", -/* TR_INSTALLING_GRUB */ -"Installeert GRUB...", -/* TR_INSTALLING_LANG_CACHE */ -"Installeert taalbestanden...", -/* TR_INTERFACE */ -"Interface - %s", -/* TR_INTERFACE_FAILED_TO_COME_UP */ -"Interface kwam niet op.", -/* TR_INVALID_FIELDS */ -"De volgende velden zijn ongeldig:\n\n", -/* TR_INVALID_IO */ -"De ingevoerde IO-poortgegevens zijn ongeldig. ", -/* TR_INVALID_IRQ */ -"De ingevoerde IRQ gegevens zijn ongeldig.", -/* TR_IP_ADDRESS_CR */ -"IP-adres\n", -/* TR_IP_ADDRESS_PROMPT */ -"IP-adres:", -/* TR_ISDN_CARD */ -"ISDN-kaart", -/* TR_ISDN_CARD_NOT_DETECTED */ -"ISDN-kaart niet gedetecteerd. Mogelijk dient u extra moduleparameters op te geven als het een ISA type betreft of heeft het speciale eisen.", -/* TR_ISDN_CARD_SELECTION */ -"ISDN kaartselectie", -/* TR_ISDN_CONFIGURATION */ -"ISDN configuratie", -/* TR_ISDN_CONFIGURATION_MENU */ -"ISDN configuratiemenu", -/* TR_ISDN_NOT_SETUP */ -"ISDN niet ingesteld. Sommige items zijn niet geselecteerd.", -/* TR_ISDN_NOT_YET_CONFIGURED */ -"ISDN is nog niet geconfigureerd. Selecteer het item dat u wilt configureren.", -/* TR_ISDN_PROTOCOL_SELECTION */ -"ISDN protocolselectie", -/* TR_ISDN_STATUS */ -"ISDN is momenteel %s.\n\n Protocol: %s\n Kaart: %s\n Lokaal telefoonnummer: %s\n\nSelecteer het item dat u wilt herconfigureren, of kies voor de huidige instellingen.", -/* TR_KEYBOARD_MAPPING */ -"Toetsenbordindeling", -/* TR_KEYBOARD_MAPPING_LONG */ -"Kies het type toetsenbord dat u gebruikt uit de lijst hieronder.", -/* TR_LEASED_LINE */ -"Vaste verbinding", -/* TR_LOADING_MODULE */ -"Laadt module...", -/* TR_LOADING_PCMCIA */ -"Laadt PCMCIA modules...", -/* TR_LOOKING_FOR_NIC */ -"Zoekt naar: %s", -/* TR_MAKING_BOOT_FILESYSTEM */ -"Aanmaken boot bestandssysteem...", -/* TR_MAKING_LOG_FILESYSTEM */ -"Aanmaken log bestandssysteem...", -/* TR_MAKING_ROOT_FILESYSTEM */ -"Aanmaken root bestandssysteem...", -/* TR_MAKING_SWAPSPACE */ -"Aanmaken swap...", -/* TR_MANUAL */ -"* HANDMATIG *", -/* TR_MAX_LEASE */ -"Max. lease (min.):", -/* TR_MAX_LEASE_CR */ -"Max. leasetijd\n", -/* TR_MISSING_BLUE_IP */ -"Ontbrekende IP-informatie op de BLAUWE interface.", -/* TR_MISSING_ORANGE_IP */ -"Ontbrekende IP-informatie op de ORANJE interface.", -/* TR_MISSING_RED_IP */ -"Ontbrekende IP-informatie op de RODE interface.", -/* TR_MODULE_NAME_CANNOT_BE_BLANK */ -"Modulenaam mag niet leeg zijn.", -/* TR_MODULE_PARAMETERS */ -"Voer de modulenaam en parameters in voor de driver die u nodig hebt.", -/* TR_MOUNTING_BOOT_FILESYSTEM */ -"Koppelen van het boot bestandssysteem...", -/* TR_MOUNTING_LOG_FILESYSTEM */ -"Koppelen van het log bestandssysteem...", -/* TR_MOUNTING_ROOT_FILESYSTEM */ -"Koppelen van het root bestandssysteem...", -/* TR_MOUNTING_SWAP_PARTITION */ -"Koppelen van de swap partitie...", -/* TR_MSN_CONFIGURATION */ -"Lokaal telefoonnummer (MSN/EAZ)", -/* TR_NETMASK_PROMPT */ -"Netwerkmasker:", -/* TR_NETWORKING */ -"Netwerk", -/* TR_NETWORK_ADDRESS_CR */ -"Netwerkadres\n", -/* TR_NETWORK_ADDRESS_PROMPT */ -"Netwerkadres:", -/* TR_NETWORK_CONFIGURATION_MENU */ -"Netwerk configuratiemenu", -/* TR_NETWORK_CONFIGURATION_TYPE */ -"Netwerk configuratietype", -/* TR_NETWORK_CONFIGURATION_TYPE_LONG */ -"Selecteer de netwerkconfiguratie voor %s. De volgende configuratiesoorten vermelden welke interfaces op ethernet aangesloten zijn. Als u deze instellingen wijzigt, dan is een netwerk herstart nodig en u moet de netwerkdriver toewijzingen opnieuw maken.", -/* TR_NETWORK_MASK_CR */ -"Netwerkmasker\n", -/* TR_NETWORK_SETUP_FAILED */ -"Netwerkinstelling mislukt.", -/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */ -"Er zijn onvoldoende kaarten toegewezen.", -/* TR_NO_BLUE_INTERFACE */ -"Er is geen BLAUWE interface toegewezen.", -/* TR_NO_CDROM */ -"Geen CD-ROM gevonden.", -/* TR_NO_GREEN_INTERFACE */ -"Er is geen GROENE interface toegewezen.", -/* TR_NO_HARDDISK */ -"Geen vaste schijf gevonden.", -/* TR_DISK_SELECTION */ -"Disk Selection", -/* TR_DISK_SELECTION_MSG */ -"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", -/* TR_NO_DISK_SELECTED */ -"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", -/* TR_DISK_SETUP */ -"Disk Setup", -/* TR_DISK_SETUP_DESC */ -"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", -/* TR_RAID_SETUP */ -"RAID Setup", -/* TR_RAID_SETUP_DESC */ -"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", -/* TR_DELETE_ALL_DATA */ -"Delete all data", -/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ -"You disk configuration is currently not supported.", -/* TR_CREATING_FILESYSTEMS */ -"Creating filesystems...", -/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ -"Unable to create filesystems.", -/* TR_MOUNTING_FILESYSTEMS */ -"Mounting filesystems...", -/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ -"Unable to mount filesystems.", -/* TR_BUILDING_RAID */ -"Building RAID...", -/* TR_UNABLE_TO_BUILD_RAID */ -"Unable to build RAID.", -/* TR_NO_IPCOP_TARBALL_FOUND */ -"Er is geen ipcop tarball gevonden op de webserver.", -/* TR_NO_ORANGE_INTERFACE */ -"Er is geen ORANJE interface toegewezen.", -/* TR_NO_RED_INTERFACE */ -"Er is geen RODE interface toegewezen.", -/* TR_NO_SCSI_IMAGE_FOUND */ -"Er is geen SCSI image gevonden op de webserver.", -/* TR_NO_UNALLOCATED_CARDS */ -"Er zijn geen vrije kaarten over, er zijn er meer vereist. U kunt automatisch detecteren proberen en op zoek gaan naar meer kaarten, of u kiest een driver uit de lijst.", -/* TR_OK */ -"Ok", -/* TR_PARTITIONING_DISK */ -"Partitioneert schijf...", -/* TR_PASSWORDS_DO_NOT_MATCH */ -"Wachtwoorden komen niet overeen.", -/* TR_PASSWORD_CANNOT_BE_BLANK */ -"Wachtwoord mag niet leeg zijn.", -/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */ -"Wachtwoord mag geen spaties bevatten.", -/* TR_PASSWORD_PROMPT */ -"Wachtwoord:", -/* TR_PHONENUMBER_CANNOT_BE_EMPTY */ -"Telefoonnummer mag niet leeg zijn.", -/* TR_PREPARE_HARDDISK */ -"Het installatieprogramma zal nu de vaste schijf voorbereiden op %s. Eerst wordt de schijf gepartitioneerd, daarna zullen de bestandssystemen erop worden gezet.\n\nALLE DATA OP DE SCHIJF ZAL WORDEN GEWIST. Wilt u hiermee doorgaan?", -/* TR_PRESS_OK_TO_REBOOT */ -"Druk Ok om te herstarten.", -/* TR_PRIMARY_DNS */ -"Primaire DNS:", -/* TR_PRIMARY_DNS_CR */ -"Primaire DNS\n", -/* TR_PROBE */ -"Opsporen", -/* TR_PROBE_FAILED */ -"Automatisch detecteren mislukt.", -/* TR_PROBING_HARDWARE */ -"Opsporen van hardware...", -/* TR_PROBING_FOR_NICS */ -"Zoeken naar NIC's...", -/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */ -"Er is een probleem met het instellen van %s 'admin' gebruikerswachtwoord.", -/* TR_PROBLEM_SETTING_ROOT_PASSWORD */ -"Er is een probleem met het instellen van %s 'root' gebruikerswachtwoord.", -/* TR_PROBLEM_SETTING_SETUP_PASSWORD */ -"WORDT VERWIJDERD", -/* TR_PROTOCOL_COUNTRY */ -"Protocol/Land", -/* TR_PULLING_NETWORK_UP */ -"Netwerk opbrengen...", -/* TR_PUSHING_NETWORK_DOWN */ -"Netwerk stoppen...", -/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */ -"Niet-lokaal netwerk stoppen...", -/* TR_QUIT */ -"Stoppen", -/* TR_RED_IN_USE */ -"ISDN (of een andere externe verbinding) is momenteel in gebruik. U kunt ISDN niet configureren zolang de RODE interface actief is.", -/* TR_RESTART_REQUIRED */ -"\n\nAls de configuratie gereed is moet het netwerk herstart worden.", -/* TR_RESTORE */ -"Terugzetten", -/* TR_RESTORE_CONFIGURATION */ -"Als u een diskette heeft met een %s systeemconfiguratie daarop, plaats dan de diskette in het station en druk op de terugzetten-knop.", -/* TR_ROOT_PASSWORD */ -"'root' wachtwoord", -/* TR_SECONDARY_DNS */ -"Secundaire DNS:", -/* TR_SECONDARY_DNS_CR */ -"Secundaire DNS\n", -/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */ -"Secundaire DNS opgegeven zonder een primaire DNS", -/* TR_SECTION_MENU */ -"Sectiemenu", -/* TR_SELECT */ -"Selecteer", -/* TR_SELECT_CDROM_TYPE */ -"Selecteer CDROM type", -/* TR_SELECT_CDROM_TYPE_LONG */ -"Er is geen CD-ROM gedetecteerd in deze machine. Maak een keuze uit de volgende drivers waarmee %s de CD-ROM kan benaderen.", -/* TR_SELECT_INSTALLATION_MEDIA */ -"Selecteer installatiemedium", -/* TR_SELECT_INSTALLATION_MEDIA_LONG */ -"%s kan worden geïnstalleerd vanuit verschillende bronnen. De eenvoudigste manier is om de CDROM-speler van de machine te gebruiken. Als de computer geen CDROM-speler heeft, dan kunt vanaf een andere machine installeren die de installatiebestanden beschikbaar kan maken over het netwerk via HTTP of FTP.", -/* TR_SELECT_NETWORK_DRIVER */ -"Selecteer netwerkdriver", -/* TR_SELECT_NETWORK_DRIVER_LONG */ -"Selecteer de netwerkdriver voor de aanwezige kaart in deze machine. Als u HANDMATIG selecteert, krijgt u de mogelijkheid om de driver modulenaam en parameters op te geven voor drivers met speciale eisen, zoals voor ISA-kaarten.", -/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */ -"Selecteer de interface die u wilt herconfigureren.", -/* TR_SELECT_THE_ITEM */ -"Selecteer het item dat u wilt configureren.", -/* TR_SETTING_ADMIN_PASSWORD */ -"Instellen van %s 'admin' gebruikerswachtwoord...", -/* TR_SETTING_ROOT_PASSWORD */ -"Instellen van 'root' wachtwoord....", -/* TR_SETTING_SETUP_PASSWORD */ -"WORDT VERWIJDERD", -/* TR_SETUP_FINISHED */ -"Setup is afgerond. Druk Ok.", -/* TR_SETUP_NOT_COMPLETE */ -"Initiële setup was niet volledig afgerond. Verzeker u ervan dat de setup goed is afgerond door het setup programma nogmaals vanaf de commandoregel te starten.", -/* TR_SETUP_PASSWORD */ -"WORDT VERWIJDERD", -/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */ -"Instellen additionele moduleparameters", -/* TR_SINGLE_GREEN */ -"Uw configuratie is ingesteld voor een enkele GROENE interface.", -/* TR_SKIP */ -"Overslaan", -/* TR_START_ADDRESS */ -"Beginadres:", -/* TR_START_ADDRESS_CR */ -"Beginadres\n", -/* TR_STATIC */ -"Statisch", -/* TR_SUGGEST_IO */ -"(voorstel %x)", -/* TR_SUGGEST_IRQ */ -"(voorstel %d)", -/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */ -"Deze drivermodule is al geladen.", -/* TR_TIMEZONE */ -"Tijdzone", -/* TR_TIMEZONE_LONG */ -"Kies de tijdzone waar u zich bevindt uit de lijst hieronder.", -/* TR_UNABLE_TO_EJECT_CDROM */ -"Kan de CDROM niet uitwerpen.", -/* TR_UNABLE_TO_EXTRACT_MODULES */ -"Kan de modules niet uitpakken.", -/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */ -"Kan geen additionele drivers vinden.", -/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */ -"Kan geen ISDN-kaart vinden in deze computer. U kunt extra module parameters opgeven als het een ISA-kaart betreft of als het speciale eisen heeft.", -/* TR_UNABLE_TO_INITIALISE_ISDN */ -"Kan de ISDN-kaart niet initialiseren.", -/* TR_UNABLE_TO_INSTALL_FILES */ -"Kan de bestanden niet installeren.", -/* TR_UNABLE_TO_INSTALL_LANG_CACHE */ -"Kan de taalbestanden niet installeren.", -/* TR_UNABLE_TO_INSTALL_GRUB */ -"Kan GRUB niet installeren.", -/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */ -"Kan de drivermodule niet laden.", -/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */ -"Kan het boot bestandssysteem niet aanmaken.", -/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */ -"Kan het log bestandssysteem niet aanmaken.", -/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */ -"Kan het root bestandssysteem niet aanmaken.", -/* TR_UNABLE_TO_MAKE_SWAPSPACE */ -"Kan het swap bestandssysteem niet aanmaken.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */ -"Kan de symlink /dev/harddisk niet aanmaken.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */ -"Kan de symlink /dev/harddisk1 niet aanmaken.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */ -"Kan de symlink /dev/harddisk2 niet aanmaken.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */ -"Kan de symlink /dev/harddisk3 niet aanmaken.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */ -"Kan de symlink /dev/harddisk4 niet aanmaken.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */ -"Kan de symlink /dev/root niet aanmaken.", -/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */ -"Kan het boot bestandssysteem niet koppelen.", -/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */ -"Kan het log bestandssysteem niet koppelen.", -/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */ -"Kan het proc bestandssysteem niet koppelen.", -/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */ -"Kan het root bestandssysteem niet koppelen.", -/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */ -"Kan de swap partitie niet koppelen.", -/* TR_UNABLE_TO_OPEN_HOSTS_FILE */ -"Kan het hosts-bestand niet openen.", -/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */ -"Kan het instellingenbestand niet openen", -/* TR_UNABLE_TO_PARTITION */ -"Kan de schijf niet partitioneren.", -/* TR_UNABLE_TO_REMOVE_TEMP_FILES */ -"Kan de tijdelijke gedownloade bestanden niet verwijderen.", -/* TR_UNABLE_TO_SET_HOSTNAME */ -"Kan de hostnaam niet instellen.", -/* TR_UNABLE_TO_UNMOUNT_CDROM */ -"Kan het CDROM-/diskettestation niet ontkoppelen.", -/* TR_UNABLE_TO_UNMOUNT_HARDDISK */ -"Kan de vaste schijf niet ontkoppelen.", -/* TR_UNABLE_TO_WRITE_ETC_FSTAB */ -"Kan /etc/fstab niet wegschrijven", -/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */ -"Kan /etc/hostname niet wegschrijven", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS */ -"Kan /etc/hosts niet wegschrijven.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */ -"Kan /etc/hosts.allow niet wegschrijven.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */ -"Kan /etc/hosts.deny niet wegschrijven.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */ -"Kan %s/ethernet/settings niet wegschrijven.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */ -"Kan %s/main/hostname.conf niet wegschrijven.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */ -"Kan %s/main/settings niet wegschrijven.", -/* TR_UNCLAIMED_DRIVER */ -"Er is een ongebruikte ethernetkaart van het type:\n%s\n\nU kunt deze toewijzen aan:", -/* TR_UNKNOWN */ -"ONBEKEND", -/* TR_UNSET */ -"NIET INGESTELD", -/* TR_USB_KEY_VFAT_ERR */ -"Deze USB-sleutel is ongeldig (geen vfat partitie gevonden).", -/* TR_US_NI1 */ -"US NI1", -/* TR_WARNING */ -"WAARSCHUWING", -/* TR_WARNING_LONG */ -"Als u dit IP-adres wijzigt, en u bent op afstand ingelogd, dan zal de verbinding naar de %s machine worden verbroken en u zult opnieuw moeten verbinden naar het nieuwe IP-adres. Dit is een riskante handeling en moet alleen geprobeerd worden als u fysieke toegang tot de machine hebt, in het geval er iets fout gaat.", -/* TR_WELCOME */ -"Welkom bij het %s installatieprogramma. Als u 'annuleren' kiest op een van de volgende schermen selecteert zal de computer herstarten.", -/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */ -"Uw configuratie is ingesteld voor een enkele GROENE interface, welke al een driver toegewezen heeft.", -/* TR_YES */ -"Ja", -/* TR_NO */ -"Nee", -/* TR_AS */ -"als", -/* TR_IGNORE */ -"Negeer", -/* TR_PPP_DIALUP */ -"PPP DIALUP (PPPoE, modem, ATM ...)", -/* TR_DHCP */ -"DHCP", -/* TR_DHCP_STARTSERVER */ -"Start DHCP-server ...", -/* TR_DHCP_STOPSERVER */ -"Stopt DHCP-server ...", -/* TR_LICENSE_ACCEPT */ -"Ik accepteer deze licentie.", -/* TR_LICENSE_NOT_ACCEPTED */ -"Licentie niet geaccepteerd. Stopt!", -/* TR_EXT4FS */ -"EXT4 - Filesystem", -/* TR_EXT4FS_WO_JOURNAL */ -"EXT4 - Filesystem without journal", -/* TR_XFS */ -"XFS - Filesystem", -/* TR_REISERFS */ -"ReiserFS - Filesystem", -/* TR_NO_LOCAL_SOURCE */ -"Geen lokale bronmedia gevonden. Start download.", -/* TR_DOWNLOADING_ISO */ -"Downloaden van installatie-image ...", -/* TR_DOWNLOAD_ERROR */ -"Fout tijdens downloaden!", -/* TR_DHCP_FORCE_MTU */ -"Forceer DHCP mtu:", -/* TR_IDENTIFY */ -"Identificeer", -/* TR_IDENTIFY_SHOULD_BLINK */ -"Geselecteerde poort zou nu moeten knipperen ...", -/* TR_IDENTIFY_NOT_SUPPORTED */ -"Functie wordt niet ondersteund door deze poort.", -}; diff --git a/langs/pl/install/lang_pl.c b/langs/pl/install/lang_pl.c deleted file mode 100644 index 21e705f92..000000000 --- a/langs/pl/install/lang_pl.c +++ /dev/null @@ -1,622 +0,0 @@ -/* - * Polish (pl) Data File - * - * This file is part of the IPFire. - * - * IPCop 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. - * - * IPCop 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 IPCop; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * (c) IPFire Team - * - */ - -#include "libsmooth.h" - -char *pl_tr[] = { - -/* TR_ISDN */ -"ISDN", -/* TR_ERROR_PROBING_ISDN */ -"Nie można przeprowadzić wyszukiwania urządzeń ISDN.", -/* TR_PROBING_ISDN */ -"Wyszukiwanie i konfiguracja urządzeń ISDN.", -/* TR_MISSING_GREEN_IP */ -"Brak adresu IP interfejsu Green!", -/* TR_CHOOSE_FILESYSTEM */ -"Proszę wybrać system plików:", -/* TR_NOT_ENOUGH_INTERFACES */ -"Brak wystarczającej liczby urządzeń sieciowych.\n\nPotrzebne: %d - Dostępne: %d\n", -/* TR_INTERFACE_CHANGE */ -"Proszę wybrać interfejs dla którego chcesz wprowadzić zmiany.\n\n", -/* TR_NETCARD_COLOR */ -"Przypisane karty", -/* TR_REMOVE */ -"Usuń", -/* TR_MISSING_DNS */ -"Brakujący DNS.\n", -/* TR_MISSING_DEFAULT */ -"Brak bramy domyślnej.\n", -/* TR_JOURNAL_EXT3 */ -"Tworzenie dziennika dla Ext3...", -/* TR_CHOOSE_NETCARD */ -"Proszę wybrać urządzenie sieciowe dla interfejsu - %s.", -/* TR_NETCARDMENU2 */ -"Rozszerzone menu sieci", -/* TR_ERROR_INTERFACES */ -"W twoim systemie nie ma wolnych interfejsów.", -/* TR_REMOVE_CARD */ -"Czy usunąć przydział dla tej karty sieciowej? - %s", -/* TR_JOURNAL_ERROR */ -"Nie można utworzyć dziennika, nastąpi powrót do ext2.", -/* TR_FILESYSTEM */ -"Wybierz system plików", -/* TR_ADDRESS_SETTINGS */ -"Ustawienia adresów", -/* TR_ADMIN_PASSWORD */ -"hasło 'admina' ", -/* TR_AGAIN_PROMPT */ -"Powtórz:", -/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */ -"Wszystkie karty przypisano poprawnie.", -/* TR_AUTODETECT */ -"* AUTODETECT *", -/* TR_BUILDING_INITRD */ -"Tworzenie ramdisk...", -/* TR_CANCEL */ -"Anuluj", -/* TR_CARD_ASSIGNMENT */ -"Przypisywanie kart", -/* TR_CHECKING */ -"Sprawdzanie URL...", -/* TR_CHECKING_FOR */ -"Sprawdzanie dla: %s", -/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */ -"Wybierz kartę ISDN zainstalowaną w tym komputerze.", -/* TR_CHOOSE_THE_ISDN_PROTOCOL */ -"Wybierz wymagany protokół ISDN.", -/* TR_CONFIGURE_DHCP */ -"Skonfiguruj serwer DHCP wprowadzając odpowiednie ustawienia.", -/* TR_CONFIGURE_NETWORKING */ -"Konfiguruj sieć", -/* TR_CONFIGURE_NETWORKING_LONG */ -"Teraz powinieneś skonfigurować sieć poprzez załadowanie odpowiedniego sterownika dla interfejsu GREEN. Możesz skorzystać z automatycznego wykrywania kart sieciowych lub wybrać odpowiedni sterownik z listy. Pamiętaj - jeżeli posiadasz zainstalowaną więcej niż jedną kartę sieciową ich konfigurację będzie można przeprowadzić w dalszej części procesu instalacji. Pamiętaj także, że jeżeli posiadasz więcej niż jedną kartę sieciową takiego samego typu jak GREEN i każda z nich wymaga specjalnych parametrów modułu należy wprowadzić parametry dla wszystkich kart tego typu tak aby możliwe było aktywowanie interfejsu GREEN po jego konfiguracji.", -/* TR_CONFIGURE_NETWORK_DRIVERS */ -"Konfiguracja sterowników oraz przydział kart sieciowych do interfejsów. Aktualna konfiguracja wygląda następująco:\n\n", -/* TR_CONFIGURE_THE_CDROM */ -"Skonfiguruj CDROM wybierając odpowiedni adres IO i/lub IRQ.", -/* TR_CONGRATULATIONS */ -"Gratulacje!", -/* TR_CONGRATULATIONS_LONG */ -"%s został prawidłowo zainstalowany. Proszę usunąć płytę CD z komputera. Uruchomiony zostanie program konfiguracyjny umożliwiający ustawienie połączenia ISDN, kart sieciowych oraz haseł. Po wprowadzeniu ustawień powinieneś otworzyć w przeglądare adres https://%s:444 (lub wprowadzoną nazwę %s) aby przejść do panelu zarządzania systemem.", -/* TR_CONTINUE_NO_SWAP */ -"Twój dysk twardy jest bardzo mały. Możesz kontynuować, ale utworzona zostanie bardzo mała przestrzeń swap. (Używaj ostrożnie).", -/* TR_CURRENT_CONFIG */ -"Aktualna konfiguracja: %s%s", -/* TR_DEFAULT_GATEWAY */ -"Brama domyślna:", -/* TR_DEFAULT_GATEWAY_CR */ -"Brama domyślna\n", -/* TR_DEFAULT_LEASE */ -"Domyślny czas dzierżawy (minut):", -/* TR_DEFAULT_LEASE_CR */ -"Domyślny czas dzierżawy\n", -/* TR_DETECTED */ -"Wykryto: %s", -/* TR_DHCP_HOSTNAME */ -"Nazwa hosta DHCP:", -/* TR_DHCP_HOSTNAME_CR */ -"Nazwa hosta DHCP\n", -/* TR_DHCP_SERVER_CONFIGURATION */ -"Konfiguracja serwera DHCP", -/* TR_DISABLED */ -"Wyłączone", -/* TR_DISABLE_ISDN */ -"Wyłącz ISDN", -/* TR_DISK_TOO_SMALL */ -"Twój dysk jest za mały.", -/* TR_DNS_AND_GATEWAY_SETTINGS */ -"Ustawienia DNS i bramy", -/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */ -"Wprowadź informacje o DNS i bramie. Te ustawienie są używane tylko dla statycznego IP (i DHCP jeżeli ustawiono DNS) na interfejsie RED.", -/* TR_DNS_GATEWAY_WITH_GREEN */ -"Twoja konfiguracja nie wykorzystuje karty ethernet jako interfejsu RED. Informacje o DNS i bramie są wprowadzane automatycznie dla połączeń typu dialup przy połączeniu.", -/* TR_DOMAINNAME */ -"Nazwa domeny", -/* TR_DOMAINNAME_CANNOT_BE_EMPTY */ -"Nazwa domeny nie może być pusta.", -/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */ -"Nazwa domeny nie może zawierać spacji.", -/* TR_DOMAINNAME_NOT_VALID_CHARS */ -"Domain name may only contain letters, numbers, hyphens and periods.", -/* TR_DOMAIN_NAME_SUFFIX */ -"Sufix nazwy domeny:", -/* TR_DOMAIN_NAME_SUFFIX_CR */ -"Sufix nazwy domeny\n", -/* TR_DONE */ -"Gotowe", -/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */ -"\nCzy chcesz zmienić te ustawienia?", -/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */ -"Przypisywanie sterowników i kart", -/* TR_ENABLED */ -"Włączone", -/* TR_ENABLE_ISDN */ -"Włącz ISDN", -/* TR_END_ADDRESS */ -"Adres końcowy:", -/* TR_END_ADDRESS_CR */ -"Adres końcowy\n", -/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */ -"Niektóre karty ISDN (w szczególności ISA) mogą wymagać dodatkowych parametrów modułu w celu ustawienia IRQ i adresu IO. Jeżeli posiadasz tego typu kartę wprowadź te dodatkowe parametry tutaj. Na przykład: \"io=0x280 irq=9\". Zostaną one użyte podczas wykrywania kart.", -/* TR_ENTER_ADMIN_PASSWORD */ -"Podaj hasło użytkownika 'admin' dla %s . Jest to użytkownik na którego będziesz logował się do interfejsu WWW aby zarządzać %s .", -/* TR_ENTER_DOMAINNAME */ -"Wprowadź nazwę domeny", -/* TR_ENTER_HOSTNAME */ -"Podaj nazwę hosta dla maszyny.", -/* TR_ENTER_IP_ADDRESS_INFO */ -"Wprowadź informacje o adresie IP", -/* TR_ENTER_NETWORK_DRIVER */ -"Nie można wykryć kart sieciowych automatycznie. Wprowadź sterownik oraz dodatkowe parametry dla karty sieciowej.", -/* TR_ENTER_ROOT_PASSWORD */ -"Podaj hasło użytkownika 'root' . Jest to użytkownik wykorzystywany do logowania do linii poleceń.", -/* TR_ENTER_SETUP_PASSWORD */ -"TO BE REMOVED", -/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */ -"Wprowadź informacje o adresie IP dla interfejsu %s .", -/* TR_ENTER_THE_LOCAL_MSN */ -"Wprowadź lokalny numer telefonu (MSN/EAZ).", -/* TR_ENTER_URL */ -"Wprowadź adres URL do ipcop-.tgz i plików images/scsidrv-.img . UWAGA: DNS niedostępny! URL powinien wyglądać następująco http://X.X.X.X/", -/* TR_ERROR */ -"Błąd", -/* TR_ERROR_PROBING_CDROM */ -"Nie znaleziono napędu CDROM.", -/* TR_ERROR_WRITING_CONFIG */ -"Błąd zapisywania informacji o konfiguracji.", -/* TR_EURO_EDSS1 */ -"Euro (EDSS1)", -/* TR_EXTRACTING_MODULES */ -"Wypakowywanie modułów...", -/* TR_FAILED_TO_FIND */ -"Nie można odnaleźć pliku URL.", -/* TR_FOUND_NIC */ -"%s wykrył następujące urządzenia NIC w twojej maszynie: %s", -/* TR_GERMAN_1TR6 */ -"German 1TR6", -/* TR_HELPLINE */ -" / pomiędzy pozycjami | wybór", -/* TR_HOSTNAME */ -"Nazwa hosta", -/* TR_HOSTNAME_CANNOT_BE_EMPTY */ -"Nazwa hosta nie może być pusta.", -/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */ -"Nazwa hosta nie może zawierać spacji.", -/* TR_HOSTNAME_NOT_VALID_CHARS */ -"Nazwa hosta może zawierać tylko listery, cyfry i łączniki.", -/* TR_INITIALISING_ISDN */ -"Inicjalizacja ISDN...", -/* TR_INSERT_CDROM */ -"Proszę włożyć %s CD do napędu CDROM.", -/* TR_INSERT_FLOPPY */ -"Proszę włożyć dyskietkę ze sterownikami %s do napędu.", -/* TR_INSTALLATION_CANCELED */ -"Instalacja anulowana.", -/* TR_INSTALLING_FILES */ -"Instalowanie plików...", -/* TR_INSTALLING_GRUB */ -"Instalowanie GRUB...", -/* TR_INSTALLING_LANG_CACHE */ -"Instalowanie plików językowych...", -/* TR_INTERFACE */ -"Interfejs - %s", -/* TR_INTERFACE_FAILED_TO_COME_UP */ -"Nie można uruchomić interfejsu.", -/* TR_INVALID_FIELDS */ -"Poniższe pola są niepoprawne:\n\n", -/* TR_INVALID_IO */ -"Szczegóły portu IO są nieprawidłowe. ", -/* TR_INVALID_IRQ */ -"Wprowadzone dane IRQ są niepoprawne.", -/* TR_IP_ADDRESS_CR */ -"Adres IP\n", -/* TR_IP_ADDRESS_PROMPT */ -"Adres IP:", -/* TR_ISDN_CARD */ -"Karta ISDN", -/* TR_ISDN_CARD_NOT_DETECTED */ -"Nie wykryto karty ISDN. Możesz wprowadzić dodatkowe parametry modułu jeżeli posiadasz kartę ISA lub twoja karta ma specyficzne wymagania.", -/* TR_ISDN_CARD_SELECTION */ -"Wybór karty ISDN", -/* TR_ISDN_CONFIGURATION */ -"Konfiguracja ISDN", -/* TR_ISDN_CONFIGURATION_MENU */ -"Menu konfiguracji ISDN", -/* TR_ISDN_NOT_SETUP */ -"Nie skonfigurowano ISDN. Pewne pozycje nie zostały wybrane.", -/* TR_ISDN_NOT_YET_CONFIGURED */ -"ISDN nie został jeszcze skonfigurowany. Wybierz tą pozycję aby skonfigurować.", -/* TR_ISDN_PROTOCOL_SELECTION */ -"Wybór protokołu ISDN", -/* TR_ISDN_STATUS */ -"ISDN jest obecnie %s.\n\n Protokół: %s\n Karta: %s\n Lokalny numer telefonu: %s\n\nWybierz pozycję którą chcesz zmienić lub pozostaw obecną konfigurację.", -/* TR_KEYBOARD_MAPPING */ -"Układ klawiatury", -/* TR_KEYBOARD_MAPPING_LONG */ -"Z poniższej listy wybierz układ klawiatury którego chcesz używać.", -/* TR_LEASED_LINE */ -"Linia dzierżawiona", -/* TR_LOADING_MODULE */ -"Ładowanie modułu...", -/* TR_LOADING_PCMCIA */ -"Ładowanie modułów PCMCIA...", -/* TR_LOOKING_FOR_NIC */ -"Wyszukiwanie: %s", -/* TR_MAKING_BOOT_FILESYSTEM */ -"Tworzenie systemu plików boot...", -/* TR_MAKING_LOG_FILESYSTEM */ -"Tworzenie systemu plików log...", -/* TR_MAKING_ROOT_FILESYSTEM */ -"Tworzenie systemu plików root...", -/* TR_MAKING_SWAPSPACE */ -"Tworzenie przestrzeni swap...", -/* TR_MANUAL */ -"* RĘCZNIE *", -/* TR_MAX_LEASE */ -"Maks czas dzierżawy (minut):", -/* TR_MAX_LEASE_CR */ -"Maks czas dzierżawy\n", -/* TR_MISSING_BLUE_IP */ -"Brak informacji o IP dla interfejsu BLUE.", -/* TR_MISSING_ORANGE_IP */ -"Brak informacji o IP dla interfejsu ORANGE.", -/* TR_MISSING_RED_IP */ -"Brak informacji o IP dla interfejsu RED.", -/* TR_MODULE_NAME_CANNOT_BE_BLANK */ -"Nazwa modułu nie może być pusta.", -/* TR_MODULE_PARAMETERS */ -"Wprowadź nazwę modułu i parametry dla sterownika.", -/* TR_MOUNTING_BOOT_FILESYSTEM */ -"Montowanie systemu plików boot...", -/* TR_MOUNTING_LOG_FILESYSTEM */ -"Montowanie systemu plików log...", -/* TR_MOUNTING_ROOT_FILESYSTEM */ -"Montowanie systemu plików root...", -/* TR_MOUNTING_SWAP_PARTITION */ -"Montowanie przestrzeni wymiany swap...", -/* TR_MSN_CONFIGURATION */ -"Lokalny numer telefonu (MSN/EAZ)", -/* TR_NETMASK_PROMPT */ -"Maska sieci:", -/* TR_NETWORKING */ -"Sieć", -/* TR_NETWORK_ADDRESS_CR */ -"Adres sieci\n", -/* TR_NETWORK_ADDRESS_PROMPT */ -"Adres sieci:", -/* TR_NETWORK_CONFIGURATION_MENU */ -"Menu konfiguracji sieci", -/* TR_NETWORK_CONFIGURATION_TYPE */ -"Typ konfiguracji sieci", -/* TR_NETWORK_CONFIGURATION_TYPE_LONG */ -"Wybierz typ konfiguracji sieci dla %s. Poniższe typy konfiguracji uwzględniają podłączone interfejsy typu ethernet. Jeżeli zmienisz te ustawienia sieć zostanie uruchomiona ponownie i koniecznie będzie ponowne przypisanie sterowników kart.", -/* TR_NETWORK_MASK_CR */ -"Maska sieci\n", -/* TR_NETWORK_SETUP_FAILED */ -"Błąd konfiguracji sieci.", -/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */ -"Nie można przydzielić wymaganej liczby kart.", -/* TR_NO_BLUE_INTERFACE */ -"Nie przypisano interfejsu BLUE.", -/* TR_NO_CDROM */ -"Nie znaleziono CD-ROM'u.", -/* TR_NO_GREEN_INTERFACE */ -"Nie przypisano interfejsu GREEN.", -/* TR_NO_HARDDISK */ -"Nie znaleziono dysku twardego.", -/* TR_DISK_SELECTION */ -"Disk Selection", -/* TR_DISK_SELECTION_MSG */ -"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", -/* TR_NO_DISK_SELECTED */ -"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", -/* TR_DISK_SETUP */ -"Disk Setup", -/* TR_DISK_SETUP_DESC */ -"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", -/* TR_RAID_SETUP */ -"RAID Setup", -/* TR_RAID_SETUP_DESC */ -"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", -/* TR_DELETE_ALL_DATA */ -"Delete all data", -/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ -"You disk configuration is currently not supported.", -/* TR_CREATING_FILESYSTEMS */ -"Creating filesystems...", -/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ -"Unable to create filesystems.", -/* TR_MOUNTING_FILESYSTEMS */ -"Mounting filesystems...", -/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ -"Unable to mount filesystems.", -/* TR_BUILDING_RAID */ -"Building RAID...", -/* TR_UNABLE_TO_BUILD_RAID */ -"Unable to build RAID.", -/* TR_NO_IPCOP_TARBALL_FOUND */ -"Nie znaleziono archiwum tar ipcop na serwerze Web.", -/* TR_NO_ORANGE_INTERFACE */ -"Nie przypisano interfejsu ORANGE.", -/* TR_NO_RED_INTERFACE */ -"Nie przypisano interfejsu RED.", -/* TR_NO_SCSI_IMAGE_FOUND */ -"Nie znaleziono obrazu SCSI na serwerze Web.", -/* TR_NO_UNALLOCATED_CARDS */ -"Nie pozostało więcej nieprzypisanych kart. Możesz wykorzystać automatyczne wykrywanie aby poszukać więcej kart, lub ręcznie wybrać sterownik z listy.", -/* TR_OK */ -"Ok", -/* TR_PARTITIONING_DISK */ -"Partycjonowanie dysku...", -/* TR_PASSWORDS_DO_NOT_MATCH */ -"Hasła nie są identyczne.", -/* TR_PASSWORD_CANNOT_BE_BLANK */ -"Hasło nie może być puste.", -/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */ -"Hasło nie może zawierać spacji.", -/* TR_PASSWORD_PROMPT */ -"Hasło:", -/* TR_PHONENUMBER_CANNOT_BE_EMPTY */ -"Numer telefonu nie może być pusty.", -/* TR_PREPARE_HARDDISK */ -"Program instalacyjny przygotuje dysk na %s. Nastąpi partycjonowanie dysku, a następnie utworzone zostaną systemy plików na partycjach.", -/* TR_PRESS_OK_TO_REBOOT */ -"Naciśnij OK aby uruchomić ponownie.", -/* TR_PRIMARY_DNS */ -"Podstawowy DNS:", -/* TR_PRIMARY_DNS_CR */ -"Podstawowy DNS\n", -/* TR_PROBE */ -"Sprawdź", -/* TR_PROBE_FAILED */ -"Błąd automatycznego wykrywania.", -/* TR_PROBING_HARDWARE */ -"Sprawdzanie sprzętu...", -/* TR_PROBING_FOR_NICS */ -"Sprawdzanie interfejsów NIC...", -/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */ -"Problem podczas ustawiania hasła dla użytkownika %s 'admin' .", -/* TR_PROBLEM_SETTING_ROOT_PASSWORD */ -"Problem podczas ustawiania hasła dla użytkownika 'root' .", -/* TR_PROBLEM_SETTING_SETUP_PASSWORD */ -"TO BE REMOVED", -/* TR_PROTOCOL_COUNTRY */ -"Protokół/Kraj", -/* TR_PULLING_NETWORK_UP */ -"Uruchamianie sieci...", -/* TR_PUSHING_NETWORK_DOWN */ -"Wyłączanie sieci...", -/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */ -"Wyłączanie sieci innych niż lokalna...", -/* TR_QUIT */ -"Wyjście", -/* TR_RED_IN_USE */ -"ISDN (lub inne zewnętrzne połączenie) jest aktualnie w użyciu. Nie możesz skonfigurować ISDN kiedy interfejs RED jest aktywny.", -/* TR_RESTART_REQUIRED */ -"\n\nPo zakończeniu konfiguracji wymagane będzie ponowne uruchomienie sieci.", -/* TR_RESTORE */ -"Przywróć", -/* TR_RESTORE_CONFIGURATION */ -"Jeżeli posiadasz dyskietkę zawierającą konfigurację systemu %s , umieść ją w napędzie dyskietek i naciśnij przycisk Przywróć.", -/* TR_ROOT_PASSWORD */ -"hasło 'root'", -/* TR_SECONDARY_DNS */ -"Drugi DNS:", -/* TR_SECONDARY_DNS_CR */ -"Drugi DNS\n", -/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */ -"Zdefiniowano drugi DNS bez podania podstawowego", -/* TR_SECTION_MENU */ -"Section menu", -/* TR_SELECT */ -"Wybierz", -/* TR_SELECT_CDROM_TYPE */ -"Wybierz typ CDROM", -/* TR_SELECT_CDROM_TYPE_LONG */ -"Nie wykryto CD-ROM'u w tym komputerze. Proszę wybrać sterowniki których chcesz użyć aby %s mógł uzyskać dostęp do CD-ROM.", -/* TR_SELECT_INSTALLATION_MEDIA */ -"Wybierz nośnik instalacji", -/* TR_SELECT_INSTALLATION_MEDIA_LONG */ -"%s może być zainstalowany z wielu źródeł. Najprostszym sposobem jest instalacja z napędu CDROM. Jeżeli ten komputer nie posiada takiego napędu możesz przeprowadzić instalację z innego komputera w sieci LAN udostępniającego pliki przez HTTP lub FTP.", -/* TR_SELECT_NETWORK_DRIVER */ -"Wybierz sterownik karty sieciowej", -/* TR_SELECT_NETWORK_DRIVER_LONG */ -"Wybierz sterownik dla karty sieciowej zainstalowanej w komputerze. Jeżeli wybierzesz ręczne przypisywanie sterowników będziesz miał możliwość wprowadzenie modułu sterownika i dodatkowych parametrów wymaganych przez niektóre karty (np. ISA).", -/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */ -"Wybierz interfejs którego konfigurację chcesz zmienić.", -/* TR_SELECT_THE_ITEM */ -"Wybierz pozycję którą chcesz konfigurować.", -/* TR_SETTING_ADMIN_PASSWORD */ -"Ustawianie hasła dla użytkownika 'admin' %s ...", -/* TR_SETTING_ROOT_PASSWORD */ -"Ustawianie hasła użytkownika 'root' ....", -/* TR_SETTING_SETUP_PASSWORD */ -"TO BE REMOVED", -/* TR_SETUP_FINISHED */ -"Zakończono konfigurowanie. Naciśnij Ok.", -/* TR_SETUP_NOT_COMPLETE */ -"Początkowo konfiguracja nie jest kompletna. Należy upewnić się, że ustawienia są poprawne przez uruchomienie programu konfiguracyjnego (polecenia setup z linii poleceń).", -/* TR_SETUP_PASSWORD */ -"TO BE REMOVED", -/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */ -"Ustaw dodatkowe parametry modułu", -/* TR_SINGLE_GREEN */ -"Twoja konfiguracja zezwala tylko na 1 interfejs GREEN.", -/* TR_SKIP */ -"Pomiń", -/* TR_START_ADDRESS */ -"Adres początkowy:", -/* TR_START_ADDRESS_CR */ -"Adres początkowy\n", -/* TR_STATIC */ -"Statycznie", -/* TR_SUGGEST_IO */ -"(sugerowane %x)", -/* TR_SUGGEST_IRQ */ -"(sugerowane %d)", -/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */ -"Moduł sterownika jest już załadowany.", -/* TR_TIMEZONE */ -"Strefa czasowa", -/* TR_TIMEZONE_LONG */ -"Wybierz strefę czasową z poniższej listy.", -/* TR_UNABLE_TO_EJECT_CDROM */ -"Nie można wysunąć CDROM'u.", -/* TR_UNABLE_TO_EXTRACT_MODULES */ -"Nie można wypakować modułów.", -/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */ -"Nie można odnaleźć dodatkowych sterowników.", -/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */ -"Nie można odnaleźć karty ISDN w tym komputerze. Może być konieczne zdefiniowanie dodatkowych parametrów modułu jeżeli karta jest typu ISA lub ma specyficzne wymagania.", -/* TR_UNABLE_TO_INITIALISE_ISDN */ -"Nie można zainicjować ISDN.", -/* TR_UNABLE_TO_INSTALL_FILES */ -"Nie można zainstalować plików.", -/* TR_UNABLE_TO_INSTALL_LANG_CACHE */ -"Nie można zainstalować plików językowych.", -/* TR_UNABLE_TO_INSTALL_GRUB */ -"Nie można zainstalować GRUB'a.", -/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */ -"Nie można zainstalować modułu sterownika.", -/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */ -"Nie można utowrzyć systemu plików boot.", -/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */ -"Nie można utowrzyć systemu plików log.", -/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */ -"Nie można utowrzyć systemu plików root.", -/* TR_UNABLE_TO_MAKE_SWAPSPACE */ -"Nie można utworzyć przestrzeni swap.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */ -"Nie można utworzyć linku symbolicznego /dev/harddisk.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */ -"Nie można utworzyć linku symbolicznego /dev/harddisk1.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */ -"Nie można utworzyć linku symbolicznego /dev/harddisk2.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */ -"Nie można utworzyć linku symbolicznego /dev/harddisk3.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */ -"Nie można utworzyć linku symbolicznego /dev/harddisk4.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */ -"Nie można utworzyć linku symbolicznego /dev/root.", -/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */ -"Nie można zamontować systemu plików boot.", -/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */ -"Nie można zamontować systemu plików log.", -/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */ -"Nie można zamontować systemu plików proc.", -/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */ -"Nie można zamontować systemu plików root.", -/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */ -"Nie można zamontować partycji swap.", -/* TR_UNABLE_TO_OPEN_HOSTS_FILE */ -"Nie można otworzyć głównego plików z hostami.", -/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */ -"Nie można utworzyć pliku ustawień", -/* TR_UNABLE_TO_PARTITION */ -"Nie można utworzyć partycji na dysku.", -/* TR_UNABLE_TO_REMOVE_TEMP_FILES */ -"Nie można usunąć pobranych plików tymczasowych.", -/* TR_UNABLE_TO_SET_HOSTNAME */ -"Nie można ustawić nazwy hosta.", -/* TR_UNABLE_TO_UNMOUNT_CDROM */ -"Nie można odmontować CDROM'u lub dyskietki.", -/* TR_UNABLE_TO_UNMOUNT_HARDDISK */ -"Nie można odmontować harddisk.", -/* TR_UNABLE_TO_WRITE_ETC_FSTAB */ -"Nie można zapisać /etc/fstab", -/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */ -"Nie można zapisać /etc/hostname", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS */ -"Nie można zapisać /etc/hosts.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */ -"Nie można zapisać /etc/hosts.allow.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */ -"Nie można zapisać /etc/hosts.deny.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */ -"Nie można zapisać %s/ethernet/settings.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */ -"Nie można zapisać %s/main/hostname.conf", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */ -"Nie można zapisać %s/main/settings.", -/* TR_UNCLAIMED_DRIVER */ -"Istnieje nieprzydzielona karta ethernet typu:\n%s\n\nMożesz ją przypisać do:", -/* TR_UNKNOWN */ -"NIEZNANY", -/* TR_UNSET */ -"UNSET", -/* TR_USB_KEY_VFAT_ERR */ -"Ten nośnik USB jest nieprawidłowy (nie znaleziono partycji vfat).", -/* TR_US_NI1 */ -"US NI1", -/* TR_WARNING */ -"UWAGA", -/* TR_WARNING_LONG */ -"Jeżeli zmienisz ten adres IP i jesteś zdalnie zalogowany twoje połączenie z %s zostnie przerwane i konieczne będzie ponowne zalogowanie na nowy adres IP. Jest to ryzykowna operacja i powinna być wykonywana tylko w sytuacji kiedy możliwy jest fizyczny dostęp do maszyny gdyby coś poszło nie tak.", -/* TR_WELCOME */ -"Witaj w programie instalacyjnym %s . Wybranie przycisku Anuluj na kolejnych ekranach spowoduje ponowne uruchomienie komputera.", -/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */ -"Twoja konfiguracja zezwala na jeden interfejs GREEN, który posiada już przypisany sterownik.", -/* TR_YES */ -"Tak", -/* TR_NO */ -"Nie", -/* TR_AS */ -"jako", -/* TR_IGNORE */ -"Ignoruj", -/* TR_PPP_DIALUP */ -"PPP DIALUP (PPPoE, modem, ATM ...)", -/* TR_DHCP */ -"DHCP", -/* TR_DHCP_STARTSERVER */ -"Uruchamianie serwera DHCP ...", -/* TR_DHCP_STOPSERVER */ -"Zatrzymywanie serwera DHCP ...", -/* TR_LICENSE_ACCEPT */ -"Akceptuję licencję.", -/* TR_LICENSE_NOT_ACCEPTED */ -"Nie zaakceptowano licencji.Wyjście!", -/* TR_EXT4FS */ -"EXT4 - Filesystem", -/* TR_EXT4FS_WO_JOURNAL */ -"EXT4 - Filesystem without journal", -/* TR_XFS */ -"XFS - Filesystem", -/* TR_REISERFS */ -"ReiserFS - Filesystem", -/* TR_NO_LOCAL_SOURCE */ -"Brak lokalnego źródła. Rozpoczynanie pobierania.", -/* TR_DOWNLOADING_ISO */ -"Pobieranie obrazu instalacyjnego ...", -/* TR_DOWNLOAD_ERROR */ -"Błąd podczas pobierania!", -/* TR_DHCP_FORCE_MTU */ -"Wymuś mtu DHCP:", -/* TR_IDENTIFY */ -"Identify", -/* TR_IDENTIFY_SHOULD_BLINK */ -"Selected port should blink now ...", -/* TR_IDENTIFY_NOT_SUPPORTED */ -"Function is not supported by this port.", -}; diff --git a/langs/ru/install/lang_ru.c b/langs/ru/install/lang_ru.c deleted file mode 100644 index 8351668df..000000000 --- a/langs/ru/install/lang_ru.c +++ /dev/null @@ -1,620 +0,0 @@ -/* - * Russian (ru) Data File - * - * This file is part of the IPFire. - * - * IPFire 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. - * - * IPFire 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 IPCop; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * (c) IPFire Team - * - */ -#include "libsmooth.h" - -char *ru_tr[] = { -/* TR_ISDN */ -"ISDN", -/* TR_ERROR_PROBING_ISDN */ -"Невозможно просканировать ISDN устройства.", -/* TR_PROBING_ISDN */ -"ISDN устройства сканируются и настраиваются.", -/* TR_MISSING_GREEN_IP */ -"Не найден Green IP!", -/* TR_CHOOSE_FILESYSTEM */ -"Пожалуйста укажите вашу файловую систему:", -/* TR_NOT_ENOUGH_INTERFACES */ -"Недостаточно сетевых карт для Вашего выбора.\n\nНеобходимо: %d - Доступно: %d\n", -/* TR_INTERFACE_CHANGE */ -"Пожалуйста укажите интерфейс, который хотите изменить.\n\n", -/* TR_NETCARD_COLOR */ -"Назначенные карты", -/* TR_REMOVE */ -"Удалить", -/* TR_MISSING_DNS */ -"Не найден DNS.\n", -/* TR_MISSING_DEFAULT */ -"Не найден шлюз.\n", -/* TR_JOURNAL_EXT3 */ -"Создаются журналы для Ext3...", -/* TR_CHOOSE_NETCARD */ -"Пожалуйста укажите сетевую карту для следующего интерфейса - %s.", -/* TR_NETCARDMENU2 */ -"Расширенное сетевое меню", -/* TR_ERROR_INTERFACES */ -"В Вашей системе нет свободных интерфейсов.", -/* TR_REMOVE_CARD */ -"Удалить сетевую карту? - %s", -/* TR_JOURNAL_ERROR */ -"Не получилось создать журнал, пробуем ext2.", -/* TR_FILESYSTEM */ -"Укажите файловую систему", -/* TR_ADDRESS_SETTINGS */ -"Настройки адреса", -/* TR_ADMIN_PASSWORD */ -"Пароль 'admin'", -/* TR_AGAIN_PROMPT */ -"Ещё раз:", -/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */ -"Все карты успешно установлены.", -/* TR_AUTODETECT */ -"* АВТООПРЕДЕЛЕНИЕ *", -/* TR_BUILDING_INITRD */ -"Создаётся ramdisk...", -/* TR_CANCEL */ -"Отмена", -/* TR_CARD_ASSIGNMENT */ -"Установка карт", -/* TR_CHECKING */ -"Проверяется URL...", -/* TR_CHECKING_FOR */ -"Проверка для: %s", -/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */ -"Укажите ISDN карту, установленную в этом компьютере.", -/* TR_CHOOSE_THE_ISDN_PROTOCOL */ -"Укажите необходимый ISDN протокол.", -/* TR_CONFIGURE_DHCP */ -"Введите необходимые настройки DHCP сервера.", -/* TR_CONFIGURE_NETWORKING */ -"Настройка сети", -/* TR_CONFIGURE_NETWORKING_LONG */ -"Необходимо настроить сеть, загрузив драйвер для GREEN интерфейса. Вы можете воспользоваться автоподбором драйвера для сетевой карты или самостоятельно указать его из списка. Позже Вы сможете подобрать драйвер и для остальных сетевых карт. Также, если у Вас более одной карты такого же типа, как для GREEN интерфейса, и каждая требует особых параметров, то Вам следует указать эти параметры, чтобы все карты были активны во время настройки GREEN интерфейса.", -/* TR_CONFIGURE_NETWORK_DRIVERS */ -"Назначьте драйверы интерфейсам. Текущая конфигурация следующая:\n\n", -/* TR_CONFIGURE_THE_CDROM */ -"Для настройки CDROM необходимо указать его IO адрес и/или IRQ.", -/* TR_CONGRATULATIONS */ -"Поздравляем!", -/* TR_CONGRATULATIONS_LONG */ -"%s был успешно установлен. Пожалуйста достаньте CD диск из привода. Далее будет предложена настройка ISDN, сетевых карт, и системных паролей. После окончания установки появится возможность настройки сервера с помощью браузера через веб-интерфейс по адресу https://%s:444 (или по имени, которое Вы указали для %s), где будет предложена настройка dialup подключения (если требуется) и удалённого доступа.", -/* TR_CONTINUE_NO_SWAP */ -"Ваш жёсткий диск слишком мал, но установка всё же возможна с очень маленьким разделом swap. (Будьте внимательны).", -/* TR_CURRENT_CONFIG */ -"Текущая конфигурация: %s%s", -/* TR_DEFAULT_GATEWAY */ -"Основной шлюз:", -/* TR_DEFAULT_GATEWAY_CR */ -"Основной шлюз\n", -/* TR_DEFAULT_LEASE */ -"Аренда по умолчанию (в минутах):", -/* TR_DEFAULT_LEASE_CR */ -"Время аренды по умолчанию\n", -/* TR_DETECTED */ -"Обнаружен: %s", -/* TR_DHCP_HOSTNAME */ -"Имя хоста DHCP:", -/* TR_DHCP_HOSTNAME_CR */ -"Имя хоста DHCP\n", -/* TR_DHCP_SERVER_CONFIGURATION */ -"Настройка DHCP сервера", -/* TR_DISABLED */ -"Выключен", -/* TR_DISABLE_ISDN */ -"Выключить ISDN", -/* TR_DISK_TOO_SMALL */ -"Ваш жёсткий диск слишком мал.", -/* TR_DNS_AND_GATEWAY_SETTINGS */ -"Настройка DNS и шлюза", -/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */ -"Введите DNS шлюз. Эти настройки используются только со статическим IP (и DHCP если указан DNS) на RED интерфейсе.", -/* TR_DNS_GATEWAY_WITH_GREEN */ -"Ваши настройки не используются ethernet адаптером для RED интерфейса. Информация о DNS и шлюзе для пользователей dialup получается автоматически при подключении.", -/* TR_DOMAINNAME */ -"Имя домена", -/* TR_DOMAINNAME_CANNOT_BE_EMPTY */ -"Имя домена не может быть пустым.", -/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */ -"В имени домена не должно быть пробелов.", -/* TR_DOMAINNAME_NOT_VALID_CHARS */ -"Имя домена может содержать только буквы, цифры, дефисы и нижние подчёркивания.", -/* TR_DOMAIN_NAME_SUFFIX */ -"Префикс доменного имени:", -/* TR_DOMAIN_NAME_SUFFIX_CR */ -"Префикс доменного имени\n", -/* TR_DONE */ -"Готово", -/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */ -"\nХотите поменять эти настройки?", -/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */ -"Назначение драйверов и карт", -/* TR_ENABLED */ -"Включено", -/* TR_ENABLE_ISDN */ -"Включить ISDN", -/* TR_END_ADDRESS */ -"Конечный адрес:", -/* TR_END_ADDRESS_CR */ -"Конечный адрес\n", -/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */ -"Некоторые ISDN карты (особенно ISA) Могут потребовать дополнительных параметров для задания IRQ и IO адреса. Если у Вас такая ISDN карта, введите эти параметры тут. Пример: \"io=0x280 irq=9\". Эти параметры будут использоваться во время определения карты.", -/* TR_ENTER_ADMIN_PASSWORD */ -"Введите %s 'admin' пароль. Эта учётная запись используется для входа на веб интерфейс %s.", -/* TR_ENTER_DOMAINNAME */ -"Введите имя домена", -/* TR_ENTER_HOSTNAME */ -"Введите имя хоста.", -/* TR_ENTER_IP_ADDRESS_INFO */ -"введите IP адрес", -/* TR_ENTER_NETWORK_DRIVER */ -"Не удалось автоматически определить сетевую карту. Введите дополнительные параметры для этой сетевой карты.", -/* TR_ENTER_ROOT_PASSWORD */ -"Введите пароль для 'root'. Эта учётная запись используется для доступа с командной строки.", -/* TR_ENTER_SETUP_PASSWORD */ -"БУДЕТ УДАЛЁН", -/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */ -"Введите IP адрес для %s интерфейса.", -/* TR_ENTER_THE_LOCAL_MSN */ -"Введите номер телефона (MSN/EAZ).", -/* TR_ENTER_URL */ -"Укажите URL к ipcop-.tgz и images/scsidrv-.img файлам. ВНИМАНИЕ: DNS не работает! Пример: http://X.X.X.X/", -/* TR_ERROR */ -"Ошибка", -/* TR_ERROR_PROBING_CDROM */ -"Не найден привод CDROM.", -/* TR_ERROR_WRITING_CONFIG */ -"Ошибка записи настроек.", -/* TR_EURO_EDSS1 */ -"Евро (EDSS1)", -/* TR_EXTRACTING_MODULES */ -"Модули извлекаются...", -/* TR_FAILED_TO_FIND */ -"Не удалось найти файл по этому URL.", -/* TR_FOUND_NIC */ -"%s обнаружил следующий NIC в Вашем компьютере: %s", -/* TR_GERMAN_1TR6 */ -"German 1TR6", -/* TR_HELPLINE */ -" / Переключает | Выделяет", -/* TR_HOSTNAME */ -"Имя хоста", -/* TR_HOSTNAME_CANNOT_BE_EMPTY */ -"Имя хоста не может быть пустым.", -/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */ -"Имя хоста не может содержать пробелы.", -/* TR_HOSTNAME_NOT_VALID_CHARS */ -"В имени хоста могут быть только буквы, цифры дефисы.", -/* TR_INITIALISING_ISDN */ -"Устанавливается ISDN...", -/* TR_INSERT_CDROM */ -"Пожалуйста вставьте %s CD в привод CDROM.", -/* TR_INSERT_FLOPPY */ -"Пожалуйста вставьте %s дискету с драйверами в привод floppy.", -/* TR_INSTALLATION_CANCELED */ -"Установка отменена.", -/* TR_INSTALLING_FILES */ -"Устанавливаются файлы...", -/* TR_INSTALLING_GRUB */ -"Устанавливается GRUB...", -/* TR_INSTALLING_LANG_CACHE */ -"Устанавливаются языковые пакеты...", -/* TR_INTERFACE */ -"Интерфейс - %s", -/* TR_INTERFACE_FAILED_TO_COME_UP */ -"Не удалось поднять интерфейс.", -/* TR_INVALID_FIELDS */ -"В следующих полях есть ошибки:\n\n", -/* TR_INVALID_IO */ -"Параметры IO порта содержат ошибки. ", -/* TR_INVALID_IRQ */ -"Параметры IRQ details содержат ошибки.", -/* TR_IP_ADDRESS_CR */ -"IP адрес\n", -/* TR_IP_ADDRESS_PROMPT */ -"IP адреса:", -/* TR_ISDN_CARD */ -"ISDN карта", -/* TR_ISDN_CARD_NOT_DETECTED */ -"ISDN карта не найдена. Возможно стоит указать дополнительные параметры модулю, если у вас карта типа ISA или имеет особые параметры.", -/* TR_ISDN_CARD_SELECTION */ -"выбор ISDN карты", -/* TR_ISDN_CONFIGURATION */ -"Настройка ISDN", -/* TR_ISDN_CONFIGURATION_MENU */ -"Меню настройки ISDN", -/* TR_ISDN_NOT_SETUP */ -"ISDN не настроена. Некоторые элементы не были указаны.", -/* TR_ISDN_NOT_YET_CONFIGURED */ -"ISDN ещё не настроена. Укажите элемент, который хотите настроить.", -/* TR_ISDN_PROTOCOL_SELECTION */ -"выбор ISDN протокола", -/* TR_ISDN_STATUS */ -"ISDN сейчас %s.\n\n Протокол: %s\n Карта: %s\n Телефон: %s\n\nУкажите элемент для перенастройки, или сохраните текущие настройки.", -/* TR_KEYBOARD_MAPPING */ -"Раскладка клавиатуры", -/* TR_KEYBOARD_MAPPING_LONG */ -"Укажите тип используемой клавиатуры из списка ниже. (обычно подходит ru_win )", -/* TR_LEASED_LINE */ -"Зарезервированная строка", -/* TR_LOADING_MODULE */ -"Грузится модуль...", -/* TR_LOADING_PCMCIA */ -"Грузятся PCMCIA модули...", -/* TR_LOOKING_FOR_NIC */ -"Поиск: %s", -/* TR_MAKING_BOOT_FILESYSTEM */ -"Создаётся файловой системы загрузчика...", -/* TR_MAKING_LOG_FILESYSTEM */ -"Создаётся файловая система под логи...", -/* TR_MAKING_ROOT_FILESYSTEM */ -"Создаётся корневая файловая система...", -/* TR_MAKING_SWAPSPACE */ -"Создаётся swap...", -/* TR_MANUAL */ -"* MANUAL *", -/* TR_MAX_LEASE */ -"Max аренда (минуты):", -/* TR_MAX_LEASE_CR */ -"Время Max аренды\n", -/* TR_MISSING_BLUE_IP */ -"Не указан IP на BLUE интерфейсе.", -/* TR_MISSING_ORANGE_IP */ -"Не указан IP на ORANGE интерфейсе.", -/* TR_MISSING_RED_IP */ -"Не указан IP на RED интерфейсе.", -/* TR_MODULE_NAME_CANNOT_BE_BLANK */ -"Имя модуля не может быть пустым.", -/* TR_MODULE_PARAMETERS */ -"Введите имя модуля и параметры для нужного драйвера.", -/* TR_MOUNTING_BOOT_FILESYSTEM */ -"Монтируется файловая система для загрузчика...", -/* TR_MOUNTING_LOG_FILESYSTEM */ -"Монтируется файловая система для логов...", -/* TR_MOUNTING_ROOT_FILESYSTEM */ -"Монтируется корневая файловая система...", -/* TR_MOUNTING_SWAP_PARTITION */ -"Монтируется swap...", -/* TR_MSN_CONFIGURATION */ -"Номер телефона (MSN/EAZ)", -/* TR_NETMASK_PROMPT */ -"Маска подсети:", -/* TR_NETWORKING */ -"Сеть", -/* TR_NETWORK_ADDRESS_CR */ -"Сетевой адрес\n", -/* TR_NETWORK_ADDRESS_PROMPT */ -"Сетевой адрес:", -/* TR_NETWORK_CONFIGURATION_MENU */ -"Меню настройки сети", -/* TR_NETWORK_CONFIGURATION_TYPE */ -"Настройка типа сетевого подключения", -/* TR_NETWORK_CONFIGURATION_TYPE_LONG */ -"Укажите сетевые настройки для %s. Ниже представлен список для интернет подключения. Если Вы решите поменять эти настройки,Потребуется перезапуск сети, а так же потребуется переназначить драйвера сетевых карт.", -/* TR_NETWORK_MASK_CR */ -"Маска подсети\n", -/* TR_NETWORK_SETUP_FAILED */ -"Не удалось настроить сеть.", -/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */ -"Выделено недостаточно сетевых карт.", -/* TR_NO_BLUE_INTERFACE */ -"Не назначен BLUE интерфейс.", -/* TR_NO_CDROM */ -"Не найден CD-ROM.", -/* TR_NO_GREEN_INTERFACE */ -"Не назначен GREEN интерфейс.", -/* TR_NO_HARDDISK */ -"Не найден жсткий диск.", -/* TR_DISK_SELECTION */ -"Disk Selection", -/* TR_DISK_SELECTION_MSG */ -"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", -/* TR_NO_DISK_SELECTED */ -"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", -/* TR_DISK_SETUP */ -"Disk Setup", -/* TR_DISK_SETUP_DESC */ -"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", -/* TR_RAID_SETUP */ -"RAID Setup", -/* TR_RAID_SETUP_DESC */ -"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", -/* TR_DELETE_ALL_DATA */ -"Delete all data", -/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ -"You disk configuration is currently not supported.", -/* TR_CREATING_FILESYSTEMS */ -"Creating filesystems...", -/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ -"Unable to create filesystems.", -/* TR_MOUNTING_FILESYSTEMS */ -"Mounting filesystems...", -/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ -"Unable to mount filesystems.", -/* TR_BUILDING_RAID */ -"Building RAID...", -/* TR_UNABLE_TO_BUILD_RAID */ -"Unable to build RAID.", -/* TR_NO_IPCOP_TARBALL_FOUND */ -"На сервере не найден архив ipcop.", -/* TR_NO_ORANGE_INTERFACE */ -"Не назначен ORANGE интерфейс.", -/* TR_NO_RED_INTERFACE */ -"Не назначен RED интерфейс.", -/* TR_NO_SCSI_IMAGE_FOUND */ -"По этому адресу не найден образ SCSI.", -/* TR_NO_UNALLOCATED_CARDS */ -"Нужно больше карт. Можно попытаться поискать или указать другие карты на этой машине, или указать драйвер из списка ниже.", -/* TR_OK */ -"Ok", -/* TR_PARTITIONING_DISK */ -"Разбивка диска...", -/* TR_PASSWORDS_DO_NOT_MATCH */ -"Пароли не совпадают.", -/* TR_PASSWORD_CANNOT_BE_BLANK */ -"Пароль не может быть пустым.", -/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */ -"Пароль не должен содержать пробелы.", -/* TR_PASSWORD_PROMPT */ -"Пароль:", -/* TR_PHONENUMBER_CANNOT_BE_EMPTY */ -"Номер телефона не может быть пустым.", -/* TR_PREPARE_HARDDISK */ -"Мастер установки сейчас подготовит диски на %s. Сперва будет проводиться разбиение диска, а затем разделам будут назначены файловые системы.", -/* TR_PRESS_OK_TO_REBOOT */ -"Нажмите Ok для перезагрузки.", -/* TR_PRIMARY_DNS */ -"Основной DNS:", -/* TR_PRIMARY_DNS_CR */ -"Основной DNS\n", -/* TR_PROBE */ -"Пробовать", -/* TR_PROBE_FAILED */ -"Не удалось определить автоматически.", -/* TR_PROBING_HARDWARE */ -"Определение железа...", -/* TR_PROBING_FOR_NICS */ -"Определение NIC...", -/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */ -"Возникли проблемы при установке на %s пароля для 'admin'.", -/* TR_PROBLEM_SETTING_ROOT_PASSWORD */ -"Возникли проблемы при установке пароля для 'root'.", -/* TR_PROBLEM_SETTING_SETUP_PASSWORD */ -"БУДЕТ УДАЛЁН", -/* TR_PROTOCOL_COUNTRY */ -"Протокол/Страна", -/* TR_PULLING_NETWORK_UP */ -"Поднимаем сеть...", -/* TR_PUSHING_NETWORK_DOWN */ -"Отключаем сеть...", -/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */ -"Отключаем нелокальную сеть...", -/* TR_QUIT */ -"Выход", -/* TR_RED_IN_USE */ -"ISDN (или другое внешнее подключение) задействовано в данный момент. Не получится настроить ISDN пока RED интерфейс активен.", -/* TR_RESTART_REQUIRED */ -"\n\nПосле настройки потребуется перезапуск сети.", -/* TR_RESTORE */ -"Восстановить", -/* TR_RESTORE_CONFIGURATION */ -"Если у Вас есть floppy с настройками %s , вставьте floppy диск и нажмите кнопку восстановления.", -/* TR_ROOT_PASSWORD */ -"пароль 'root'", -/* TR_SECONDARY_DNS */ -"Второй DNS:", -/* TR_SECONDARY_DNS_CR */ -"Второй DNS\n", -/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */ -"Второй DNS указан без основного DNS", -/* TR_SECTION_MENU */ -"Меню разделов", -/* TR_SELECT */ -"Выбрать", -/* TR_SELECT_CDROM_TYPE */ -"Выделить тип CDROM", -/* TR_SELECT_CDROM_TYPE_LONG */ -"Не найден CD-ROM на этой машине. Пожалуйста укажите какой драйвер Вы собираетесь использовать, чтобы %s увидел CD-ROM.", -/* TR_SELECT_INSTALLATION_MEDIA */ -"Укажите носитель с установщиком", -/* TR_SELECT_INSTALLATION_MEDIA_LONG */ -"%s может быть установлен разными способами. Самый простой - использовать привод CDROM. Если его нет, то можно попробовать установку с другой машины в LAN сети, где установочные файлы доступны по HTTP или FTP протоколу.", -/* TR_SELECT_NETWORK_DRIVER */ -"Укажите сетевой драйвер", -/* TR_SELECT_NETWORK_DRIVER_LONG */ -"Укажите драйвер для сетевой карты, установленной на этой машине. Если Вы указываете ВРУЧНУЮ, у Вас появится возможность задать название модуля драйвера и параметра для драйвера с особыми настройками, например для ISA карты.", -/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */ -"Укажите интерфейс для перенастройки.", -/* TR_SELECT_THE_ITEM */ -"Укажите, что хотите настроить.", -/* TR_SETTING_ADMIN_PASSWORD */ -"Записывается 'admin' пароль для %s...", -/* TR_SETTING_ROOT_PASSWORD */ -"Записывается 'root' пароль....", -/* TR_SETTING_SETUP_PASSWORD */ -"БУДЕТ УДАЛЁН", -/* TR_SETUP_FINISHED */ -"Установка окончена. Нажмите Ok.", -/* TR_SETUP_NOT_COMPLETE */ -"Первоначальная установка не была завершена полностью. Необходимо убедиться, что настройка полностью завершена выполнив команду setup ещё раз в shell оболочке.", -/* TR_SETUP_PASSWORD */ -"БУДЕТ УДАЛЁН", -/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */ -"Задать дополнительные параметры модуля", -/* TR_SINGLE_GREEN */ -"Ваши настройки задаются для одного GREEN интерфейса.", -/* TR_SKIP */ -"Пропустить", -/* TR_START_ADDRESS */ -"Начальный адрес:", -/* TR_START_ADDRESS_CR */ -"Начальный адрес\n", -/* TR_STATIC */ -"Статический", -/* TR_SUGGEST_IO */ -"(Предлагаемый %x)", -/* TR_SUGGEST_IRQ */ -"(Предлагаемый %d)", -/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */ -"Модуль этого драйвера уже установлен.", -/* TR_TIMEZONE */ -"Часовой пояс", -/* TR_TIMEZONE_LONG */ -"Укажите свою временную зону из списка ниже.", -/* TR_UNABLE_TO_EJECT_CDROM */ -"Не могу открыть CDROM.", -/* TR_UNABLE_TO_EXTRACT_MODULES */ -"Не удалось распаковать модули.", -/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */ -"Не удалось найти какие-либо дополнительные драйверы.", -/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */ -"Не удалось найти ISDN карты на этом компьютере. Возможно стоит указать дополнительные параметры, если у вас карта типа ISA или имеет особые настройки.", -/* TR_UNABLE_TO_INITIALISE_ISDN */ -"Не удаётся инициализировать ISDN.", -/* TR_UNABLE_TO_INSTALL_FILES */ -"Не удалось установить файлы.", -/* TR_UNABLE_TO_INSTALL_LANG_CACHE */ -"Не удалось установить языковые пакеты.", -/* TR_UNABLE_TO_INSTALL_GRUB */ -"Не удалось установить GRUB.", -/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */ -"Не удалось подгрузить модули драйверов.", -/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */ -"Не удалось создать файловую систему для boot.", -/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */ -"Не удалось создать файловую систему для логов.", -/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */ -"Не удалось создать корневую файловую систему.", -/* TR_UNABLE_TO_MAKE_SWAPSPACE */ -"Не удалось создать swap.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */ -"Не удалось создать симлинк /dev/harddisk.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */ -"Не удалось создать симлинк /dev/harddisk1.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */ -"Не удалось создать симлинк /dev/harddisk2.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */ -"Не удалось создать симлинк /dev/harddisk3.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */ -"Не удалось создать симлинк /dev/harddisk4.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */ -"Не удалось создать симлинк /dev/root.", -/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */ -"Не удалось смонтировать раздел boot.", -/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */ -"Не удалось смонтировать раздел с логами.", -/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */ -"Не удалось смонтировать раздел proc.", -/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */ -"Не удалось смонтировать корневой раздел .", -/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */ -"Не удалось смонтировать раздел swap.", -/* TR_UNABLE_TO_OPEN_HOSTS_FILE */ -"Не удалось открыть основной файл хостов.", -/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */ -"Не удалось открыть файл настроек", -/* TR_UNABLE_TO_PARTITION */ -"Не удалось разбить диск на разделы.", -/* TR_UNABLE_TO_REMOVE_TEMP_FILES */ -"Не удаётся удалить временные загруженные файлы.", -/* TR_UNABLE_TO_SET_HOSTNAME */ -"Не удалось задать имя хоста.", -/* TR_UNABLE_TO_UNMOUNT_CDROM */ -"Не удаётся смонтировать привод CDROM/floppy.", -/* TR_UNABLE_TO_UNMOUNT_HARDDISK */ -"Не получается отмонтировать жёсткие диски.", -/* TR_UNABLE_TO_WRITE_ETC_FSTAB */ -"Не могу записать в /etc/fstab", -/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */ -"Не могу записать в /etc/hostname", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS */ -"Не могу записать в /etc/hosts.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */ -"Не могу записать в /etc/hosts.allow.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */ -"Не могу записать в /etc/hosts.deny.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */ -"Не могу записать в %s/ethernet/settings.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */ -"Не могу записать в %s/main/hostname.conf", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */ -"Не могу записать в %s/main/settings.", -/* TR_UNCLAIMED_DRIVER */ -"Обнаружена невостребованная сетевая карта типа:\n%s\n\nМожно ей назначить:", -/* TR_UNKNOWN */ -"НЕИЗВЕСТНО", -/* TR_UNSET */ -"НЕЗАДАНО", -/* TR_USB_KEY_VFAT_ERR */ -"Неправильный USB носитель (не найден раздел vfat).", -/* TR_US_NI1 */ -"Использовать NI1", -/* TR_WARNING */ -"ВНИМАНИЕ", -/* TR_WARNING_LONG */ -"Если изменить этот IP адрес, и в данный момент Вы подключены удалённо, то естественным образм Ваше соединение с %s будет потеряно. Придётся переподключиться к НОВОМУ IP. Эта процедура довольно рискована, есть у Вас нет возможности физического доступа к машине, на случай если что-то пойдёт не так.", -/* TR_WELCOME */ -"Добро пожаловать в мастер настройки %s . Отмена установки на любом этапе приведёт к перезагрузке.", -/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */ -"Ваша конфигурация настроена на один GREEN интерфейс, который уже оснащён драйвером.", -/* TR_YES */ -"Да", -/* TR_NO */ -"Нет", -/* TR_AS */ -"как", -/* TR_IGNORE */ -"Игнорировать", -/* TR_PPP_DIALUP */ -"PPP DIALUP (PPPoE, модем, ATM ...)", -/* TR_DHCP */ -"DHCP", -/* TR_DHCP_STARTSERVER */ -"Запуск DHCP-server ...", -/* TR_DHCP_STOPSERVER */ -"Остановка DHCP-server ...", -/* TR_LICENSE_ACCEPT */ -"Я принимаю эту лицензию.", -/* TR_LICENSE_NOT_ACCEPTED */ -"Лицензия не принята. Выход!", -/* TR_EXT4FS */ -"EXT4 - Filesystem", -/* TR_EXT4FS_WO_JOURNAL */ -"EXT4 - Filesystem without journal", -/* TR_XFS */ -"XFS - Filesystem", -/* TR_REISERFS */ -"ReiserFS - Filesystem", -/* TR_NO_LOCAL_SOURCE */ -"Локальный источник не найден. Начинаю загрузку.", -/* TR_DOWNLOADING_ISO */ -"Загружается установочный образ ...", -/* TR_DOWNLOAD_ERROR */ -"Во время загрузки произошла ошибка!", -/* TR_DHCP_FORCE_MTU */ -"Форсировать DHCP mtu:", -/* TR_IDENTIFY */ -"Identify", -/* TR_IDENTIFY_SHOULD_BLINK */ -"Selected port should blink now ...", -/* TR_IDENTIFY_NOT_SUPPORTED */ -"Function is not supported by this port.", -}; diff --git a/langs/tr/install/lang_tr.c b/langs/tr/install/lang_tr.c deleted file mode 100644 index 1746dfa16..000000000 --- a/langs/tr/install/lang_tr.c +++ /dev/null @@ -1,626 +0,0 @@ -/* - * Turkish (tr) Data File - * - * This file is part of the IPFire. - * - * IPCop 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. - * - * IPCop 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 IPCop; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * (c) IPFire Team - * - * based on work of SmoothWall and IPCop - * - * (c) The SmoothWall Team - * - */ - -#include "libsmooth.h" - -char *tr_tr[] = { - -/* TR_ISDN */ -"ISDN", -/* TR_ERROR_PROBING_ISDN */ -"ISDN aygıtları taramak için açılamıyor.", -/* TR_PROBING_ISDN */ -"Tara ve ISDN aygıtlarını yapılandır.", -/* TR_MISSING_GREEN_IP */ -"Yeşil IP yok!", -/* TR_CHOOSE_FILESYSTEM */ -"Lütfen dosya sistemini seçin:", -/* TR_NOT_ENOUGH_INTERFACES */ -"Seçiminize göre yeterli ağ kartı yok.\n\nGerekli: %d - Mevcut: %d\n", -/* TR_INTERFACE_CHANGE */ -"Değiştirmek istediğiniz ara birimi seçiniz.\n\n", -/* TR_NETCARD_COLOR */ -"Atanan Kartlar", -/* TR_REMOVE */ -"Kaldır", -/* TR_MISSING_DNS */ -"Eksik DNS.\n", -/* TR_MISSING_DEFAULT */ -"Varsayılan Ağ Geçidi Eksik.\n", -/* TR_JOURNAL_EXT3 */ -"Ext3 için günlük oluşturuluyor...", -/* TR_CHOOSE_NETCARD */ -"Aşağıdan şu ara birim için bir ağ kartı seçin - %s", -/* TR_NETCARDMENU2 */ -"Genişletilmiş Ağ Listesi", -/* TR_ERROR_INTERFACES */ -"Sisteminizde hiç boş ara birim bulunmamaktadır.", -/* TR_REMOVE_CARD */ -"Ağ kartı için tahsis edilenler silinsin mi? - %s", -/* TR_JOURNAL_ERROR */ -"Günlük oluşturulamadı son çare olarak ext2 kullanılacak.", -/* TR_FILESYSTEM */ -"Dosya Sistemini Seçin", -/* TR_ADDRESS_SETTINGS */ -"Adres ayarları", -/* TR_ADMIN_PASSWORD */ -"'admin' parolası", -/* TR_AGAIN_PROMPT */ -"Tekrar:", -/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */ -"Tüm kartalar başarılı bir şekilde atandı.", -/* TR_AUTODETECT */ -"* OTOMATİK ALGILAMA *", -/* TR_BUILDING_INITRD */ -"Ramdisk oluşturuluyor...", -/* TR_CANCEL */ -"İptal", -/* TR_CARD_ASSIGNMENT */ -"Kart ataması", -/* TR_CHECKING */ -"URL kontrol ediliyor...", -/* TR_CHECKING_FOR */ -"Kontrol: %s", -/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */ -"Bu bilgisayarda yüklü ISDN kartını seçin.", -/* TR_CHOOSE_THE_ISDN_PROTOCOL */ -"İstediğiniz ISDN iletişim kuralını seçin.", -/* TR_CONFIGURE_DHCP */ -"DHCP ayar bilgilerini girerek DHCP sunucusunu yapılandırın.", -/* TR_CONFIGURE_NETWORKING */ -"Ağ yapılandırması", -/* TR_CONFIGURE_NETWORKING_LONG */ -"Şimdi öncelikle YEŞİL ara birim için doğru sürücüyü yükleyerek ağınızı yapılandırmanız gerekir. Bir ağ kartı yüklemek için otomatik tarama yapabilir ya da listeden doğru sürücüyü seçebilirsiniz. Eğer birden fazla ağ kartınız varsa yapılandırmadan sonra da bu ağ kartlarının yüklenebileceğini unutmayın. Ayrıca birden fazla aynı türde ağ kartınız varsa hangi kartı YEŞİL ara birime atadığınızı unutmayın. Her kart için özel modül parametreleri eklemeniz gerekebilir. Eğer YEŞİL ara birimi yapılandırırken tüm ağ kartları aktifse tüm türdeki kartlar için parametreleri girmeniz gerekir.", -/* TR_CONFIGURE_NETWORK_DRIVERS */ -"Ağ sürücüleri ve hangi ara birim için hangi kartların atanacağını yapılandırın. Mevcut yapılandırma:\n\n", -/* TR_CONFIGURE_THE_CDROM */ -"Uygun GÇ ve/veya IRQ seçerek CDROM yapılandır.", -/* TR_CONGRATULATIONS */ -"Tebrikler!", -/* TR_CONGRATULATIONS_LONG */ -"%s başarıyla yüklendi. Şimdi bilgisayarınızdaki cdyi çıkartın. Kurulum; ISDN, ağ kartları, sistem parolalarını yapılandırabileceğiniz programı çalıştıracaktır. Kurulum tamamlandıktan sonra bir internet tarayıcısı açıp adres satırına https://%s:444 (ya da %s sistem adınız) yazıp çevirmeli ağ (gerekliyse) ve uzaktan erişim yapılandırmalarınızı yapabilirsiniz.", -/* TR_CONTINUE_NO_SWAP */ -"Sabit diskiniz çok küçük, ancak küçük bir takas alanı ile devam edebilirsiniz. (Dikkatli kullanın).", -/* TR_CURRENT_CONFIG */ -"Geçerli yapılandırma: %s%s", -/* TR_DEFAULT_GATEWAY */ -"Varsayılan Ağ Geçidi:", -/* TR_DEFAULT_GATEWAY_CR */ -"Varsayılan Ağ Geçidi\n", -/* TR_DEFAULT_LEASE */ -"Varsayılan kira (dakika):", -/* TR_DEFAULT_LEASE_CR */ -"Varsayılan kira süresi\n", -/* TR_DETECTED */ -"Algılanan: %s", -/* TR_DHCP_HOSTNAME */ -"DHCP Ana bilgisayar adı:", -/* TR_DHCP_HOSTNAME_CR */ -"DHCP Ana bilgisayar adı\n", -/* TR_DHCP_SERVER_CONFIGURATION */ -"DHCP sunucu yapılandırması", -/* TR_DISABLED */ -"Devre Dışı", -/* TR_DISABLE_ISDN */ -"ISDN Devre Dışı", -/* TR_DISK_TOO_SMALL */ -"Sabit diskiniz çok küçük.", -/* TR_DNS_AND_GATEWAY_SETTINGS */ -"DNS ve Ağ Geçidi ayarları", -/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */ -"DNS ve ağ geçidi bilgilerini girin. Bu ayarlar sadece KIRMIZI ara birim adres ayarlarında Statik seçenği seçilmişse kullanılır. Eğer KIRMIZI ara birim adres ayarlarında DHCP seçeneğini seçtiyseniz bu alanı boş bırakabilirsiniz.", -/* TR_DNS_GATEWAY_WITH_GREEN */ -"Yapılandırmanız KIRMIZI ara birim için ethernet adaptörünü kullanamaz. DNS ve Çevirmeli ağ kullanıcıları için ağ geçidi bilgisi çevirmeli ağda otomatik olarak yapılandırılır.", -/* TR_DOMAINNAME */ -"Alan adı", -/* TR_DOMAINNAME_CANNOT_BE_EMPTY */ -"Alan adı boş olamaz.", -/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */ -"Alan adı boşluk içeremez.", -/* TR_DOMAINNAME_NOT_VALID_CHARS */ -"Alan adı sadece harfler, sayılar, tire ve noktadan oluşturulabilir.", -/* TR_DOMAIN_NAME_SUFFIX */ -"Alan adı son eki:", -/* TR_DOMAIN_NAME_SUFFIX_CR */ -"Alan adı son eki\n", -/* TR_DONE */ -"Bitti", -/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */ -"\nBu ayarları değiştirmek istiyor musunuz?", -/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */ -"Sürücüler ve kart atamaları", -/* TR_ENABLED */ -"Aktif", -/* TR_ENABLE_ISDN */ -"ISDN aktif", -/* TR_END_ADDRESS */ -"Bitiş adresi:", -/* TR_END_ADDRESS_CR */ -"Bitiş adresi\n", -/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */ -"Bazı ISDN kartları (özellikle ISA olanlar) IRQ ve GÇ adres bilgilerini ayarlamak için ek modül parametrelerine ihtiyaç duyar.Böyle bir ISDN kartınız varsa burada bu ek parametreleri girin. Örneğin: \"io = 0x280 irq = 9 \". Bunlar kart algılama sırasında kullanılacaktır.", -/* TR_ENTER_ADMIN_PASSWORD */ -"%s 'admin' kullanıcı parolasını girin. Bu, %s web yönetimi sayfalarının kayıtlarına erişebilen kullanıcıdır.", -/* TR_ENTER_DOMAINNAME */ -"Alan adını girin", -/* TR_ENTER_HOSTNAME */ -"Makinenin ana bilgisayar adını girin.", -/* TR_ENTER_IP_ADDRESS_INFO */ -"IP adres bilgilerini girin.", -/* TR_ENTER_NETWORK_DRIVER */ -"Otomatik olarak bir ağ kartı algılanamadı. Ağ kartı için sürücü ve isteğe bağlı olan parametreleri girin.", -/* TR_ENTER_ROOT_PASSWORD */ -"IPFire 'root' kullanıcı parolasını girin. Komut satırı erişimi için bu kullanıcı ile oturum açın.", -/* TR_ENTER_SETUP_PASSWORD */ -"KALDIRILACAK", -/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */ -"%s ara birimi için IP adres bilgilerini girin.", -/* TR_ENTER_THE_LOCAL_MSN */ -"Yerel telefon numarasını girin (MSN/EAZ).", -/* TR_ENTER_URL */ -"IPFire-.tgz ve images/scsidrv-.img dosyaları için URL adresini girin. UYARI: DNS mevcut deği! Bu sadece http://X.X.X.X/ olmalıdır.", -/* TR_ERROR */ -"Hata", -/* TR_ERROR_PROBING_CDROM */ -"CD-ROM sürücüsü bulunamadı.", -/* TR_ERROR_WRITING_CONFIG */ -"Yapılandırma bilgilerini yazma hatası.", -/* TR_EURO_EDSS1 */ -"Avrupa (EDSS1)", -/* TR_EXTRACTING_MODULES */ -"Modüller açılıyor...", -/* TR_FAILED_TO_FIND */ -"URL dosyası bulunamadı.", -/* TR_FOUND_NIC */ -"%s makinenizde aşağıdaki NIC tespit edildi: %s", -/* TR_GERMAN_1TR6 */ -"Alman 1TR6", -/* TR_HELPLINE */ -" / öğeler arasında geçiş | seçim", -/* TR_HOSTNAME */ -"Ana bilgisayar adı", -/* TR_HOSTNAME_CANNOT_BE_EMPTY */ -"Ana bilgisayar adı boş olamaz.", -/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */ -"Ana bilgisayar adı boşluk içeremez.", -/* TR_HOSTNAME_NOT_VALID_CHARS */ -"Ana bilgisayar adı sadece harf, rakam ve tire içerebilir.", -/* TR_INITIALISING_ISDN */ -"ISDN başlatılıyor...", -/* TR_INSERT_CDROM */ -"Lütfen CD_ROM sürücüsüne %s CDsi yerleştirin.", -/* TR_INSERT_FLOPPY */ -"Lütfen disket sürücüsüne %s sürücü disketini yerleştirin.", -/* TR_INSTALLATION_CANCELED */ -"Kurulum iptal edildi.", -/* TR_INSTALLING_FILES */ -"Dosyalar yükleniyor...", -/* TR_INSTALLING_GRUB */ -"GRUB yükleniyor...", -/* TR_INSTALLING_LANG_CACHE */ -"Dil dosyası yükleniyor...", -/* TR_INTERFACE */ -"Ara birim - %s", -/* TR_INTERFACE_FAILED_TO_COME_UP */ -"Ara birim yükseltmesi başarısız oldu.", -/* TR_INVALID_FIELDS */ -"Aşağıdaki alan geçersiz:\n\n", -/* TR_INVALID_IO */ -"Girilen GÇ bağlantı noktası detayları geçersiz. ", -/* TR_INVALID_IRQ */ -"Girilen IRQ ayrıntıları geçersiz.", -/* TR_IP_ADDRESS_CR */ -"IP adresi\n", -/* TR_IP_ADDRESS_PROMPT */ -"IP adresi:", -/* TR_ISDN_CARD */ -"ISDN kartı", -/* TR_ISDN_CARD_NOT_DETECTED */ -"ISDN kartı algılanamdı. Kart bir ISA türü veya özel gereksinimleri olan bir kartsa ek modül parametreleri belirtmeniz gerekebilir.", -/* TR_ISDN_CARD_SELECTION */ -"ISDN kart seçimi", -/* TR_ISDN_CONFIGURATION */ -"ISDN Yapılandırması", -/* TR_ISDN_CONFIGURATION_MENU */ -"ISDN yapılandırma listesi", -/* TR_ISDN_NOT_SETUP */ -"ISDN kurulamadı. Bazı ürünleri seçmediniz.", -/* TR_ISDN_NOT_YET_CONFIGURED */ -"ISDN henüz yapılandırılmamış. Yapılandırmak istediğiniz öğeyi seçin.", -/* TR_ISDN_PROTOCOL_SELECTION */ -"ISDN kural seçimi", -/* TR_ISDN_STATUS */ -"ISDN şu anda %s.\n\n Kural: %s\n Kart: %s\n Yerel telefon numarası: %s\n\nYeniden yapılandırmanız için istediğiniz öğeyi seçin ya da geçerli ayarları kullanmayı tercih edin.", -/* TR_KEYBOARD_MAPPING */ -"Klavye haritası", -/* TR_KEYBOARD_MAPPING_LONG */ -"Aşağıdaki listeden kullandığınız klavye türünü seçin.", -/* TR_LEASED_LINE */ -"Kiralık hat", -/* TR_LOADING_MODULE */ -"Modül yükleniyor...", -/* TR_LOADING_PCMCIA */ -"PCMCIA modülleri yükleniyor...", -/* TR_LOOKING_FOR_NIC */ -"Arayan: %s", -/* TR_MAKING_BOOT_FILESYSTEM */ -"Önyükleme dosya sistemi yapılandırılıyor...", -/* TR_MAKING_LOG_FILESYSTEM */ -"Günlük dosya sistemi yapılandırılıyor...", -/* TR_MAKING_ROOT_FILESYSTEM */ -"Root dosya sistemi yapılandırılıyor...", -/* TR_MAKING_SWAPSPACE */ -"Takas alanı yapılandırılıyor...", -/* TR_MANUAL */ -"* EL İLE *", -/* TR_MAX_LEASE */ -"En fazla kira (dak):", -/* TR_MAX_LEASE_CR */ -"En fazla kira süresi\n", -/* TR_MISSING_BLUE_IP */ -"MAVİ ara birimdeki IP bilgileri eksik.", -/* TR_MISSING_ORANGE_IP */ -"TURUNCU ara birimdeki IP bilgileri eksik.", -/* TR_MISSING_RED_IP */ -"KIRMIZI ara birimdeki IP bilgileri eksik.", -/* TR_MODULE_NAME_CANNOT_BE_BLANK */ -"Modül adı boş olamaz.", -/* TR_MODULE_PARAMETERS */ -"Size gereken sürücü için modül adı ve parametrelerini girin.", -/* TR_MOUNTING_BOOT_FILESYSTEM */ -"Önyükleme dosya sistemi bağlanıyor...", -/* TR_MOUNTING_LOG_FILESYSTEM */ -"Günlük dosya sistemi bağlanıyor...", -/* TR_MOUNTING_ROOT_FILESYSTEM */ -"Root dosya sistemi bağlanıyor...", -/* TR_MOUNTING_SWAP_PARTITION */ -"Takas bölümü bağlanıyor...", -/* TR_MSN_CONFIGURATION */ -"Yerel telefon numarası (MSN/EAZ)", -/* TR_NETMASK_PROMPT */ -"Ağ maskesi:", -/* TR_NETWORKING */ -"Ağ", -/* TR_NETWORK_ADDRESS_CR */ -"Ağ adresi\n", -/* TR_NETWORK_ADDRESS_PROMPT */ -"Ağ adresi:", -/* TR_NETWORK_CONFIGURATION_MENU */ -"Ağ yapılandırma listesi", -/* TR_NETWORK_CONFIGURATION_TYPE */ -"Ağ yapılandırma türü", -/* TR_NETWORK_CONFIGURATION_TYPE_LONG */ -"%s için ağ yapılandırmasını seçin. Aşağıdaki yapılandırma türleri ethernet kartına atanmış ara birimleri listeler. Eğer bu ayarları değiştirirseniz ağın yeniden başlatılması gerekir ve yeniden ağ sürücülerinin atanması gerekir.", -/* TR_NETWORK_MASK_CR */ -"Ağ maskesi\n", -/* TR_NETWORK_SETUP_FAILED */ -"Ağ kurulumu başarısız oldu.", -/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */ -"Yeterince kart tahsis edilemedi.", -/* TR_NO_BLUE_INTERFACE */ -"Hiçbir MAVİ ara birim atanmamış.", -/* TR_NO_CDROM */ -"CD-ROM bulunamadı.", -/* TR_NO_GREEN_INTERFACE */ -"Hiçbir YEŞİL ara birim atanmamış.", -/* TR_NO_HARDDISK */ -"Sabit disk bulunamadı.", -/* TR_DISK_SELECTION */ -"Disk Selection", -/* TR_DISK_SELECTION_MSG */ -"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED.", -/* TR_NO_DISK_SELECTED */ -"No disk has been selected.\n\nPlease select one or more disks you want to install IPFire on.", -/* TR_DISK_SETUP */ -"Disk Setup", -/* TR_DISK_SETUP_DESC */ -"The installation program will now prepare the chosen harddisk:\n\n %s\n\nDo you agree to continue?", -/* TR_RAID_SETUP */ -"RAID Setup", -/* TR_RAID_SETUP_DESC */ -"The installation program will now set up a RAID configuration on the selected harddisks:\n\n %s\n %s\n\nDo you agree to continue?", -/* TR_DELETE_ALL_DATA */ -"Delete all data", -/* TR_DISK_CONFIGURATION_NOT_SUPPORTED */ -"You disk configuration is currently not supported.", -/* TR_CREATING_FILESYSTEMS */ -"Creating filesystems...", -/* TR_UNABLE_TO_CREATE_FILESYSTEMS */ -"Unable to create filesystems.", -/* TR_MOUNTING_FILESYSTEMS */ -"Mounting filesystems...", -/* TR_UNABLE_TO_MOUNT_FILESYSTEMS */ -"Unable to mount filesystems.", -/* TR_BUILDING_RAID */ -"Building RAID...", -/* TR_UNABLE_TO_BUILD_RAID */ -"Unable to build RAID.", -/* TR_NO_IPCOP_TARBALL_FOUND */ -"Web sunucuda hiçbir ipfire arşivi bulunamadı.", -/* TR_NO_ORANGE_INTERFACE */ -"Hiçbir TURUNCU ara birim atanmamış.", -/* TR_NO_RED_INTERFACE */ -"Hiçbir KIRMIZI ara birim atanmamış.", -/* TR_NO_SCSI_IMAGE_FOUND */ -"Web sunucuda hiçbir SCSI kalıbı bulunamadı.", -/* TR_NO_UNALLOCATED_CARDS */ -"Daha fazla ayrılmamış kart bulunmaktadır. Otamatik olarak daha fazla kartı aratabilir veya listeden bir sürücü seçebilirsiniz.", -/* TR_OK */ -"Tamam", -/* TR_PARTITIONING_DISK */ -"Disk bölümleniyor...", -/* TR_PASSWORDS_DO_NOT_MATCH */ -"Parolalar eşeleşmiyor.", -/* TR_PASSWORD_CANNOT_BE_BLANK */ -"Parola boş olamaz.", -/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */ -"Parla boşluk içeremez.", -/* TR_PASSWORD_PROMPT */ -"Parola:", -/* TR_PHONENUMBER_CANNOT_BE_EMPTY */ -"Telefon numarası boş olamaz.", -/* TR_PREPARE_HARDDISK */ -"Sabit disk kurulum programı %s üzerindeki sabit diski hazırlayacak. İlk olarak diskiniz bölümlendirilir ve daha sonra bu bölüme dosya sistemleri oluşturulur.\n\nDİSKTEKİ TÜM VERİLER SİLİNECEKTİR. Kabul ediyor musunuz?", -/* TR_PRESS_OK_TO_REBOOT */ -"Yeniden Başlat", -/* TR_PRIMARY_DNS */ -"Birincil DNS:", -/* TR_PRIMARY_DNS_CR */ -"Birincil DNS\n", -/* TR_PROBE */ -"Araştır", -/* TR_PROBE_FAILED */ -"Otomatik algılama başarısız oldu.", -/* TR_PROBING_HARDWARE */ -"Donanım algılanıyor...", -/* TR_PROBING_FOR_NICS */ -"Ağ kartları algılanıyor...", -/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */ -"%s 'admin' kullanıcı parolası ayarları sorunlu.", -/* TR_PROBLEM_SETTING_ROOT_PASSWORD */ -"'root' parola ayarları sorunlu.", -/* TR_PROBLEM_SETTING_SETUP_PASSWORD */ -"KALDIRILACAK", -/* TR_PROTOCOL_COUNTRY */ -"Kural/Ülke", -/* TR_PULLING_NETWORK_UP */ -"Ağ başlatılıyor...", -/* TR_PUSHING_NETWORK_DOWN */ -"Ağ duruduruluyor...", -/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */ -"Düşmeyen ağ bitirliyor...", -/* TR_QUIT */ -"Çık", -/* TR_RED_IN_USE */ -"ISDN (ya da herhangi bir harici bağlantı) şu anda kullanımda. Kırmızı arabirim aktifken ISDN seçeneğini yapılandıramazsınız.", -/* TR_RESTART_REQUIRED */ -"\n\nYapılandırma tamamlandığında ağı yeniden başlatmanız gerekir.", -/* TR_RESTORE */ -"Geri Yükle", -/* TR_RESTORE_CONFIGURATION */ -"Eğer %s sistem yapılandırması ile ilgili bir disketiniz varsa disketinizi disket sürücüsüne yerleştirin ve Geri Yükle düğmesine basın.", -/* TR_ROOT_PASSWORD */ -"'root' parolası", -/* TR_SECONDARY_DNS */ -"İkincil DNS:", -/* TR_SECONDARY_DNS_CR */ -"İkincil DNS\n", -/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */ -"Birincil DNS olmadan ikincil DNS belirtilmiş.", -/* TR_SECTION_MENU */ -"Bölüm listesi", -/* TR_SELECT */ -"Seç", -/* TR_SELECT_CDROM_TYPE */ -"CD-ROM türünü seç", -/* TR_SELECT_CDROM_TYPE_LONG */ -"Bu makinede CD-ROM bulunamadı. %s ile CD-ROM sürücüsüne erişilebilmesi için kullanmak istediğiniz sürücüyü aşağıdan seçin.", -/* TR_SELECT_INSTALLATION_MEDIA */ -"Kurulum ortamını seçin", -/* TR_SELECT_INSTALLATION_MEDIA_LONG */ -"%s birden fazla kaynaktan kurulabilir. En basit makineler de CD-ROM sürücüsü kullanmaktadır. Eğer bilgisayarınızda bir sürücü yoksa HTTP veya FTP üzerinden ayrıca kurulum dosyaları olan başka bir LAN üzerindeki makineden kurulum yapabilirsiniz.", -/* TR_SELECT_NETWORK_DRIVER */ -"Ağ sürücüsünü seçin", -/* TR_SELECT_NETWORK_DRIVER_LONG */ -"Bu makinede kurulu olan kart için bir ağ sürücüsü seçin. EL İLE seçeneğini seçerseniz özel gereksinimleri olan bir kart için (ISA kartlar gibi) sürücü modül adı ve parametrelerini yazmanız istenecektir", -/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */ -"Yeniden yapılandırmak istediğiniz ara birimi seçin.", -/* TR_SELECT_THE_ITEM */ -"Yapılandırmak istediğiniz nesneyi seçin.", -/* TR_SETTING_ADMIN_PASSWORD */ -"%s 'admin' kullanıcı parolası ayarlanıyor...", -/* TR_SETTING_ROOT_PASSWORD */ -"'root' parolası ayarlanıyor....", -/* TR_SETTING_SETUP_PASSWORD */ -"KALDIRILACAK", -/* TR_SETUP_FINISHED */ -"Kurulum tamamlandı. Tamam seçneği ile ilerleyin.", -/* TR_SETUP_NOT_COMPLETE */ -"Başlangıç kurulumu tamamlanamadı. Şimdi kurulumu tekrar çalıştırarak ayarlarınızın düzgün yapılmış olduğundan emin olun.", -/* TR_SETUP_PASSWORD */ -"KALDIRILACAK", -/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */ -"Ek modül parametreleri ayarlayın", -/* TR_SINGLE_GREEN */ -"Sadece YEŞİL ara birim için ayarlarınızı yapılandırın.", -/* TR_SKIP */ -"Atla", -/* TR_START_ADDRESS */ -"Başlangıç adresi:", -/* TR_START_ADDRESS_CR */ -"Başlangıç adresi\n", -/* TR_STATIC */ -"Statik", -/* TR_SUGGEST_IO */ -"(öneri %x)", -/* TR_SUGGEST_IRQ */ -"(öneri %d)", -/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */ -"Bu sürücü modülü zaten yüklü.", -/* TR_TIMEZONE */ -"Zaman dilimi", -/* TR_TIMEZONE_LONG */ -"Aşağıdaki listeden bulunduğunuz zaman dilimini seçin.", -/* TR_UNABLE_TO_EJECT_CDROM */ -"CD-ROM çıkarmak için açılamıyor.", -/* TR_UNABLE_TO_EXTRACT_MODULES */ -"Modüller ayıklanamıyor.", -/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */ -"Herhangi bir ek sürücü bulmak için açılamıyor.", -/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */ -"Bu bilgisayar da bir ISDN kartı bulunamadı. Kart bir ISA türüdür veya özel gereksinimleri olan bir kart olabilir. Bu durumda ek modül parametreleri belirtmeniz gerekebilir.", -/* TR_UNABLE_TO_INITIALISE_ISDN */ -"ISDN başlatmak için açılamıyor.", -/* TR_UNABLE_TO_INSTALL_FILES */ -"Dosyaları kurmak için açılamıyor.", -/* TR_UNABLE_TO_INSTALL_LANG_CACHE */ -"Dil dosyalarını kurmak için açılamıyor.", -/* TR_UNABLE_TO_INSTALL_GRUB */ -"GRUB kurulamıyor.", -/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */ -"Sürücü modülü yüklenemiyor.", -/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */ -"Ön yükleme dosya sistemi oluşturulamıyor.", -/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */ -"Günlük dosya sistemi oluşturulamıyor.", -/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */ -"Root dosya sistemi oluşturulamıyor.", -/* TR_UNABLE_TO_MAKE_SWAPSPACE */ -"Takas alanı oluşturulamıyor.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */ -"Sembolik bağı oluşturulamıyor: /dev/harddisk.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */ -"Sembolik bağı oluşturulamıyor: /dev/harddisk1.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */ -"Sembolik bağı oluşturulamıyor: /dev/harddisk2.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */ -"Sembolik bağı oluşturulamıyor: /dev/harddisk3.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */ -"Sembolik bağı oluşturulamıyor: /dev/harddisk4.", -/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */ -"Sembolik bağı oluşturulamıyor: /dev/root.", -/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */ -"Ön yükleme dosya sistemi bağlanamadı.", -/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */ -"Günlük dosya sistemi bağlanamadı.", -/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */ -"Proc dosya sistemi bağlanamadı.", -/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */ -"Root dosya sistemi bağlanamadı.", -/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */ -"Takas bölümü bağlanamadı.", -/* TR_UNABLE_TO_OPEN_HOSTS_FILE */ -"Ana bilgisayar dosyası açılamadı.", -/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */ -"Ayarlar dosyası açılamadı.", -/* TR_UNABLE_TO_PARTITION */ -"Dsik bölümleri açılamadı.", -/* TR_UNABLE_TO_REMOVE_TEMP_FILES */ -"Geçici olarak indirilen dosyalar kaldırılamıyor.", -/* TR_UNABLE_TO_SET_HOSTNAME */ -"Ana bilgisayar adı ayarlamak için açılamıyor.", -/* TR_UNABLE_TO_UNMOUNT_CDROM */ -"CDROM/floppydisk ayrılamıyor.", -/* TR_UNABLE_TO_UNMOUNT_HARDDISK */ -"Sabit disk ayrılamıyor.", -/* TR_UNABLE_TO_WRITE_ETC_FSTAB */ -"Yazmak için açılamıyor: /etc/fstab", -/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */ -"Yazmak için açılamıyor: /etc/hostname", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS */ -"Yazmak için açılamıyor: /etc/hosts.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */ -"Yazmak için açılamıyor: /etc/hosts.allow.", -/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */ -"Yazmak için açılamıyor: /etc/hosts.deny.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */ -"Yazmak için açılamıyor: %s/ethernet/settings.", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */ -"Yazmak için açılamıyor: %s/main/hostname.conf", -/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */ -"Yazmak için açılamıyor: %s/main/settings.", -/* TR_UNCLAIMED_DRIVER */ -"Bu türe ait sahipsiz bir ethernet kartı yok:\n%s\n\nBunu atayabilirsiniz:", -/* TR_UNKNOWN */ -"BİLİNMEYEN", -/* TR_UNSET */ -"KURULMAMIŞ", -/* TR_USB_KEY_VFAT_ERR */ -"Bu USB anahtarı geçersiz (vfat bölümü bulunamadı).", -/* TR_US_NI1 */ -"US NI1", -/* TR_WARNING */ -"UYARI", -/* TR_WARNING_LONG */ -"Bu IP adresini değiştiriseniz %s makinesi ile uzak oturum bağlantısı kopar ve yeniden IP adresi girmeniz gerekir. Bu riskli bir işlemdir. Bu işlem sırasında bir şeyler ters giderse düzeltmek için makineye fiziksel erişiminiz olmalıdır. Makineye fiziksel erişiminiz varsa bu işlemi gerçekleştirin.", -/* TR_WELCOME */ -"%s kurulum programına hoş geldiniz. Sonraki ekranların herhangi birinde İptal seçeneğini seçtiğinizde bilgisayar yeniden başlatılacaktır.", -/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */ -"Zaten atanmış bir sürücünüz var. Yapılandırma sadece YEŞİL ara birim için yapılır.", -/* TR_YES */ -"Evet", -/* TR_NO */ -"Hayır", -/* TR_AS */ -"-", -/* TR_IGNORE */ -"Yok say", -/* TR_PPP_DIALUP */ -"PPP ÇEVİRMELİ AĞ (PPPoE, modem, ATM ...)", -/* TR_DHCP */ -"DHCP", -/* TR_DHCP_STARTSERVER */ -"DHCP-sunucusu başlatılıyor ...", -/* TR_DHCP_STOPSERVER */ -"DHCP-sunucusu durduruluyor ...", -/* TR_LICENSE_ACCEPT */ -"Bu lisansı kabul ediyorum.", -/* TR_LICENSE_NOT_ACCEPTED */ -"Lisans kabul edilmedi. Çık!", -/* TR_EXT4FS */ -"EXT4 - Filesystem", -/* TR_EXT4FS_WO_JOURNAL */ -"EXT4 - Filesystem without journal", -/* TR_XFS */ -"XFS - Filesystem", -/* TR_REISERFS */ -"ReiserFS - Filesystem", -/* TR_NO_LOCAL_SOURCE */ -"Yerel kaynak medya bulunamadı. İndirme başlatılıyor​​.", -/* TR_DOWNLOADING_ISO */ -"Kurulum kalıbı indiriliyor ...", -/* TR_DOWNLOAD_ERROR */ -"İndirirken hata!", -/* TR_DHCP_FORCE_MTU */ -"DHCP mtu zorla:", -/* TR_IDENTIFY */ -"Belirle", -/* TR_IDENTIFY_SHOULD_BLINK */ -"Seçilen bağlantı noktasının şimdi yanıp sönmesi gerekir...", -/* TR_IDENTIFY_NOT_SUPPORTED */ -"İşlev bu bağlantı noktası tarafından desteklenmiyor.", -}; diff --git a/tools/check_langs.sh b/tools/check_langs.sh index 794cea592..81338dbdd 100755 --- a/tools/check_langs.sh +++ b/tools/check_langs.sh @@ -26,17 +26,10 @@ if [ ! -d ./langs/ ]; then fi cat ./langs/de/cgi-bin/de.pl | grep \'.*\' | awk -F\' '{print $2}'| sort > /tmp/de_cgi-bin.$$ -cat ./langs/de/install/lang_de.c | grep TR_ | awk -F\ '{print $2}' > /tmp/de_install.$$ for i in ./langs/en ./langs/fr ./langs/es ./langs/pl ./langs/ru ; do language=`echo "$i" | awk -F/ '{ print $3 }'` - echo "############################################################################" - echo "# Checking install/setup translations for language: ${language} #" - echo "############################################################################" - cat ./langs/${language}/install/lang_${language}.c | grep TR_ | awk -F\ '{print $2}' | \ - diff /tmp/de_install.$$ - | grep \< - echo "############################################################################" echo "# Checking cgi-bin translations for language: ${language} #" echo "############################################################################" @@ -45,7 +38,6 @@ for i in ./langs/en ./langs/fr ./langs/es ./langs/pl ./langs/ru ; do done rm -f /tmp/de_cgi-bin.$$ -rm -f /tmp/de_install.$$ exit 0 From 2d37f412f956abe6c74a024bf4a648afce85a9d2 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 23 Aug 2014 16:00:08 +0200 Subject: [PATCH 107/297] pigz: New package for faster image compression --- config/rootfiles/common/pigz | 2 + lfs/pigz | 80 ++++++++++++++++++++++++++++++++++++ make.sh | 1 + 3 files changed, 83 insertions(+) create mode 100644 config/rootfiles/common/pigz create mode 100644 lfs/pigz diff --git a/config/rootfiles/common/pigz b/config/rootfiles/common/pigz new file mode 100644 index 000000000..618d92464 --- /dev/null +++ b/config/rootfiles/common/pigz @@ -0,0 +1,2 @@ +#usr/bin/pigz +#usr/bin/unpigz diff --git a/lfs/pigz b/lfs/pigz new file mode 100644 index 000000000..51c3b85df --- /dev/null +++ b/lfs/pigz @@ -0,0 +1,80 @@ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007 Michael Tremer & Christian Schmidt # +# # +# 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 3 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, see . # +# # +############################################################################### + +############################################################################### +# Definitions +############################################################################### + +include Config + +VER = 2.3.1 + +THISAPP = pigz-$(VER) +DL_FILE = $(THISAPP).tar.gz +DL_FROM = $(URL_IPFIRE) +DIR_APP = $(DIR_SRC)/$(THISAPP) +TARGET = $(DIR_INFO)/$(THISAPP) + +############################################################################### +# Top-level Rules +############################################################################### + +objects = $(DL_FILE) + +$(DL_FILE) = $(DL_FROM)/$(DL_FILE) + +$(DL_FILE)_MD5 = e803f8bc0770c7a5e96dccb1d2dd2aab + +install : $(TARGET) + +check : $(patsubst %,$(DIR_CHK)/%,$(objects)) + +download :$(patsubst %,$(DIR_DL)/%,$(objects)) + +md5 : $(subst %,%_MD5,$(objects)) + +dist: + @$(PAK) + +############################################################################### +# Downloading, checking, md5sum +############################################################################### + +$(patsubst %,$(DIR_CHK)/%,$(objects)) : + @$(CHECK) + +$(patsubst %,$(DIR_DL)/%,$(objects)) : + @$(LOAD) + +$(subst %,%_MD5,$(objects)) : + @$(MD5) + +############################################################################### +# Installation Details +############################################################################### + +$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) + @$(PREBUILD) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && make CFLAGS="$(CFLAGS)" $(MAKETUNING) + cd $(DIR_APP) && install -m 755 pigz /usr/bin/pigz + ln -svf pigz /usr/bin/unpigz + @rm -rf $(DIR_APP) + @$(POSTBUILD) diff --git a/make.sh b/make.sh index fa556194b..e16e51b95 100755 --- a/make.sh +++ b/make.sh @@ -814,6 +814,7 @@ buildipfire() { ipfiremake batctl ipfiremake perl-PDF-API2 ipfiremake squid-accounting + ipfiremake pigz } buildinstaller() { From da45819dad1eccee95012c3030c3c136a4faaf82 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 23 Aug 2014 16:20:48 +0200 Subject: [PATCH 108/297] Add lvm2 and multipath-tools (for kpartx) --- config/rootfiles/common/lvm2 | 103 ++++++++++++++++++++++++ config/rootfiles/common/multipath-tools | 4 + lfs/lvm2 | 84 +++++++++++++++++++ lfs/multipath-tools | 79 ++++++++++++++++++ make.sh | 4 +- 5 files changed, 273 insertions(+), 1 deletion(-) create mode 100644 config/rootfiles/common/lvm2 create mode 100644 config/rootfiles/common/multipath-tools create mode 100644 lfs/lvm2 create mode 100644 lfs/multipath-tools diff --git a/config/rootfiles/common/lvm2 b/config/rootfiles/common/lvm2 new file mode 100644 index 000000000..8ccafc79e --- /dev/null +++ b/config/rootfiles/common/lvm2 @@ -0,0 +1,103 @@ +#etc/lvm +#etc/lvm/lvm.conf +#usr/include/libdevmapper.h +#usr/lib/libdevmapper.so +usr/lib/libdevmapper.so.1.02 +#usr/lib/pkgconfig/devmapper.pc +#usr/sbin/dmsetup +#usr/sbin/fsadm +#usr/sbin/lvchange +#usr/sbin/lvconvert +#usr/sbin/lvcreate +#usr/sbin/lvdisplay +#usr/sbin/lvextend +#usr/sbin/lvm +#usr/sbin/lvmchange +#usr/sbin/lvmconf +#usr/sbin/lvmdiskscan +#usr/sbin/lvmdump +#usr/sbin/lvmsadc +#usr/sbin/lvmsar +#usr/sbin/lvreduce +#usr/sbin/lvremove +#usr/sbin/lvrename +#usr/sbin/lvresize +#usr/sbin/lvs +#usr/sbin/lvscan +#usr/sbin/pvchange +#usr/sbin/pvck +#usr/sbin/pvcreate +#usr/sbin/pvdisplay +#usr/sbin/pvmove +#usr/sbin/pvremove +#usr/sbin/pvresize +#usr/sbin/pvs +#usr/sbin/pvscan +#usr/sbin/vgcfgbackup +#usr/sbin/vgcfgrestore +#usr/sbin/vgchange +#usr/sbin/vgck +#usr/sbin/vgconvert +#usr/sbin/vgcreate +#usr/sbin/vgdisplay +#usr/sbin/vgexport +#usr/sbin/vgextend +#usr/sbin/vgimport +#usr/sbin/vgimportclone +#usr/sbin/vgmerge +#usr/sbin/vgmknodes +#usr/sbin/vgreduce +#usr/sbin/vgremove +#usr/sbin/vgrename +#usr/sbin/vgs +#usr/sbin/vgscan +#usr/sbin/vgsplit +#usr/share/man/man5/lvm.conf.5 +#usr/share/man/man8/dmsetup.8 +#usr/share/man/man8/fsadm.8 +#usr/share/man/man8/lvchange.8 +#usr/share/man/man8/lvconvert.8 +#usr/share/man/man8/lvcreate.8 +#usr/share/man/man8/lvdisplay.8 +#usr/share/man/man8/lvextend.8 +#usr/share/man/man8/lvm.8 +#usr/share/man/man8/lvmchange.8 +#usr/share/man/man8/lvmconf.8 +#usr/share/man/man8/lvmdiskscan.8 +#usr/share/man/man8/lvmdump.8 +#usr/share/man/man8/lvmsadc.8 +#usr/share/man/man8/lvmsar.8 +#usr/share/man/man8/lvreduce.8 +#usr/share/man/man8/lvremove.8 +#usr/share/man/man8/lvrename.8 +#usr/share/man/man8/lvresize.8 +#usr/share/man/man8/lvs.8 +#usr/share/man/man8/lvscan.8 +#usr/share/man/man8/pvchange.8 +#usr/share/man/man8/pvck.8 +#usr/share/man/man8/pvcreate.8 +#usr/share/man/man8/pvdisplay.8 +#usr/share/man/man8/pvmove.8 +#usr/share/man/man8/pvremove.8 +#usr/share/man/man8/pvresize.8 +#usr/share/man/man8/pvs.8 +#usr/share/man/man8/pvscan.8 +#usr/share/man/man8/vgcfgbackup.8 +#usr/share/man/man8/vgcfgrestore.8 +#usr/share/man/man8/vgchange.8 +#usr/share/man/man8/vgck.8 +#usr/share/man/man8/vgconvert.8 +#usr/share/man/man8/vgcreate.8 +#usr/share/man/man8/vgdisplay.8 +#usr/share/man/man8/vgexport.8 +#usr/share/man/man8/vgextend.8 +#usr/share/man/man8/vgimport.8 +#usr/share/man/man8/vgimportclone.8 +#usr/share/man/man8/vgmerge.8 +#usr/share/man/man8/vgmknodes.8 +#usr/share/man/man8/vgreduce.8 +#usr/share/man/man8/vgremove.8 +#usr/share/man/man8/vgrename.8 +#usr/share/man/man8/vgs.8 +#usr/share/man/man8/vgscan.8 +#usr/share/man/man8/vgsplit.8 diff --git a/config/rootfiles/common/multipath-tools b/config/rootfiles/common/multipath-tools new file mode 100644 index 000000000..b88962107 --- /dev/null +++ b/config/rootfiles/common/multipath-tools @@ -0,0 +1,4 @@ +#etc/udev/rules.d/kpartx.rules +#lib/udev/kpartx_id +#sbin/kpartx +#usr/share/man/man8/kpartx.8.gz diff --git a/lfs/lvm2 b/lfs/lvm2 new file mode 100644 index 000000000..6314db0cc --- /dev/null +++ b/lfs/lvm2 @@ -0,0 +1,84 @@ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007 Michael Tremer & Christian Schmidt # +# # +# 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 3 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, see . # +# # +############################################################################### + +############################################################################### +# Definitions +############################################################################### + +include Config + +VER = 2.02.95 + +THISAPP = LVM2.$(VER) +DL_FILE = $(THISAPP).tgz +DL_FROM = $(URL_IPFIRE) +DIR_APP = $(DIR_SRC)/$(THISAPP) +TARGET = $(DIR_INFO)/$(THISAPP) + +############################################################################### +# Top-level Rules +############################################################################### + +objects = $(DL_FILE) + +$(DL_FILE) = $(DL_FROM)/$(DL_FILE) + +$(DL_FILE)_MD5 = bd470a802046c807603618a443732ea7 + +install : $(TARGET) + +check : $(patsubst %,$(DIR_CHK)/%,$(objects)) + +download :$(patsubst %,$(DIR_DL)/%,$(objects)) + +md5 : $(subst %,%_MD5,$(objects)) + +dist: + @$(PAK) + +############################################################################### +# Downloading, checking, md5sum +############################################################################### + +$(patsubst %,$(DIR_CHK)/%,$(objects)) : + @$(CHECK) + +$(patsubst %,$(DIR_DL)/%,$(objects)) : + @$(LOAD) + +$(subst %,%_MD5,$(objects)) : + @$(MD5) + +############################################################################### +# Installation Details +############################################################################### + +$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) + @$(PREBUILD) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && \ + ./configure \ + --prefix=/usr \ + --with-usrlibdir=/usr/lib \ + --enable-pkgconfig + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install + @rm -rf $(DIR_APP) + @$(POSTBUILD) diff --git a/lfs/multipath-tools b/lfs/multipath-tools new file mode 100644 index 000000000..ac00e2b24 --- /dev/null +++ b/lfs/multipath-tools @@ -0,0 +1,79 @@ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007 Michael Tremer & Christian Schmidt # +# # +# 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 3 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, see . # +# # +############################################################################### + +############################################################################### +# Definitions +############################################################################### + +include Config + +VER = 120613 + +THISAPP = multipath-tools-$(VER) +DL_FILE = $(THISAPP).tgz +DL_FROM = $(URL_IPFIRE) +DIR_APP = $(DIR_SRC)/$(THISAPP) +TARGET = $(DIR_INFO)/$(THISAPP) + +############################################################################### +# Top-level Rules +############################################################################### + +objects = $(DL_FILE) + +$(DL_FILE) = $(DL_FROM)/$(DL_FILE) + +$(DL_FILE)_MD5 = 84632b08dbca9fa04179edd8c469c92a + +install : $(TARGET) + +check : $(patsubst %,$(DIR_CHK)/%,$(objects)) + +download :$(patsubst %,$(DIR_DL)/%,$(objects)) + +md5 : $(subst %,%_MD5,$(objects)) + +dist: + @$(PAK) + +############################################################################### +# Downloading, checking, md5sum +############################################################################### + +$(patsubst %,$(DIR_CHK)/%,$(objects)) : + @$(CHECK) + +$(patsubst %,$(DIR_DL)/%,$(objects)) : + @$(LOAD) + +$(subst %,%_MD5,$(objects)) : + @$(MD5) + +############################################################################### +# Installation Details +############################################################################### + +$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) + @$(PREBUILD) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP)/kpartx && make $(MAKETUNING) + cd $(DIR_APP)/kpartx && make install PREFIX=/usr + @rm -rf $(DIR_APP) + @$(POSTBUILD) diff --git a/make.sh b/make.sh index e16e51b95..b55bbdb85 100755 --- a/make.sh +++ b/make.sh @@ -376,7 +376,6 @@ buildbase() { lfsmake2 vim lfsmake2 xz lfsmake2 paxctl - lfsmake2 grub } buildipfire() { @@ -400,6 +399,9 @@ buildipfire() { ipfiremake cpio ipfiremake mdadm ipfiremake dracut + ipfiremake lvm2 + ipfiremake multipath-tools + ipfiremake grub case "${TARGET_ARCH}" in i586) From c42cbc86b3e052ec89c28e3fdd4fdb0fb50257de Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 23 Aug 2014 16:28:54 +0200 Subject: [PATCH 109/297] Rewrite flash-image generation for GRUB2. --- lfs/flash-images | 240 +++++++++++++++++++++-------------------------- make.sh | 1 + 2 files changed, 107 insertions(+), 134 deletions(-) diff --git a/lfs/flash-images b/lfs/flash-images index 4e28e4cd3..69b6b44eb 100644 --- a/lfs/flash-images +++ b/lfs/flash-images @@ -29,6 +29,18 @@ VER = ipfire THISAPP = flash-image TARGET = $(DIR_INFO)/$(THISAPP) +DEVICE = $(shell losetup -f) +PART_BOOT = /dev/mapper/$(patsubst /dev/%,%,$(DEVICE))p1 +PART_ROOT = /dev/mapper/$(patsubst /dev/%,%,$(DEVICE))p2 + +ifeq "$(SCON)" "1" + IMAGE_FILE = /install/images/$(SNAME)-$(VERSION).1gb-ext4-scon.$(MACHINE)-full-core$(CORE).img.gz +else + IMAGE_FILE = /install/images/$(SNAME)-$(VERSION).1gb-ext4.$(MACHINE)-full-core$(CORE).img.gz +endif + +FSTAB_FMT = UUID=%s %-8s %-4s %-10s %d %d\n + ############################################################################### # Top-level Rules ############################################################################### @@ -44,21 +56,19 @@ md5 : ############################################################################### # Installation Details ############################################################################### -IMGinst := /install/images/$(SNAME)-$(VERSION).1gb-ext4.$(MACHINE)-full-core$(CORE).img -IMGinsts := /install/images/$(SNAME)-$(VERSION).1gb-ext4-scon.$(MACHINE)-full-core$(CORE).img MNThdd := /install/harddisk -IMGpart := /install/images/part_area -IMGboot := /install/images/bootfs -IMGroot := /install/images/rootfs +IMG := /install/images/image.img # All sizes in blocks ifeq "$(MACHINE_TYPE)" "arm" + BOOTLOADER = S_OFFSET = 8192 # FAT32 PART_TYPE = c else - S_OFFSET = 32 + BOOTLOADER = grub + S_OFFSET = 8192 # Logical PART_TYPE = L @@ -70,33 +80,39 @@ S_BOOT := $(shell echo $$(( 131072 - $(S_OFFSET) ))) S_ROOT := 1433600 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) - rm -rf $(MNThdd) $(IMGinst) $(IMGpart) $(IMGboot) $(IMGroot) && mkdir -p $(MNThdd) + # Stop if $(MNThdd) is still mounted + mountpoint $(MNThdd) && exit 1 || exit 0 - # Create first 32 sectors of image - dd if=/dev/zero of=$(IMGpart) bs=512 count=$(S_OFFSET) + rm -rf $(IMG) $(MNThdd) && mkdir -p $(MNThdd) - # Create images for filesystems - dd if=/dev/zero of=$(IMGboot) bs=512 count=$(S_BOOT) - dd if=/dev/zero of=$(IMGroot) bs=512 count=$(S_ROOT) + # Allocate image on disk + dd if=/dev/zero of=$(IMG) bs=512 count=$$(( $(S_OFFSET) + $(S_BOOT) + $(S_ROOT) )) + losetup $(DEVICE) $(IMG) + + # Write Partition table + echo -e "$(S_OFFSET),$(S_BOOT),$(PART_TYPE),*\n$$(( $(S_BOOT) + $(S_OFFSET) )),$(S_ROOT),L\n" \ + | sfdisk -D -uS -H 64 -S 32 $(DEVICE) + + kpartx -v -a $(DEVICE) # Format them ifeq "$(PART_TYPE)" "c" - mkfs.vfat $(IMGboot) + mkfs.vfat $(PART_BOOT) else - mkfs.ext2 -F $(IMGboot) + mkfs.ext2 -F $(PART_BOOT) endif - mkfs.ext4 -O ^has_journal,extent -F $(IMGroot) + mkfs.ext4 -O ^has_journal,extent -F $(PART_ROOT) # Most systems that use Flashimages has no RTC at boot # so the interval check should disables - tune2fs -i0 $(IMGroot) + tune2fs -i0 $(PART_ROOT) - # Mount Images - mount -o loop $(IMGroot) $(MNThdd) - mkdir $(MNThdd)/boot - mkdir $(MNThdd)/var - mkdir $(MNThdd)/var/log - mount -o loop $(IMGboot) $(MNThdd)/boot + # Mount root partition + mount $(PART_ROOT) $(MNThdd) + + # Mount boot partition + mkdir -pv $(MNThdd)/boot + mount $(PART_BOOT) $(MNThdd)/boot # Install MLO and uboot first ifeq "$(MACHINE_TYPE)" "arm" @@ -105,98 +121,18 @@ ifeq "$(MACHINE_TYPE)" "arm" cp -v /boot/zImage-ipfire-multi $(MNThdd)/boot/ sync umount $(MNThdd)/boot - mount -o loop $(IMGboot) $(MNThdd)/boot + mount $(PART_BOOT) $(MNThdd)/boot endif # Install IPFire - tar -C $(MNThdd)/ -xvaf /install/cdrom/$(SNAME)-$(VERSION).tlz + tar -x --lzma -C $(MNThdd)/ -f /install/cdrom/distro.img + echo "LANGUAGE=en" >> $(MNThdd)/var/ipfire/main/settings echo "HOSTNAME=$(SNAME)" >> $(MNThdd)/var/ipfire/main/settings echo "THEME=ipfire" >> $(MNThdd)/var/ipfire/main/settings - -touch $(MNThdd)/lib/modules/$(KVER)-ipfire/modules.dep - mkdir $(MNThdd)/proc - mount --bind /proc $(MNThdd)/proc - mount --bind /dev $(MNThdd)/dev - mount --bind /sys $(MNThdd)/sys - chroot $(MNThdd) /usr/bin/perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" - sed -i -e "s|DEVICE1|UUID=$$(blkid -sUUID $(IMGboot) | cut -d'"' -f2)|g" $(MNThdd)/etc/fstab -ifeq "$(PART_TYPE)" "c" - # ARM flash images have a VFAT partition for /boot. - sed -i -e "s|ext2|vfat|" $(MNThdd)/etc/fstab -endif - sed -i -e "s|DEVICE2|#DEVICE2|g" $(MNThdd)/etc/fstab - sed -i -e "s|DEVICE3|UUID=$$(blkid -sUUID $(IMGroot) | cut -d'"' -f2)|g" $(MNThdd)/etc/fstab - sed -i -e "s|DEVICE4|#DEVICE4|g" $(MNThdd)/etc/fstab - sed -i -e "s|FSTYPE|ext4|g" $(MNThdd)/etc/fstab - -ifneq "$(MACHINE_TYPE)" "arm" - sed -i -e "s|MOUNT|ro|g" $(MNThdd)/boot/grub/grub.conf - sed -i -e "s|KVER|$(KVER)|g" $(MNThdd)/boot/grub/grub.conf - sed -i -e "s|ROOT|UUID=$$(blkid -sUUID $(IMGroot) | cut -d'"' -f2)|g" $(MNThdd)/boot/grub/grub.conf - ln -s grub.conf $(MNThdd)/boot/grub/menu.lst - - # Copy grub files manually - cp -f $(MNThdd)/usr/lib/grub/i386-pc/* $(MNThdd)/boot/grub/ -endif - - # Setup symlink for partresize at first boot... - ln -sf ../init.d/partresize $(MNThdd)/etc/rc.d/rcsysinit.d/S25partresize - # Setup symlink for fsresize at second boot... - ln -sf ../init.d/fsresize $(MNThdd)/etc/rc.d/rcsysinit.d/S42fsresize - - # Unmount - umount $(MNThdd)/proc - umount $(MNThdd)/dev - umount $(MNThdd)/sys - umount $(MNThdd)/boot - umount $(MNThdd) - - # zerofree the ext2 images to get better compression -ifneq "$(PART_TYPE)" "c" - zerofree $(IMGboot) - -fsck.ext2 -f -y $(IMGboot) - fsck.ext2 -f -y $(IMGboot) -endif - zerofree $(IMGroot) - -fsck.ext4 -f -y $(IMGroot) - fsck.ext4 -f -y $(IMGroot) - - # Cat to an image - cat $(IMGpart) $(IMGboot) $(IMGroot) > $(IMGinst) - - # Write Partition table - echo -e "$(S_OFFSET),$(S_BOOT),$(PART_TYPE),*\n,0,0\n$$(( $(S_BOOT) + $(S_OFFSET) )),$(S_ROOT),L\n,0,0\n" \ - | sfdisk -D -uS -H 64 -S 32 $(IMGinst) - -ifneq "$(MACHINE_TYPE)" "arm" - # Install grub - echo "device (hd0) $(IMGinst)" > /tmp/grubinst.tmp - echo "root (hd0,0)" >> /tmp/grubinst.tmp - echo "setup (hd0)" >> /tmp/grubinst.tmp - echo "quit" >> /tmp/grubinst.tmp - grub < /tmp/grubinst.tmp - rm -f /tmp/grubinst.tmp -endif - - # Compress Image - gzip -f9 $(IMGinst) - - # Now Build serialcon Version - # Mount Images - mount -o loop $(IMGroot) $(MNThdd) - mount -o loop $(IMGboot) $(MNThdd)/boot - -ifneq "$(MACHINE_TYPE)" "arm" - sed -i -e "s|splashimage|#splashimage|g" $(MNThdd)/boot/grub/grub.conf - sed -i -e "s|#serial|serial|g" $(MNThdd)/boot/grub/grub.conf - sed -i -e "s|#terminal|terminal|g" $(MNThdd)/boot/grub/grub.conf - sed -i -e "s| panic=10 | console=ttyS0,115200n8 panic=10 |g" $(MNThdd)/boot/grub/grub.conf -else - sed -i -e "s| console=tty1 | console=ttyAMA0,115200n8 |g" $(MNThdd)/boot/cmdline.txt - sed -i -e "s| console=tty1 | console=ttyO2,115200n8 |g" $(MNThdd)/boot/boot.script - cd $(MNThdd)/boot && ./convert_bootscript -endif +ifeq "$(SCON)" "1" + # Enable serial console sed -i -e "s|1:2345:respawn:|#1:2345:respawn:|g" $(MNThdd)/etc/inittab sed -i -e "s|2:2345:respawn:|#2:2345:respawn:|g" $(MNThdd)/etc/inittab sed -i -e "s|3:2345:respawn:|#3:2345:respawn:|g" $(MNThdd)/etc/inittab @@ -205,38 +141,74 @@ endif sed -i -e "s|6:2345:respawn:|#6:2345:respawn:|g" $(MNThdd)/etc/inittab sed -i -e "s|#7:2345:respawn:|7:2345:respawn:|g" $(MNThdd)/etc/inittab +ifeq "$(MACHINE_TYPE)" "arm" + sed -i -e "s| console=tty1 | console=ttyAMA0,115200n8 |g" $(MNThdd)/boot/cmdline.txt + sed -i -e "s| console=tty1 | console=ttyO2,115200n8 |g" $(MNThdd)/boot/boot.script + cd $(MNThdd)/boot && ./convert_bootscript +endif +endif + + -touch $(MNThdd)/lib/modules/$(KVER)-ipfire/modules.dep + mkdir $(MNThdd)/proc + mount --bind /proc $(MNThdd)/proc + mount --bind /dev $(MNThdd)/dev + mount --bind /sys $(MNThdd)/sys + + chroot $(MNThdd) /usr/bin/perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" + + # Create /etc/fstab + printf "$(FSTAB_FMT)" "$$(blkid -o value -s UUID $(PART_BOOT))" "/boot" \ + "auto" "defaults" 1 2 > $(MNThdd)/etc/fstab + printf "$(FSTAB_FMT)" "$$(blkid -o value -s UUID $(PART_ROOT))" "/" \ + "auto" "defaults" 1 1 >> $(MNThdd)/etc/fstab + + # Setup symlink for partresize at first boot... + ln -sf ../init.d/partresize $(MNThdd)/etc/rc.d/rcsysinit.d/S25partresize + # Setup symlink for fsresize at second boot... + ln -sf ../init.d/fsresize $(MNThdd)/etc/rc.d/rcsysinit.d/S42fsresize + +ifeq "$(BOOTLOADER)" "grub" +ifeq "$(SCON)" "1" + # Enable serial console on GRUB + echo "GRUB_TERMINAL=\"serial console\"" >> $(MNThdd)/etc/default/grub + echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> $(MNThdd)/etc/default/grub + + sed -i -e "s|panic=10|& console=ttyS0,115200n8|g" $(MNThdd)/etc/default/grub +endif + + # Create configuration + mkdir -pv $(MNThdd)/boot/grub + chroot $(MNThdd) grub-mkconfig -o /boot/grub/grub.cfg + + # Insert the UUID because grub-mkconfig fails to detect that correctly + sed -i $(MNThdd)/boot/grub/grub.cfg \ + -e "s/root=[a-z0-9\/]*/root=UUID=$$(blkid -o value -s UUID $(PART_ROOT))/g" + + # Install GRUB + grub-install --force --recheck --no-floppy \ + --root-directory=$(MNThdd) $(DEVICE) +endif + + # Unmount + umount $(MNThdd)/proc + umount $(MNThdd)/sys + umount $(MNThdd)/dev umount $(MNThdd)/boot umount $(MNThdd) - # zerofree the ext3 images to get better compression + # zerofree the ext2 images to get better compression ifneq "$(PART_TYPE)" "c" - zerofree $(IMGboot) - -fsck.ext2 -f -y $(IMGboot) - fsck.ext2 -f -y $(IMGboot) + zerofree $(PART_BOOT) + -fsck.ext2 -f -y $(PART_BOOT) + fsck.ext2 -f -y $(PART_BOOT) endif - zerofree $(IMGroot) - -fsck.ext4 -f -y $(IMGroot) - fsck.ext4 -f -y $(IMGroot) + zerofree $(PART_ROOT) + -fsck.ext4 -f -y $(PART_ROOT) + fsck.ext4 -f -y $(PART_ROOT) - # Cat to an image - cat $(IMGpart) $(IMGboot) $(IMGroot) > $(IMGinsts) - rm -vf $(IMGpart) $(IMGboot) $(IMGroot) - - # Write Partition table - echo -e "$(S_OFFSET),$(S_BOOT),$(PART_TYPE),*\n,0,0\n$$(( $(S_BOOT) + $(S_OFFSET) )),$(S_ROOT),L\n,0,0\n" \ - | sfdisk -D -uS -H 64 -S 32 $(IMGinsts) - -ifneq "$(MACHINE_TYPE)" "arm" - # Install grub - echo "device (hd0) $(IMGinsts)" > /tmp/grubinst.tmp - echo "root (hd0,0)" >> /tmp/grubinst.tmp - echo "setup (hd0)" >> /tmp/grubinst.tmp - echo "quit" >> /tmp/grubinst.tmp - grub < /tmp/grubinst.tmp - rm -f /tmp/grubinst.tmp -endif + kpartx -d -v $(DEVICE) + losetup -d $(DEVICE) # Compress Image - gzip -f9 $(IMGinsts) - - rm -rf $(MNThdd) $(IMGpart) $(IMGboot) $(IMGroot) + pigz -f9 < $(IMG) > $(IMAGE_FILE) + rm -rf $(IMG) $(MNThdd) diff --git a/make.sh b/make.sh index b55bbdb85..49cc1d871 100755 --- a/make.sh +++ b/make.sh @@ -862,6 +862,7 @@ buildpackages() { modprobe loop 2>/dev/null if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then ipfiremake flash-images + ipfiremake flash-images SCON=1 fi mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1 From a24546794d1cecac2b929ce6493f4bda3fbb8a16 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 24 Aug 2014 13:29:18 +0200 Subject: [PATCH 110/297] Update auto-resize code to work with any partition number --- config/rootfiles/common/armv5tel/initscripts | 2 + config/rootfiles/common/i586/initscripts | 2 + lfs/flash-images | 8 +-- lfs/initscripts | 2 + src/initscripts/init.d/fsresize | 28 ++++---- src/initscripts/init.d/partresize | 68 +++++++++++--------- 6 files changed, 62 insertions(+), 48 deletions(-) diff --git a/config/rootfiles/common/armv5tel/initscripts b/config/rootfiles/common/armv5tel/initscripts index 5e40079a9..7a4e41b7d 100644 --- a/config/rootfiles/common/armv5tel/initscripts +++ b/config/rootfiles/common/armv5tel/initscripts @@ -213,8 +213,10 @@ etc/rc.d/rcsysinit.d/S05modules etc/rc.d/rcsysinit.d/S10udev etc/rc.d/rcsysinit.d/S19waitdrives etc/rc.d/rcsysinit.d/S20swap +etc/rc.d/rcsysinit.d/S25partresize etc/rc.d/rcsysinit.d/S30checkfs etc/rc.d/rcsysinit.d/S40mountfs +etc/rc.d/rcsysinit.d/S42fsresize etc/rc.d/rcsysinit.d/S45udev_retry etc/rc.d/rcsysinit.d/S50cleanfs etc/rc.d/rcsysinit.d/S60setclock diff --git a/config/rootfiles/common/i586/initscripts b/config/rootfiles/common/i586/initscripts index 6704251d5..529bcc9c0 100644 --- a/config/rootfiles/common/i586/initscripts +++ b/config/rootfiles/common/i586/initscripts @@ -220,8 +220,10 @@ etc/rc.d/rcsysinit.d/S10udev etc/rc.d/rcsysinit.d/S19checkfstab etc/rc.d/rcsysinit.d/S19waitdrives etc/rc.d/rcsysinit.d/S20swap +etc/rc.d/rcsysinit.d/S25partresize etc/rc.d/rcsysinit.d/S30checkfs etc/rc.d/rcsysinit.d/S40mountfs +etc/rc.d/rcsysinit.d/S42fsresize etc/rc.d/rcsysinit.d/S45udev_retry etc/rc.d/rcsysinit.d/S50cleanfs etc/rc.d/rcsysinit.d/S60setclock diff --git a/lfs/flash-images b/lfs/flash-images index 69b6b44eb..7baec7c2e 100644 --- a/lfs/flash-images +++ b/lfs/flash-images @@ -162,11 +162,6 @@ endif printf "$(FSTAB_FMT)" "$$(blkid -o value -s UUID $(PART_ROOT))" "/" \ "auto" "defaults" 1 1 >> $(MNThdd)/etc/fstab - # Setup symlink for partresize at first boot... - ln -sf ../init.d/partresize $(MNThdd)/etc/rc.d/rcsysinit.d/S25partresize - # Setup symlink for fsresize at second boot... - ln -sf ../init.d/fsresize $(MNThdd)/etc/rc.d/rcsysinit.d/S42fsresize - ifeq "$(BOOTLOADER)" "grub" ifeq "$(SCON)" "1" # Enable serial console on GRUB @@ -189,6 +184,9 @@ endif --root-directory=$(MNThdd) $(DEVICE) endif + # Automatically resize the root partition to its maximum size at first boot + touch $(MNThdd)/.partresize + # Unmount umount $(MNThdd)/proc umount $(MNThdd)/sys diff --git a/lfs/initscripts b/lfs/initscripts index 4acf65e13..c5fe54f82 100644 --- a/lfs/initscripts +++ b/lfs/initscripts @@ -162,8 +162,10 @@ $(TARGET) : ln -sf ../init.d/udev /etc/rc.d/rcsysinit.d/S10udev ln -sf ../init.d/waitdrives /etc/rc.d/rcsysinit.d/S19waitdrives ln -sf ../init.d/swap /etc/rc.d/rcsysinit.d/S20swap + ln -sf ../init.d/partresize /etc/rc.d/rcsysinit.d/S25partresize ln -sf ../init.d/checkfs /etc/rc.d/rcsysinit.d/S30checkfs ln -sf ../init.d/mountfs /etc/rc.d/rcsysinit.d/S40mountfs + ln -sf ../init.d/fsresize /etc/rc.d/rcsysinit.d/S42fsresize ln -sf ../init.d/udev_retry /etc/rc.d/rcsysinit.d/S45udev_retry ln -sf ../init.d/cleanfs /etc/rc.d/rcsysinit.d/S50cleanfs ln -sf ../init.d/setclock /etc/rc.d/rcsysinit.d/S60setclock diff --git a/src/initscripts/init.d/fsresize b/src/initscripts/init.d/fsresize index 3dbd1addd..325c731af 100644 --- a/src/initscripts/init.d/fsresize +++ b/src/initscripts/init.d/fsresize @@ -17,22 +17,24 @@ case "${1}" in start) - boot_mesg "Background Autoresize root partition to use the whole drive" - # Detect device - ROOT=`mount | grep -m1 " / " | cut -d" " -f1`; - DRV=${ROOT::`expr length $ROOT`-1} + if [ -e "/.resizefs" ]; then + boot_mesg "Re-sizing root partition..." - boot_mesg "resize ${DRV}3 ..." - nice -n 19 $0 background ${DRV}3 > /dev/null & - ;; - background) - resize2fs -p $2 + # Find root device + while read -r dev mountpoint fs options; do + # Skip generic entries + [ "${dev}" = "rootfs" ] && continue - # Erase symlink, it should run only once - rm -f /etc/rc.d/rcsysinit.d/S42fsresize - sync - exit 0; + if [ "${mountpoint}" = "/" ]; then + # Resize filesystem + resize2fs -p "${dev}" + # Remove marker + rm -f /.resizefs + break + fi + done < /proc/mounts + fi ;; *) diff --git a/src/initscripts/init.d/partresize b/src/initscripts/init.d/partresize index f9b1aa92f..38c568316 100644 --- a/src/initscripts/init.d/partresize +++ b/src/initscripts/init.d/partresize @@ -17,40 +17,48 @@ case "${1}" in start) + if [ -e "/.partresize" ]; then + boot_mesg "Mounting root file system in read/write mode ..." + mount -o remount,rw / > /dev/null + evaluate_retval - boot_mesg "Mounting root file system in read/write mode ..." - mount -o remount,rw / > /dev/null - evaluate_retval + # Detect device + while read -r dev mountpoint fs options; do + [ "${dev}" = "rootfs" ] && continue - boot_mesg "Create /etc/mtab..." - > /etc/mtab - mount -f / || failed=1 - (exit ${failed}) - evaluate_retval + if [ "${mountpoint}" = "/" ]; then + # Find root partition number + part_num="${dev: -1}" - # Detect device - ROOT=`mount | grep -m1 " / " | cut -d" " -f1`; - if [ "${ROOT:`expr length $ROOT`-2:1}" == "p" ]; then - DRV=${ROOT::`expr length $ROOT`-2} - else - DRV=${ROOT::`expr length $ROOT`-1} + # Find path to the root device + root_dev="${dev::-1}" + if [ ! -b "${dev::-1}" -a "${root_dev: -1}" = "p" ]; then + root_dev="${dev::-2}" + fi + + boot_mesg "Growing root partition to maximum size..." + echo -e ',+' | sfdisk --no-reread -f -N${part_num} "${root_dev}" 2>/dev/null + + # Update c,h,s values of the boot partition... + if [ ${part_num} -ne 1 -a -b "${root_dev}1" ]; then + echo -e ',' | sfdisk --no-reread -f -N1 ${DRV} &> /dev/null + fi + + # The filesystem should be resized after + # this operation + touch /.resizefs + + # Remove marker + rm -f /.partresize + + # Reboot + boot_mesg "Rebooting system..." + mount -o remount,ro / &>/dev/null + sleep 15 + reboot -f + fi + done < /proc/mounts fi - - boot_mesg "Change Partition ${DRV}3 to all free space ..." - echo -e ',+' | sfdisk --no-reread -f -N3 ${DRV} 2>/dev/null - - boot_mesg "Update c,h,s values of ${DRV}1 ..." - echo -e ',' | sfdisk --no-reread -f -N1 ${DRV} &> /dev/null - - # Erase symlink, it should run only once - rm -f /etc/rc.d/rcsysinit.d/S25partresize - - boot_mesg "Rebooting ..." - sync - mount -o remount,ro / &> /dev/null - sleep 15 - reboot -f - ;; *) echo "Usage: ${0} {start}" From d0137fe6546208f3bf45c1a35646d742cb230db7 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 24 Aug 2014 13:33:03 +0200 Subject: [PATCH 111/297] mdadm: Remove initscript udev cares about assembling all RAID arrays automatically --- src/initscripts/init.d/mdadm | 47 ------------------------------------ 1 file changed, 47 deletions(-) delete mode 100644 src/initscripts/init.d/mdadm diff --git a/src/initscripts/init.d/mdadm b/src/initscripts/init.d/mdadm deleted file mode 100644 index 03f6fe458..000000000 --- a/src/initscripts/init.d/mdadm +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -######################################################################## -# Begin $rc_base/init.d/mdadm -# -# Description : This script controls software Raid -# -# Authors : Dirk Hoefle -# -# Version : 01.00 -# -# Notes : -# -######################################################################## - -. /etc/sysconfig/rc -. ${rc_functions} - -case "${1}" in - start) - boot_mesg "Scan/assemble mdadm raid devices..." - mdadm --assemble --scan - echo_ok - ;; - - stop) - boot_mesg "Stopping Raid devices..." - mdadm --stop --scan - echo_ok - ;; - - restart) - ${0} stop - sleep 1 - ${0} start - ;; - - status) - cat /proc/mdstat - ;; - - *) - echo "Usage: ${0} {start|stop|restart|status}" - exit 1 - ;; -esac - -# End $rc_base/init.d/mdadm From 1f4b1f6ea9a8c20906c20c157ca75f0948ff2df8 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 24 Aug 2014 16:02:06 +0200 Subject: [PATCH 112/297] initscripts: Mount /var/lock early in the boot process --- src/initscripts/init.d/mountkernfs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/initscripts/init.d/mountkernfs b/src/initscripts/init.d/mountkernfs index f7be82d01..05e8eb67a 100644 --- a/src/initscripts/init.d/mountkernfs +++ b/src/initscripts/init.d/mountkernfs @@ -34,6 +34,11 @@ case "${1}" in mount -n -t tmpfs -o nosuid,nodev,mode=755,size=8M /run /run || failed=1 fi + if ! mountpoint /var/lock &>/dev/null; then + boot_mesg -n " /var/lock" ${NORMAL} + mount -n -t tmpfs -o nosuid,nodev,size=8M /var/lock /var/lock || failed=1 + fi + boot_mesg "" ${NORMAL} (exit ${failed}) From efb77c9e35a4d61638ed1eec37554783d72101ff Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 24 Aug 2014 16:06:54 +0200 Subject: [PATCH 113/297] monitoring tmpfs: Mount ramdisk in initscript --- src/initscripts/init.d/tmpfs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/initscripts/init.d/tmpfs b/src/initscripts/init.d/tmpfs index 848dec6ad..2ee2ffb72 100644 --- a/src/initscripts/init.d/tmpfs +++ b/src/initscripts/init.d/tmpfs @@ -68,6 +68,10 @@ case "$1" in evaluate_retval ;; restore) + if ! mountpoint $RRDLOG &>/dev/null; then + mount -t tmpfs -o size=64M none "$RRDLOG" + fi + if [ -e $RRDLOG.bak/cron/new.root ]; then if [ -e $RRDLOG.bak/cron/root ]; then rm -f $RRDLOG.bak/cron/new.root From da840da8670cf8051c2d3fc6fa3dcd34151a3028 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 24 Aug 2014 16:09:54 +0200 Subject: [PATCH 114/297] Remove template of /etc/fstab --- config/etc/fstab | 9 --------- lfs/stage2 | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) delete mode 100644 config/etc/fstab diff --git a/config/etc/fstab b/config/etc/fstab deleted file mode 100644 index 775f619b0..000000000 --- a/config/etc/fstab +++ /dev/null @@ -1,9 +0,0 @@ -# -# file system mount-point type options dump fsck -# order -DEVICE1 /boot auto defaults 1 2 -DEVICE2 swap swap pri=1 0 0 -DEVICE3 / auto defaults 1 1 -DEVICE4 /var auto defaults 1 1 -none /var/log/rrd tmpfs defaults,size=64M 0 0 -none /var/lock tmpfs defaults,size=8M 0 0 diff --git a/lfs/stage2 b/lfs/stage2 index a08481630..19d955379 100644 --- a/lfs/stage2 +++ b/lfs/stage2 @@ -75,7 +75,7 @@ $(TARGET) : # Config files cp -rvf $(DIR_SRC)/config/etc/* /etc; - touch /etc/mtab + touch /etc/{fs,m}tab echo "$(NAME) v$(VERSION) - $(SLOGAN)" > /etc/issue echo "===============================" >> /etc/issue echo "\n running on \s \r \m" >> /etc/issue From 7051d2af6191a8ab4edbb43088eae1bccebd4bc3 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 24 Aug 2014 16:11:45 +0200 Subject: [PATCH 115/297] flash-images: Add an extra 100 MB padding at end of image This makes it easier to align partitions correctly when the root partition is grown at the first boot. --- lfs/flash-images | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lfs/flash-images b/lfs/flash-images index 7baec7c2e..79701aad9 100644 --- a/lfs/flash-images +++ b/lfs/flash-images @@ -79,6 +79,8 @@ endif S_BOOT := $(shell echo $$(( 131072 - $(S_OFFSET) ))) S_ROOT := 1433600 +PADDING = 100 # MB + $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) # Stop if $(MNThdd) is still mounted mountpoint $(MNThdd) && exit 1 || exit 0 @@ -207,6 +209,10 @@ endif kpartx -d -v $(DEVICE) losetup -d $(DEVICE) + # Add padding at the end of the image (to fix alignment issues if the image is + # not copied to a block device) + dd if=/dev/zero bs=1M count=$(PADDING) >> $(IMG) + # Compress Image pigz -f9 < $(IMG) > $(IMAGE_FILE) rm -rf $(IMG) $(MNThdd) From 6246d21c0bdaec1bebfc3003db39680f7359c826 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 24 Aug 2014 20:37:30 +0200 Subject: [PATCH 116/297] Rootfile update --- config/rootfiles/common/installer | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/config/rootfiles/common/installer b/config/rootfiles/common/installer index 673855318..f28d98474 100644 --- a/config/rootfiles/common/installer +++ b/config/rootfiles/common/installer @@ -5,4 +5,33 @@ #usr/lib/dracut/modules.d/99installer/fake-root.sh #usr/lib/dracut/modules.d/99installer/module-setup.sh #usr/lib/dracut/modules.d/99installer/run-installer.sh +#usr/share/locale/ar/LC_MESSAGES/installer.mo +#usr/share/locale/ca/LC_MESSAGES/installer.mo +#usr/share/locale/cs_CZ/LC_MESSAGES/installer.mo +#usr/share/locale/da/LC_MESSAGES/installer.mo #usr/share/locale/de/LC_MESSAGES/installer.mo +#usr/share/locale/el_GR/LC_MESSAGES/installer.mo +#usr/share/locale/es/LC_MESSAGES/installer.mo +#usr/share/locale/fa/LC_MESSAGES/installer.mo +#usr/share/locale/fr/LC_MESSAGES/installer.mo +#usr/share/locale/hu/LC_MESSAGES/installer.mo +#usr/share/locale/id/LC_MESSAGES/installer.mo +#usr/share/locale/it/LC_MESSAGES/installer.mo +#usr/share/locale/ja/LC_MESSAGES/installer.mo +#usr/share/locale/km_KH/LC_MESSAGES/installer.mo +#usr/share/locale/nl/LC_MESSAGES/installer.mo +#usr/share/locale/pl/LC_MESSAGES/installer.mo +#usr/share/locale/pt_BR/LC_MESSAGES/installer.mo +#usr/share/locale/pt_PT/LC_MESSAGES/installer.mo +#usr/share/locale/ro_RO/LC_MESSAGES/installer.mo +#usr/share/locale/ru/LC_MESSAGES/installer.mo +#usr/share/locale/sk/LC_MESSAGES/installer.mo +#usr/share/locale/sq/LC_MESSAGES/installer.mo +#usr/share/locale/sv/LC_MESSAGES/installer.mo +#usr/share/locale/th/LC_MESSAGES/installer.mo +#usr/share/locale/tk/LC_MESSAGES/installer.mo +#usr/share/locale/tr/LC_MESSAGES/installer.mo +#usr/share/locale/uk/LC_MESSAGES/installer.mo +#usr/share/locale/uz@Latn/LC_MESSAGES/installer.mo +#usr/share/locale/vi/LC_MESSAGES/installer.mo +#usr/share/locale/zh/LC_MESSAGES/installer.mo From 165295ab2848631d5558fc81affdefe4110d40ec Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 30 Aug 2014 11:02:28 +0200 Subject: [PATCH 117/297] installer: Fix language selection The selected language was not written to the system configuration file and therefore the system was reset to English again. --- src/installer/main.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index 88b3735cc..d9dd75c2c 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -238,7 +238,7 @@ int main(int argc, char *argv[]) { int rc = 0; char commandstring[STRING_SIZE]; int choice; - char shortlangname[10]; + char language[STRING_SIZE]; char message[STRING_SIZE]; char title[STRING_SIZE]; int allok = 0; @@ -320,9 +320,10 @@ int main(int argc, char *argv[]) { assert(choice <= NUM_LANGS); fprintf(flog, "Selected language: %s (%s)\n", languages[choice].name, languages[choice].code); + snprintf(language, sizeof(language), languages[choice].code); - setenv("LANGUAGE", languages[choice].code, 1); - setlocale(LC_ALL, languages[choice].code); + setenv("LANGUAGE", language, 1); + setlocale(LC_ALL, language); } char* helpline = center_string(_("/ between elements | selects | next screen"), screen_cols); @@ -598,7 +599,7 @@ int main(int argc, char *argv[]) { } /* Save language und local settings */ - write_lang_configs(shortlangname); + write_lang_configs(language); /* Build cache lang file */ snprintf(commandstring, STRING_SIZE, "/usr/sbin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\""); From b02ba841b3f984f9a49dbc2db0e753ace52bb0b9 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 30 Aug 2014 21:10:32 +0200 Subject: [PATCH 118/297] webif: Find correct language file when locale is in format xx_XX.utf8 --- config/cfgroot/header.pl | 4 ++-- config/cfgroot/lang.pl | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/config/cfgroot/header.pl b/config/cfgroot/header.pl index acccfc834..cf895bf24 100644 --- a/config/cfgroot/header.pl +++ b/config/cfgroot/header.pl @@ -59,12 +59,12 @@ if ($ENV{'SERVER_ADDR'} && $ENV{'HTTPS'} ne 'on') { &General::readhash("${swroot}/main/settings", \%settings); &General::readhash("${swroot}/ethernet/settings", \%ethsettings); &General::readhash("${swroot}/ppp/settings", \%pppsettings); -$language = $settings{'LANGUAGE'}; $hostname = $settings{'HOSTNAME'}; $hostnameintitle = 0; ### Initialize language -if ($language =~ /^(\w+)$/) {$language = $1;} +require "${swroot}/lang.pl"; +$language = &Lang::FindWebLanguage($settings{"LANGUAGE"}); ### Read English Files if ( -d "/var/ipfire/langs/en/" ) { diff --git a/config/cfgroot/lang.pl b/config/cfgroot/lang.pl index 707b28d11..3b001ad9d 100644 --- a/config/cfgroot/lang.pl +++ b/config/cfgroot/lang.pl @@ -50,8 +50,8 @@ $language = $settings{'LANGUAGE'}; # (it is a developper options) # sub reload { + my $LG = &FindWebLanguage(shift); - my ($LG) = @_; %Lang::tr = (); # start with a clean array # Use CacheLang if present & not empty. @@ -157,4 +157,23 @@ sub BuildCacheLang { &General::log ("WARNING: cannot build cachelang file for [$missed].") if ($error); return $error; } + +sub FindWebLanguage() { + my $lang = shift; + + my @options = ($lang); + + my ($shortlang, $encoding) = split(/\./, $lang); + push(@options, $shortlang); + + my ($language, $country) = split(/_/, $shortlang); + push(@options, $language); + + foreach my $option (@options) { + return $option if (-e "${General::swroot}/langs/$option.pl"); + } + + return undef; +} + 1; From 9750c5e9dc369805df8b9983300103a919fb3559 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 3 Sep 2014 21:15:13 +0200 Subject: [PATCH 119/297] mdadm: Update to 3.3.2 --- lfs/mdadm | 5 +- ...il-auto-assemble-in-face-of-mdadm.co.patch | 85 ------------------- 2 files changed, 2 insertions(+), 88 deletions(-) delete mode 100644 src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch diff --git a/lfs/mdadm b/lfs/mdadm index 2970b004c..29d495d60 100644 --- a/lfs/mdadm +++ b/lfs/mdadm @@ -24,7 +24,7 @@ include Config -VER = 3.3.1 +VER = 3.3.2 THISAPP = mdadm-$(VER) DL_FILE = $(THISAPP).tar.xz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 4227d48de62dfb217c92fa0c54171bbe +$(DL_FILE)_MD5 = 44698d351501cac6a89072dc877eb220 install : $(TARGET) @@ -73,7 +73,6 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install @rm -rf $(DIR_APP) diff --git a/src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch b/src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch deleted file mode 100644 index 521578921..000000000 --- a/src/patches/mdadm-3.3.1-Assemble-Only-fail-auto-assemble-in-face-of-mdadm.co.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 5141638c54535b4ac80b8481404d868a63a18ecd Mon Sep 17 00:00:00 2001 -From: NeilBrown -Date: Tue, 29 Jul 2014 13:48:23 +1000 -Subject: [PATCH] Assemble: Only fail auto-assemble in face of mdadm.conf - conflicts. - -We should never auto-assemble things that conflict with mdadm.conf -However explicit assembly requests should be allowed. - -Reported-by: olovopb -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1070245 -Signed-off-by: NeilBrown ---- - Assemble.c | 47 ++++++++++++++++++++++++++--------------------- - 1 file changed, 26 insertions(+), 21 deletions(-) - -diff --git a/Assemble.c b/Assemble.c -index aca28be..cdcdb0f 100644 ---- a/Assemble.c -+++ b/Assemble.c -@@ -366,9 +366,6 @@ static int select_devices(struct mddev_dev *devlist, - tmpdev = NULL; - goto loop; - } else { -- int rv = 0; -- struct mddev_ident *match; -- - content = *contentp; - tst->ss->getinfo_super(tst, content, NULL); - -@@ -377,25 +374,33 @@ static int select_devices(struct mddev_dev *devlist, - report_mismatch ? devname : NULL)) - goto loop; - -- match = conf_match(tst, content, devname, -- report_mismatch ? c->verbose : -1, -- &rv); -- if (!match && rv == 2) -- goto loop; -- if (match && match->devname && -- strcasecmp(match->devname, "") == 0) { -- if (report_mismatch) -- pr_err("%s is a member of an explicitly ignored array\n", -- devname); -- goto loop; -- } -- if (match && !ident_matches(match, content, tst, -- c->homehost, c->update, -- report_mismatch ? devname : NULL)) -- /* Array exists in mdadm.conf but some -- * details don't match, so reject it -+ if (auto_assem) { -+ /* Never auto-assemble things that conflict -+ * with mdadm.conf in some way - */ -- goto loop; -+ struct mddev_ident *match; -+ int rv = 0; -+ -+ match = conf_match(tst, content, devname, -+ report_mismatch ? c->verbose : -1, -+ &rv); -+ if (!match && rv == 2) -+ goto loop; -+ if (match && match->devname && -+ strcasecmp(match->devname, "") == 0) { -+ if (report_mismatch) -+ pr_err("%s is a member of an explicitly ignored array\n", -+ devname); -+ goto loop; -+ } -+ if (match && !ident_matches(match, content, tst, -+ c->homehost, c->update, -+ report_mismatch ? devname : NULL)) -+ /* Array exists in mdadm.conf but some -+ * details don't match, so reject it -+ */ -+ goto loop; -+ } - - /* should be safe to try an exclusive open now, we - * have rejected anything that some other mdadm might --- -1.9.3 - From 0c8b2d994e5756f104f015302dde782596f4d2b5 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 4 Sep 2014 10:59:16 +0200 Subject: [PATCH 120/297] installer: Show name of block device in disk listing --- src/installer/hw.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index a3e5e59ba..3ec4d75e0 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -219,6 +219,7 @@ struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive) { disk->ref = 1; strncpy(disk->path, dev_path, sizeof(disk->path)); + const char* p = disk->path + 5; disk->size = size; @@ -252,15 +253,15 @@ struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive) { if (*disk->vendor && *disk->model) { snprintf(disk->description, sizeof(disk->description), - "%s - %s - %s", size_str, disk->vendor, disk->model); + "%s - %s - %s - %s", size_str, p, disk->vendor, disk->model); } else if (*disk->vendor || *disk->model) { snprintf(disk->description, sizeof(disk->description), - "%s - %s", size_str, (*disk->vendor) ? disk->vendor : disk->model); + "%s - %s - %s", size_str, p, (*disk->vendor) ? disk->vendor : disk->model); } else { snprintf(disk->description, sizeof(disk->description), - "%s - N/A", size_str); + "%s - %s", size_str, p); } *disks++ = disk; From a691d4b370e58e5c83349f36af88b9cea36c0d15 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 4 Sep 2014 10:59:34 +0200 Subject: [PATCH 121/297] installer: Add p suffix to path for mmcblk0 devices, etc. --- src/installer/hw.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 3ec4d75e0..6d3389a6b 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -357,11 +357,26 @@ static unsigned long long hw_boot_size(struct hw_destination* dest) { return MB2BYTES(64); } +static int hw_device_has_p_suffix(const struct hw_destination* dest) { + // All RAID devices have the p suffix. + if (dest->is_raid) + return 1; + + // Devices with a number at the end have the p suffix, too. + // e.g. mmcblk0, cciss0 + unsigned int last_char = strlen(dest->path); + if ((dest->path[last_char] >= '0') && (dest->path[last_char] <= '9')) + return 1; + + return 0; +} + static int hw_calculate_partition_table(struct hw_destination* dest) { char path[DEV_SIZE]; int part_idx = 1; - snprintf(path, sizeof(path), "%s%s", dest->path, (dest->is_raid) ? "p" : ""); + snprintf(path, sizeof(path), "%s%s", dest->path, + hw_device_has_p_suffix(dest) ? "p" : ""); dest->part_boot_idx = 0; // Determine the size of the target block device From 1858753b236cf25f977c7632c3fdbafade82363e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 4 Sep 2014 10:59:49 +0200 Subject: [PATCH 122/297] dracut: Compress initramdisk with XZ --- lfs/linux | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lfs/linux b/lfs/linux index 276215595..501458d19 100644 --- a/lfs/linux +++ b/lfs/linux @@ -294,7 +294,7 @@ ifeq "$(MACHINE_TYPE)" "arm" endif # Create initramfs images - dracut --force --verbose --strip /boot/initramfs-$(KVER)-$(VERSUFIX).img $(KVER)-$(VERSUFIX) + dracut --force --verbose --strip --xz /boot/initramfs-$(KVER)-$(VERSUFIX).img $(KVER)-$(VERSUFIX) ifeq "$(KCFG)" "-kirkwood" cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-kirkwood.img uInit-ipfire-kirkwood From 722b419dea7258a3a3a65857d2ad4f7196ff517e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 4 Sep 2014 11:12:41 +0200 Subject: [PATCH 123/297] initscripts: Mount /var/lock after all other FSes have been mounted. For example /var/lock does not exist, yet when mountkernfs is called. --- config/rootfiles/common/armv5tel/initscripts | 2 ++ config/rootfiles/common/i586/initscripts | 2 ++ lfs/initscripts | 1 + src/initscripts/init.d/mountkernfs | 5 --- src/initscripts/init.d/mounttmpfs | 33 ++++++++++++++++++++ 5 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 src/initscripts/init.d/mounttmpfs diff --git a/config/rootfiles/common/armv5tel/initscripts b/config/rootfiles/common/armv5tel/initscripts index 7a4e41b7d..980441599 100644 --- a/config/rootfiles/common/armv5tel/initscripts +++ b/config/rootfiles/common/armv5tel/initscripts @@ -54,6 +54,7 @@ etc/rc.d/init.d/modules #etc/rc.d/init.d/motion etc/rc.d/init.d/mountfs etc/rc.d/init.d/mountkernfs +etc/rc.d/init.d/mounttmpfs #etc/rc.d/init.d/mpd #etc/rc.d/init.d/mysql #etc/rc.d/init.d/netsnmpd @@ -217,6 +218,7 @@ etc/rc.d/rcsysinit.d/S25partresize etc/rc.d/rcsysinit.d/S30checkfs etc/rc.d/rcsysinit.d/S40mountfs etc/rc.d/rcsysinit.d/S42fsresize +etc/rc.d/rcsysinit.d/S43mounttmpfs etc/rc.d/rcsysinit.d/S45udev_retry etc/rc.d/rcsysinit.d/S50cleanfs etc/rc.d/rcsysinit.d/S60setclock diff --git a/config/rootfiles/common/i586/initscripts b/config/rootfiles/common/i586/initscripts index 529bcc9c0..d0bc8c5c2 100644 --- a/config/rootfiles/common/i586/initscripts +++ b/config/rootfiles/common/i586/initscripts @@ -56,6 +56,7 @@ etc/rc.d/init.d/modules #etc/rc.d/init.d/motion etc/rc.d/init.d/mountfs etc/rc.d/init.d/mountkernfs +etc/rc.d/init.d/mounttmpfs #etc/rc.d/init.d/mpd #etc/rc.d/init.d/mysql #etc/rc.d/init.d/netsnmpd @@ -224,6 +225,7 @@ etc/rc.d/rcsysinit.d/S25partresize etc/rc.d/rcsysinit.d/S30checkfs etc/rc.d/rcsysinit.d/S40mountfs etc/rc.d/rcsysinit.d/S42fsresize +etc/rc.d/rcsysinit.d/S43mounttmpfs etc/rc.d/rcsysinit.d/S45udev_retry etc/rc.d/rcsysinit.d/S50cleanfs etc/rc.d/rcsysinit.d/S60setclock diff --git a/lfs/initscripts b/lfs/initscripts index c5fe54f82..4894710ac 100644 --- a/lfs/initscripts +++ b/lfs/initscripts @@ -166,6 +166,7 @@ $(TARGET) : ln -sf ../init.d/checkfs /etc/rc.d/rcsysinit.d/S30checkfs ln -sf ../init.d/mountfs /etc/rc.d/rcsysinit.d/S40mountfs ln -sf ../init.d/fsresize /etc/rc.d/rcsysinit.d/S42fsresize + ln -sf ../init.d/mounttmpfs /etc/rc.d/rcsysinit.d/S43mounttmpfs ln -sf ../init.d/udev_retry /etc/rc.d/rcsysinit.d/S45udev_retry ln -sf ../init.d/cleanfs /etc/rc.d/rcsysinit.d/S50cleanfs ln -sf ../init.d/setclock /etc/rc.d/rcsysinit.d/S60setclock diff --git a/src/initscripts/init.d/mountkernfs b/src/initscripts/init.d/mountkernfs index 05e8eb67a..f7be82d01 100644 --- a/src/initscripts/init.d/mountkernfs +++ b/src/initscripts/init.d/mountkernfs @@ -34,11 +34,6 @@ case "${1}" in mount -n -t tmpfs -o nosuid,nodev,mode=755,size=8M /run /run || failed=1 fi - if ! mountpoint /var/lock &>/dev/null; then - boot_mesg -n " /var/lock" ${NORMAL} - mount -n -t tmpfs -o nosuid,nodev,size=8M /var/lock /var/lock || failed=1 - fi - boot_mesg "" ${NORMAL} (exit ${failed}) diff --git a/src/initscripts/init.d/mounttmpfs b/src/initscripts/init.d/mounttmpfs new file mode 100644 index 000000000..9ec8c3ad6 --- /dev/null +++ b/src/initscripts/init.d/mounttmpfs @@ -0,0 +1,33 @@ +#!/bin/sh +######################################################################## +# Begin $rc_base/init.d/mounttmpfs +# +# Description : Mount tmpfses +# +######################################################################## + +. /etc/sysconfig/rc +. ${rc_functions} + +case "${1}" in + start) + boot_mesg -n "Mounting ramdisk file systems:" ${INFO} + + if ! mountpoint /var/lock &>/dev/null; then + boot_mesg -n " /var/lock" ${NORMAL} + mount -n -t tmpfs -o nosuid,nodev,size=8M /var/lock /var/lock || failed=1 + fi + + boot_mesg "" ${NORMAL} + + (exit ${failed}) + evaluate_retval + ;; + + *) + echo "Usage: ${0} {start}" + exit 1 + ;; +esac + +# End $rc_base/init.d/mounttmpfs From 61aaa5206fbe4d7ea207e66ef7e6c9ce2a42abcb Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 4 Sep 2014 11:35:03 +0200 Subject: [PATCH 124/297] Add some files that are required by dracut to build the initramfs --- config/rootfiles/common/armv5tel/util-linux | 2 +- config/rootfiles/common/dracut | 4 ++-- config/rootfiles/common/i586/glibc | 2 +- config/rootfiles/common/i586/util-linux | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/rootfiles/common/armv5tel/util-linux b/config/rootfiles/common/armv5tel/util-linux index c75b147c6..0f3640950 100644 --- a/config/rootfiles/common/armv5tel/util-linux +++ b/config/rootfiles/common/armv5tel/util-linux @@ -72,7 +72,7 @@ usr/bin/renice #usr/bin/script #usr/bin/scriptreplay #usr/bin/setarch -#usr/bin/setsid +usr/bin/setsid #usr/bin/setterm #usr/bin/tailf #usr/bin/taskset diff --git a/config/rootfiles/common/dracut b/config/rootfiles/common/dracut index 89c03a729..03379b4d6 100644 --- a/config/rootfiles/common/dracut +++ b/config/rootfiles/common/dracut @@ -2,8 +2,8 @@ etc/dracut.conf etc/dracut.conf.d usr/bin/dracut usr/bin/dracut-catimages -#usr/bin/lsinitrd -#usr/bin/mkinitrd +usr/bin/lsinitrd +usr/bin/mkinitrd usr/lib/dracut #usr/lib/dracut/dracut-functions #usr/lib/dracut/dracut-functions.sh diff --git a/config/rootfiles/common/i586/glibc b/config/rootfiles/common/i586/glibc index b4335a503..31fe5fdaa 100644 --- a/config/rootfiles/common/i586/glibc +++ b/config/rootfiles/common/i586/glibc @@ -52,7 +52,7 @@ usr/bin/getconf usr/bin/getent #usr/bin/iconv usr/bin/ldd -#usr/bin/lddlibc4 +usr/bin/lddlibc4 usr/bin/locale #usr/bin/localedef #usr/bin/mtrace diff --git a/config/rootfiles/common/i586/util-linux b/config/rootfiles/common/i586/util-linux index 6f31cf6a8..34c87f276 100644 --- a/config/rootfiles/common/i586/util-linux +++ b/config/rootfiles/common/i586/util-linux @@ -73,7 +73,7 @@ usr/bin/renice #usr/bin/script #usr/bin/scriptreplay #usr/bin/setarch -#usr/bin/setsid +usr/bin/setsid #usr/bin/setterm #usr/bin/tailf #usr/bin/taskset From 3ef5dd987189b4aadb348debc1dc586210739ab6 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 4 Sep 2014 12:07:10 +0200 Subject: [PATCH 125/297] grub: Add splash image --- config/grub2/default | 1 + config/rootfiles/common/i586/grub | 1 + lfs/grub | 1 + 3 files changed, 3 insertions(+) diff --git a/config/grub2/default b/config/grub2/default index a8b8f7805..c1b78237e 100644 --- a/config/grub2/default +++ b/config/grub2/default @@ -3,3 +3,4 @@ GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_CMDLINE_LINUX="panic=10" GRUB_DISABLE_RECOVERY="true" +GRUB_BACKGROUND="/boot/grub/splash.png" diff --git a/config/rootfiles/common/i586/grub b/config/rootfiles/common/i586/grub index 533014410..d3c48af9f 100644 --- a/config/rootfiles/common/i586/grub +++ b/config/rootfiles/common/i586/grub @@ -1,5 +1,6 @@ #boot/grub boot/grub/grub.cfg +boot/grub/splash.png #etc/bash_completion.d #etc/bash_completion.d/grub etc/default/grub diff --git a/lfs/grub b/lfs/grub index 23f6dd3fd..de525faf8 100644 --- a/lfs/grub +++ b/lfs/grub @@ -89,6 +89,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) -mkdir -pv /boot/grub touch /boot/grub/grub.cfg ln -svf ../boot/grub/grub.cfg /etc/grub2.cfg + install -m 644 $(DIR_SRC)/config/grub2/splash.png /boot/grub/splash.png -mkdir -pv /etc/default install -m 644 $(DIR_SRC)/config/grub2/default /etc/default/grub From ed8977a1a069d9bbb627e6a89994610d35c56979 Mon Sep 17 00:00:00 2001 From: Stefan Schantl Date: Thu, 4 Sep 2014 18:00:02 +0200 Subject: [PATCH 126/297] grub: Add unifont.pf2. We directly generate a grub2 compatible font file from the main unifont font file, by using grub-mkfont. This binary requires fontconfig as build dependency, so I moved it in the build hirachy before the grub package. --- config/rootfiles/common/i586/grub | 2 ++ lfs/grub | 12 +++++++++++- make.sh | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/config/rootfiles/common/i586/grub b/config/rootfiles/common/i586/grub index 533014410..bdb18eb22 100644 --- a/config/rootfiles/common/i586/grub +++ b/config/rootfiles/common/i586/grub @@ -1,5 +1,6 @@ #boot/grub boot/grub/grub.cfg +boot/grub/unifont.pf2 #etc/bash_completion.d #etc/bash_completion.d/grub etc/default/grub @@ -16,6 +17,7 @@ usr/bin/grub-editenv usr/bin/grub-fstest usr/bin/grub-kbdcomp usr/bin/grub-menulst2cfg +usr/bin/grub-mkfont usr/bin/grub-mkimage usr/bin/grub-mklayout usr/bin/grub-mkpasswd-pbkdf2 diff --git a/lfs/grub b/lfs/grub index 23f6dd3fd..d04036a48 100644 --- a/lfs/grub +++ b/lfs/grub @@ -40,11 +40,14 @@ CXXFLAGS = # Top-level Rules ############################################################################### -objects = $(DL_FILE) +objects = $(DL_FILE) \ + unifont-7.0.03.pcf.gz $(DL_FILE) = $(DL_FROM)/$(DL_FILE) +unifont-7.0.03.pcf.gz = $(DL_FROM)/unifont-7.0.03.pcf.gz $(DL_FILE)_MD5 = a1043102fbc7bcedbf53e7ee3d17ab91 +unifont-7.0.03.pcf.gz_MD5 = f6903ac8c1caeeb30c1e9a2975028401 install : $(TARGET) @@ -96,5 +99,12 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) # Disable hardening. paxctl -mpes /usr/sbin/grub-bios-setup /usr/sbin/grub-probe + # We don't need to install unifont just to generate a grub2 compatible + # font archive for the graphical boot menu. The following command only + # converts Latin-1, Latin Extended A+B, Arrows, Box and Block characters. + /usr/bin/grub-mkfont --output /boot/grub/unifont.pf2 \ + --range=0x0000-0x0241,0x2190-0x21FF,0x2500-0x259f \ + $(DIR_DL)/unifont-7.0.03.pcf.gz + @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/make.sh b/make.sh index 7b75b87c2..8a2ecc6e1 100755 --- a/make.sh +++ b/make.sh @@ -401,6 +401,7 @@ buildipfire() { ipfiremake dracut ipfiremake lvm2 ipfiremake multipath-tools + ipfiremake freetype ipfiremake grub case "${TARGET_ARCH}" in @@ -488,7 +489,6 @@ buildipfire() { ipfiremake libpng ipfiremake libtiff ipfiremake libart - ipfiremake freetype ipfiremake gd ipfiremake popt ipfiremake pcre From e4d62bc2abce106cf8d1407c6067646fdb0a8d5d Mon Sep 17 00:00:00 2001 From: Stefan Schantl Date: Thu, 4 Sep 2014 18:12:23 +0200 Subject: [PATCH 127/297] grub: Use unifont as default. Fixes #10601. --- config/grub2/default | 1 + 1 file changed, 1 insertion(+) diff --git a/config/grub2/default b/config/grub2/default index c1b78237e..39eed0fb5 100644 --- a/config/grub2/default +++ b/config/grub2/default @@ -4,3 +4,4 @@ GRUB_DEFAULT=saved GRUB_CMDLINE_LINUX="panic=10" GRUB_DISABLE_RECOVERY="true" GRUB_BACKGROUND="/boot/grub/splash.png" +GRUB_FONT="/boot/grub/unifont.pf2" From 126d3570843be7dc68c779435e0148fc36eb26cb Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 4 Sep 2014 20:10:24 +0200 Subject: [PATCH 128/297] installer: Fix off-by-one error in number search --- src/installer/hw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index 6d3389a6b..ba7fda267 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -364,7 +364,7 @@ static int hw_device_has_p_suffix(const struct hw_destination* dest) { // Devices with a number at the end have the p suffix, too. // e.g. mmcblk0, cciss0 - unsigned int last_char = strlen(dest->path); + unsigned int last_char = strlen(dest->path) - 1; if ((dest->path[last_char] >= '0') && (dest->path[last_char] <= '9')) return 1; From 5be66d81b94352ca230320336002b2c93a46c2d5 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 4 Sep 2014 20:10:55 +0200 Subject: [PATCH 129/297] installer: use sysinfo() for memory detection --- src/installer/hw.c | 21 ++++++--------------- src/installer/main.c | 1 + 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index ba7fda267..e453e23cb 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -502,23 +503,13 @@ struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks } unsigned long long hw_memory() { - FILE* handle = NULL; - char line[STRING_SIZE]; + struct sysinfo si; - unsigned long long memory = 0; + int r = sysinfo(&si); + if (r < 0) + return 0; - /* Calculate amount of memory in machine */ - if ((handle = fopen("/proc/meminfo", "r"))) { - while (fgets(line, sizeof(line), handle)) { - if (!sscanf (line, "MemTotal: %llu kB", &memory)) { - memory = 0; - } - } - - fclose(handle); - } - - return memory * 1024; + return si.totalram; } static int hw_zero_out_device(const char* path, int bytes) { diff --git a/src/installer/main.c b/src/installer/main.c index d9dd75c2c..1f7ec2b4b 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -494,6 +494,7 @@ int main(int argc, char *argv[]) { fprintf(flog, " swap : %s (%lluMB)\n", destination->part_swap, BYTES2MB(destination->size_swap)); fprintf(flog, " root : %s (%lluMB)\n", destination->part_root, BYTES2MB(destination->size_root)); fprintf(flog, " data : %s (%lluMB)\n", destination->part_data, BYTES2MB(destination->size_data)); + fprintf(flog, "Memory : %lluMB\n", BYTES2MB(hw_memory())); // Warn the user if there is not enough space to create a swap partition if (!unattended && !*destination->part_swap) { From 0a325292d78c23239a52eb85ca39db343d7db115 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 5 Sep 2014 14:38:52 +0200 Subject: [PATCH 130/297] dracut: Always start mdraids --- lfs/dracut | 1 + .../dracut-038-always-enable-mdraid.patch | 55 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/patches/dracut-038-always-enable-mdraid.patch diff --git a/lfs/dracut b/lfs/dracut index ec5ff8f33..fef3ad77d 100644 --- a/lfs/dracut +++ b/lfs/dracut @@ -70,6 +70,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dracut-038-always-enable-mdraid.patch cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install sbindir=/sbin sysconfdir=/etc diff --git a/src/patches/dracut-038-always-enable-mdraid.patch b/src/patches/dracut-038-always-enable-mdraid.patch new file mode 100644 index 000000000..a65e59a8a --- /dev/null +++ b/src/patches/dracut-038-always-enable-mdraid.patch @@ -0,0 +1,55 @@ +diff --git a/modules.d/90mdraid/parse-md.sh b/modules.d/90mdraid/parse-md.sh +index dd7bda2..7bc944c 100755 +--- a/modules.d/90mdraid/parse-md.sh ++++ b/modules.d/90mdraid/parse-md.sh +@@ -4,32 +4,26 @@ + + MD_UUID=$(getargs rd.md.uuid -d rd_MD_UUID=) + +-if ( ! [ -n "$MD_UUID" ] && ! getargbool 0 rd.auto ) || ! getargbool 1 rd.md -d -n rd_NO_MD; then +- info "rd.md=0: removing MD RAID activation" +- udevproperty rd_NO_MD=1 +-else +- # rewrite the md rules to only process the specified raid array +- if [ -n "$MD_UUID" ]; then +- for f in /etc/udev/rules.d/65-md-incremental*.rules; do +- [ -e "$f" ] || continue +- while read line; do +- if [ "${line%%UUID CHECK}" != "$line" ]; then +- printf 'IMPORT{program}="/sbin/mdadm --examine --export $tempnode"\n' +- for uuid in $MD_UUID; do +- printf 'ENV{MD_UUID}=="%s", GOTO="md_uuid_ok"\n' $uuid +- done; +- printf 'GOTO="md_end"\n' +- printf 'LABEL="md_uuid_ok"\n' +- else +- echo "$line" +- fi +- done < "${f}" > "${f}.new" +- mv "${f}.new" "$f" +- done +- fi ++# rewrite the md rules to only process the specified raid array ++if [ -n "$MD_UUID" ]; then ++ for f in /etc/udev/rules.d/65-md-incremental*.rules; do ++ [ -e "$f" ] || continue ++ while read line; do ++ if [ "${line%%UUID CHECK}" != "$line" ]; then ++ printf 'IMPORT{program}="/sbin/mdadm --examine --export $tempnode"\n' ++ for uuid in $MD_UUID; do ++ printf 'ENV{MD_UUID}=="%s", GOTO="md_uuid_ok"\n' $uuid ++ done; ++ printf 'GOTO="md_end"\n' ++ printf 'LABEL="md_uuid_ok"\n' ++ else ++ echo "$line" ++ fi ++ done < "${f}" > "${f}.new" ++ mv "${f}.new" "$f" ++ done + fi + +- + if [ -e /etc/mdadm.conf ] && getargbool 1 rd.md.conf -d -n rd_NO_MDADMCONF; then + udevproperty rd_MDADMCONF=1 + rm -f -- $hookdir/pre-pivot/*mdraid-cleanup.sh From f43f57f29fbdb54e3a3dad29786b68da872478d6 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 6 Sep 2014 17:05:34 +0200 Subject: [PATCH 131/297] kernel: update to 3.10.54. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index 1b1acafcf..9c4ccec7d 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.53 +VER = 3.10.54 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.53-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.54-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 1bb2dfbc4b5813056bbb8f7f7fec3882 +$(DL_FILE)_MD5 = 4120a4fb0e85784f8e7f310cecc41290 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = 4aaba741f250480fad4db7b1d5cef6a4 +$(GRS_PATCHES)_MD5 = 76ee852810da08295841dce28fb6ce47 install : $(TARGET) From 1aa031ab2a34c735428d03e0ecf6e953c25243e7 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 6 Sep 2014 17:15:05 +0200 Subject: [PATCH 132/297] grub2: add splashimage. --- config/grub2/splash.png | Bin 0 -> 143193 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 config/grub2/splash.png diff --git a/config/grub2/splash.png b/config/grub2/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..045fff82f2a6d26fbc563de73057902a71f1cf15 GIT binary patch literal 143193 zcmYIu1yGc2|Mk5AES=IwiJ*d%baxA)bS)tuwIH3lOQ)b1G%E(El!Acd(u#DKv~)@> zu)BP|@B2LeZ+3R?nQLZe?)lYqe&?Jdle;?96zmiL08s1cYMKH77zF^J1sLhy6RDxu zmA?;CCj%W#;PO8oOjB{@-xG3QT`T{;|CspC7o;wf8}j#%EI`jli)@Y@N-is8@QB(1 z0C)gBO|=Ih)7wp3VJo_iuX(J}>wc-1vW}eJy}#F9@aCSeU6yLy9&KrQeZ@Fxjh&acwk7l3D%fdvpPyi2<+ytPHCJ~Y;@`?`QuW@TVLDvz= z;1^o^N1m-a7Of-m(1A<){UZbszXQ3a0^6*@C^NpJaDl`^50zw_T0qRVD%c4Lt|pRM z^fer%pfF&XDhLQ;4Un;{A~s56M=>5^IA;d2gS0BT(r9aHQ}QX;2hGqTZZ}1XWEEGE zx3ITBDWE47lovg6s$%*+9a$sGMhI`dTTv0dyu9*o{(a=m1yb$_vEk3f$;{~KNUsXZ z2u?UiLxHN>M^^dPZsC;+!OME2dBoX3{43<0S(TgiQTJz6q#E(#c&S3_ZkFTu$a|Ni zw3muT-QjJQEe;yUn$2_3*8jx-@epudbr)kc5At25toZnvOI3l2fwFNoK8Wl|!|T~A zrb%xYOws04?-=wUy1tUCT#12|j*NhmDvXTb1%_cf;-L=|7Gr{O#dI#W1FV{`7eMTF zF=$9Eh{=RX2uP7DnE|fDnB-;aqXY+3kAqQf_u76vCcPio5Ega+C7^h4PNRIBM*VZk z`>}jR3p@U}8$>K+djOJ(xf+!}>Bv=G+wgja^w(lKM9f1Y;%qOM^m{H)!A5)}{0ofw zn?&ocn~^bU{$lRh4iRI8{_)h!SuzeC1cRa7qs|D)=f4J}NrKg8IO{S{6uh0a;b3zH zua~kH-IhtAbRS6*F*&cFiV2y(im){P81p<%esX?QTo4s1yRCzV55;Q9nI~bXM?tD! zwWJVPC=@|bLfq6J3?zwu?>2ZsK^4^lyc@wYDEYC$fXWg_+Ru}7DOjZ{o{Z1PO(a>(`ck<*#*bU zUFp_-&Y}@6%_&McHEQ#ok0+15w?=}4tE3hFwhEo}`F(Sx)piU3MiYx$gV0%OGHN$a zZE#F&pwT_x4#W_um9J@VGBA&Y^9_xsodjKRgLc*~U*wByP6$u&tDabZTNAu^=161a zXIJ@w8@TedW|DITT%T&+o$14&Cx`@^mmw-uNOCa2+O*}vB%w>47IBu_bwZ6eZK&Y! zZO&i;Y`=Q^r-hoyj*V1~#w)5&<5bpM9Sf*iM~dX^B@q%0b;P8wO;U%Stfikj|8M%S|uMUBVvmr8QOe+Z= zUcu2ANKrLZ!)-l}r9){dSaNo#0sO5VZ~-38w7rLi%zkb+f5JsBr!ae`Kx@k;;qtrm z)g1!_f%HPAHfl!PRWqGS)}E=`&Tp3bBIR{covJ1TwyA85^^irkyW7Gda_qIMI_i`T+inz&#yM^=^ck(iMqp0@177-f1>5r=pG@nT}XZ5)_I`y z8F{eRoe~&SxfAtfQ3RgCEY@6(U+|1L-K=kRQdTC7rUc5Z|5Gx-Paw<4`&31-Lu^+Q zQ&gv~f|H%#Qr}r1k1%&CnNXXmAHgWpgSQ@NsNvX51ptljie^~ovu;deuJVhOhHzk7 z4a0JCuq+T7jnMc3C>RB!7)9Sww^0W=)jlSE%Xlk>;%;?<;G2fd-{GZDn@Dg6L13bb z1ZE${EwXw#4c&Yq+K+p5jNosjzkjhY)?UvF8X4HL-jT!4CosmhqgnWftPH3T-ql;QV z@3&i*MA6m;%h@k&DT|{V8mS{1g^tSIPffskG(7%KDpOPf)V&1xG91XlUghTa-7`MX zKHQuBcLM$@KLMRk@%$<$@f~~^V8DExgA9{|4n~j|9Gh2Gxo@W2q`wK@;i((|a?(Lh zNNjmqH$!tL;&|v}9tW98*l|AYh;XVj5yJ*Wx6tD{WrRtK39R1BCOCCLS$EKw2Lh@Cmq=JyCW3J&S> zq)~_{7tRxPxs?TrIUwubLOrF%htNlN9Dek@;_F`t1=n2^-RdMA=?1ZeP3zR4AW-Z3 z4+5`OW-Ve~XW@cI3E()25%3Kx2$G5cmxW$Tfbo4vtctJ;myDK9g)0YE>S4W!OyJx! zwsr=Q`J9l`0iAb*pSBdQ*1r*P!{ zqNczF)R-L#VmUUwq7WJAJ#a%tZjJrH{}rp5gP))#YuQ3IUbXk<*O&~Y?CO1h$r!ld zFe+mE__oQN)j#;pw1mzUZ_@J+w%8>^q5fbRmW7PlX2?FfyF+@7I`0}>@mJFkcef-+|)$RGAzSn^g zNM%Ws0|`=cKNsMcOWflC2JJzu3!r~fPKnF6#D zu)K1S0u*61pZx_h9g<;`wuw*ui*_$JSZB{ zpcv)_S*k{ko>gI!8}a55w<~sNpq}EBy9JSSF^OtwgR?=}Lj6ZvpGEsXiKK_!%>H&F zK`%1VRqWgRyvEYZ1hM1|0KIss(@2hwg6#)`qFf#J9zR2h&_#3-Np5*&O{uV;kDwVW z3fU^PujomFV@)l`!o2eO{gD=9h$6M+_8LTVGY!y58%7!(|17L)hTy`jcFPEJcb&3!-#Gc~^&w3dOe(QJVX&u<7&QK#K)8oab~~=3XJ2 zysrUB$L;du0p2MDyvq;4JwNv|B^0a??=I}cejnh;$a^pg+9dm)j%XzgMHDJvI)MKl z)e2QDOromZBN}f8VYolDiBpCH11BfSTtk7?-yW=l8lQ#LOF=%VK1+KP;7Yy=DG3L% z6i`_g8XOop@6zS>j=XQ?lBF3Y$uctKSSGcw8%6|nXS}@wgWF7P(oN935%+7eAWWLJh|Av{3-hD_zFbUX?_ljq*V>8 ziE>-rV_yrFyPD}zPKdZsT3A8?Sp0>*f3MYw1#BM4_N6<&e0j_>7yr?WX`2zK7-P}G^1NR^1?##~$=36SVJl4!rb^~GvBO5=XxyD(!zB|jITSi(3 z-1j)(CJa>axJ-r?zWWV@q%q-E>=94Q7P?k51i)7Rz(o$Gr8KGf80O)oR}FuLflLso za~G}McSkV_O}hZ61c(a3a36*Z88pMnXYr&z$qnLbPDv$TvIK`Z{UtTDmoCg|F4K-F z@DJ}4c3yjP*FQzEcAYyKtD->5>Sf1{Xn=K;**>vrB8iBl?)@<@iYFHR{>0M25-xxX zDRq>~R`Ev>7;&HaVfw5Qr}IDkzq8W1_X89#JF5SoaqHuJ?8>JF(Q7RE$&$MCx-c=Q zsv}G~wQ{wBpG`87v#dTHpo#A5;#`2n=iP4P8+{GlnQFd2zNdF~@rESI_CaNK%xob7 z7H)mtpvwQBQJ3fF$R zeVc47cL#oB-5Y*#5C?yq?jlX#9-T!#24VlRss3GZY~Tp6@rt`b*q8Vad0pW4Yqhr> zThZ^xr=OGviBD+zd$P2}3B-Xfz>{un^#Qb%br2^XwoEB6LNocbGBV_G81>RoHyd55^jwZJ$7?&6pi6BUfy&;kH z8ago=>aH#e4OpNcHphbx5A&v4zFiR}DZoq2wBET4z5;Y-)X)5joyKHP3){8K>2W|x z>e(m#O1iHM?&xDws-*FXJO{II7DBmbmN{vN;uL3!svplfJ-7|5C1Uu-n z8{CY#O#+l%s@XA*^dJ8bt^9dW{KBYVTk-`}g(BGxDxTj9gCiEQl=k|l`m9jAJ@dW@ zPZmZLJx{eQk5lNE7HwY}IH%$%*W;$`A~q*Mii42-q0gdz>4Dyc9nJTmtjTY^cAkZ; zNLBtjLj$eg4Rt&-sjNK)^k6MjP%`jtxCQ!|RRJbE#`0UaP)ik#N#altfozQ1kye4g!)g{D1H}jAm+3Joh9NI9*E?aJ&Fw+J2}6*~ z7#2x+!nl|=NjDXW|A;=C0Y*tJbJbq23eR^?T&H``T{JCGA!pMq+gX`^uaHpAW~dy( z=LXUmL>E5C%~ny*ZZAFGq59bKe?hir#rWbj^}vd}`n)duZz=QzTy9N%#Q12IMO!CY zLv3zg&Xd)O`6vJ(%!T9{q7G^m8 z8%aE?9iA4Yk~`f(p2Oruug!n7M@o>$$lL}l`JWVb`X%Jl(>g?nQo5(pTe*?lpJZGR zwfVs8RhWGoxzqbPf5(2C6Mv9U{_{RxB9$}ZLzEJqbsJC*bMGaQuM+-A_P-6LEG+S& z|K#ScU?WbbIR-j-i-U9BOdfZO25N9{Qjt-@N5`N1ZRyotnB}~?mm=CDn|IGicr@sX zyxxAd`@u&_r4E$(K1)4023zLfD(&t;AS6;OoHZ6!`8APvQDc4F3x~;uXf;*XHzm;y zVpQxP9hrEQ4sbzhVIV38s!NMVP{v8}S*5FbD4oAr6zjfo{cnM~C?b`QBRcM|G}UQrIzi zrDgD&uMYtB>!~l|b>P;9DZvnGaA1&9`U4anC>72>J`ytEj_?q2JB_ZnMfKh*{ZZ!lzhb5$IL6jHk3rjV=DU6>d^zAv9u>Dln5jemOBC z%WoM0=HtfA|GP*(*K~bkOYsu^=u#bV>z;CCde--ya z>0MgU9w^FcjNFCNk1AKqoN4yI#F6ze_As5MB({G^@7PMEHpH*8);rq!me7kjZ<4@2 z1V+Z^Eb2KJ6BKiqeO!uC&H&-e)`mjmv5&BI%hTnpi{C{wj8BB;J>Vog70{GGQkWB5 zfHQI_kMkg=2I;oo@`}sA5!Tu2$6|fW1mW{CZD8)C2GDR7XUv+5#uE|@*~)NHp&dd% zHnYn1TuR;>ocjU0!T@}_Hbb<3cbTwq?eOQuMTqgdXn;c299Y?wQ= z$*sC%k(E=(b@uS54EN7UByXZA)D%@OcVUr&nT?o3%p?yG%v!sm!(hqe9;LmmD9t>! zWl9l=s5fOdR#7AyGv>ktdFUI)r91-GEmvL>^Ex)(l0P*0&i>{j3F4HEf4LQu5Vk!WilL+;-R*{Z)yk5AA{!u%P zz2@ko?3M`n!myH5NhzWkf1G>`xB0$Tx@da!n^C`v5zTdS#r3{JmotfhD<`=xB5WrS zFxeflWv~!n^4?RQ8S+00teFyjp#Rct+$2ceS^w(A4eXp@^${80>yp@7WQywWGQvOn zm54R=_p0`Q46H_@(a4Mbg4x?n2z^~uGLaz+=kN9CaW6SEwm#7Hx}>w^^@j-Z8qc3h zbO`!FlbA_keqz>$-rYj#fd-?40H)Ye`!6-wA&!NOBD>7;AWUEm*`u;*Y`}wm_;$8pduspCjppp%5K%zXrs?5bz>jp8 z#9-ZfL;2D@<}9=BX~uD3-G8U`F)RMSX#W%^CvWh*FcqG&G#A@`PV#hZYulk8AZ2Z& zH>JEuQfqEv<0n=Ge$=n4My@b>nBD*q|I`J+I##x4t4YUF$Vx1mKbSUzD&1*?RQsx*%(C;a$>o0+LDYs!;af1dN zKwQ{yuvaTIYRi~i%fX6HuV(>1lKXepe_3HQ!yi#Q2g&CnYSE0EGqXL^_jFLg7O|8) zt9t^BFs~OG9zrh$r9Y#X3lAR^&u4*FvUVE2AeTQQSDzWe^?cXO#m?L&d*yi^q>k_Z z+cUhlT)zc~ovX09Py17mUObB%cqaitc3~Y}bEKQDvK^%X53dgI!z9RIvG6q*4nH;8^(WqLdvAD!GtN{a&fZMM2-(2?|#(6-71$54%K+*A>D zBmFRHm=pi#!0rIWK#BCUUs87kzTfZB={lEdNbHx_f9S^h?){@s+ZHOW)Pmb5_WxXJ zHy7v+yAM_Dkx}(#Sd{2#(vtm@L>Ou}ti{nVc+o67XL1 zk~XbhUP?U|ogfPv%`!8HagwSH+z?bCY)#J8s|rO|9dqzy{P}r}Sb`dwJ=f@JoJlXh zACzoYr{8s)>g>)SDThiIl5HPGF20#m=I8;zbAgwU^NYa(m9cL2)8F2*yu~el0exlA zdE5FtS8aE@Ib&S0#ggM*K=mp5H4SqY(ZL7o+M4J<$-gP$Mk}D^%C+tA0U{)^jns^x zjuL~`|AUEhT#4li>4LP?rKZqYQ-Ia}#IdlI9Qyuv=QJ8CbDxo@_iN>r$&ScG-Y>p; z-{)L!b+Tb8TI1maAv!t%umxKcQWm%qGOQ!H;M?xjHVf{8NwUOWtE|eBF?gRY!K#)F zQ8R}ipwaiafz4pjca_Pr2S7yBIV+5z5YpEpwS#T08h{5_w| zP?+1`B?AmFLmn@TOoCLUHGVT8VR7gA*9waScKk{|n zJ78`;xDHM}7Pj|%>g`2aZs15pd}j#XTNPP57bfEL@SYs1V#ta4&@Y%)HoAW#56b<; z6$R-Sm3lbur5Z3QrWFKA6qQx>x+9Kexhkl(U^RS}v$r_GeA%LJ(>9?}pg0Bw^r=Q( zEt!jHK{@m-yug}Y;go8XXDp*AyRc?a8Zfmt&F)m{rmC2g$TVSymH4tJC8KN3RT zn`IYx(JKAH9C@^oUR$okg0d9zqgAe8ie8V1ThVA4uLk`l!KN{0exDD%`Chsb>g!LM zk)dINKwVY+)o0VB@L5W&fkV2Fw+kL7n3FED>P!jWL`q73elB>D{$}j20;ouWYv?=` zSt3WY0$rBq%`LRf*P$y8{{t9vayZG<(ZAeXu}kWRKTzNiC-xxi4lGf7z%xG_E8k}) z0K>Ddhp$M=LWX_h2`u91yvYJ9z_e|}0*w1i_Z7$uY183d?B`gbDqwJ;8XvGyz7qg( zH((Z9BZ^s$`3;xVhThY;uwYm*i_TSx@-vq}^WGAq{Z@rrcG!~7fATrv_efs390B~i zrE_Hd1`z` zaPZrc+M$|P1mV~_l)&K=G-iU1x)GB%mFG?mqoxZLCKHNie{>Ju=k_=@uSkSvN;FOg z(Y4bBWa%_oeZ1Z0M#MM|I?M?C4w84*hsl8--Uq{0OC6Hru(S}mBB$Pugq5ZACkERA zf)Yvte#gEjDNh#Wzk*zNDDEg1yEjc*V1@O0Q^X2R&BfeNEo8FcuckL63A3H9zlI`B zR!u(3TcH0S#%sHwEK?;4FO=(m0`F>3Zu=H8erAtdw2EI{oB7>%9a8eocx`aK4BHA$ zZKL*NdW+t!)DN9bu0rO!OTb9dsMp-a)&KPZI8k-Firr>33ICZKE8Dl;vYAK>n+e-lBtg5q7M_=Yk^kJ3N+fNKn%2 z-97#$n&h0Bx})Fj2q{Q>oSTYyWOqEZ20~sx=st~BBe2862M4+_^*b)H~}A-BE^GI(z}q&C|`Zfi|mta|D;v*jDIqm|4N|XJKG0%mkWa)ohE(J z%cTk#x6;u`(3@5f!Dl3#rU|vv^(>-uLrs6o56#sWKAyAx#M7hvlcStZFLIS87;tC3 zFEHj#Gl_!cWU)_a+A?-rdo;mHKVB0pCm%J}-G3-=Vi9X?iN1z|yb-k!Kf9pjU_BEc zmO*`mQ^(yUQrr%@V-uqAe@BPEpV4pL$)ndl1C9-Oh%0L_>~5V4L8)%{Hs;S2j;tzF zT;eD0nj88x$qnre$Tb(j7-|8JXL+J zOjZJnDelQIsNTs`88yOOaK2ocO;7C}FSCs%DJ?ihGpv~c%5QXAQ|w% zDMe~_<5oU6$Xe>V>mW1WTiZ&^fAE8T=Q@AV`p`LYKx4#z|1{<^227DxF z_m??%5&5nE8C*)N9UVvFO8cbzLgM_jV_`+Z?xgvsBC8S(!S=7vl_IWLE!DNf&$2IiD)I|l~^A_d9x);f9-=VH*=i&ypYnU~HMW$2`J9_2cswscJ zWvtsjxoyxNDOZ)CTku^D`-k#xS(^}CJv5`A7nC9xQnMFa!Fip$9fTPiny$qwow;<5i3<}^o~FuLO5BS!ta5G0#gkcps4=g)0>|n zp++5_pR>EJ=ziuU(nC|12UQrC+QP4>u-UVaQ@g1^Phmo z!FlS}o_WS6UN-HWOy|RMk<|Ff(=ui?dYNo#fZdSvY9iYu&$JSoie!CN_F9jwoi3fF z#D!VoLjza`7$-34&9HIxs=+F}>q@I#>vR{$hC=E3fXsIja0)9A=V26g8%$np?hgOt z3|21pOfpGj8@#%V99Er5<=4{i_HFft`&QOEzZ_n2gLu>{7g}}g)jv?D_j)?wmF4A_ z{2ID`t4Gxr1b%_(=yj0NjYG~e)w5K$n>dl0G5@VJPX80rbm%O$XOizaP$W!$1l+MzHbM0Hk>Dk3wfnx2Sx=Ih&VUU*8(?5y8S?*XwJSv_!Vy zIh70x6*%{3#VKF11(SrWZ{cJ(DkO#JzyF7xXwvz9>T!aA@q_UKVtk*? zlGx<($o_1!uf$$UoY;1H@JbZcfuFj2DCkQc=DK*~r&<$fLnRN3{Sq-j?BKH zsn8qI4&Qw#3c)`u@4Dh>K^gPIc7OJ6RLag4&;AZ!o!*}p zuWRNxap!Z zP(mlc1~Q0xlI$*roRg>hAY^1$8YJ^rfEX4+^#)ECFRZQO=l#*BjTU zaz3RJgaxWf7^#ZFAN2Q>q+%o?A(}b8??@B}%x_=W|8H6ihFPUi<}S5wil%l!wAkwG8({sUHENxa%+vY8&r#p{iGE+AUTf|msF#1; z6jGm+CX0LrmDH0-d{2GRoH;u+X(c@J=)_n&{y;l@6J(1_3M7YlJNXxo_2QT z8T=EgPUqhe32aT5!UOlR+!Y2T$?U>wP+a&&lH5KcYDfvbqw6>1aa8;5&;=r(5ccqL z)!a8)HEv+}Gg}DEMCn-LT4^|RFwK$A=(*CigF3-;)o|e~a;jD7P+MS)fXkVxa)kpA z1#bU1tmlFed6GiLH^bt*ZA$#PV&htFK zF4B4N>#aeO7s0mf#$mY@3^?A{tDJ|(()*uIA>Foc3gw4l?-4&nIo1z;srtM~-i57M%x?&V$ins`|>#%EeYtbKA39Os8v~ zP}0b;Ay%Ydh*Cc`@jTNnzrXZq9GB|H%G%7P<5cA@Lk2_s_4gI3{>&AY<)Z<13|C&XDl<(kP`9jq_Y3Hue;xxe*`f%hZFOEgc89OOIYT^#?o zsDH`L5=tR#5c7_(S-_|#ucg=&?G%Jv>4LFHTViI6Z5M$m!iRbH2zPDO?4{U zHxzY>B3d|ao+L47zeCkM0mmSFG zqPfapo2{7s7#_CsW&r*_SuG49>&qUyv_eRDv}>%Z=uIB68rRWuX~-pfGd=_=c<~k9 z9zCUNfn{Wr`TWf01L2r7M%qIB<5c$2Ipa3>THL)Am(RSpAvx+-25f#MvQM>qJ?FcP z8Ng|sj&MX#rg`{F>JL=`h-jCdG zwY?gPGm0(ayQrPj?fG9e*ct`?lEP@V-a|*lgi?GMv(?XPa0RiK z6MtI^(>HTsHj87+{giO8^ZwoIX32Y14y;`3L){E_Co)p;aHGW+YysfZ`Fhsz|B0MU zxBjI6T_{w!8ulSvP;>fG)5e+aR*PH0mRmm8$JL64Y}(UD+Yq}3ji=`E7%1s%S<|=J zg9}>RUz6$5p{42LInfbjR2aX9fCo%fvyrQpFQa*`*q6UR_ln@-D3K?PN=}!fW*^y} zvc$v+3~N2xkR&(zQ<fC@P#n2ihIh}mNt7>@OME;&&~hYzolj}CPdstp6!~+fa1`fLkn@Lmv*B$U zL3w3%>er*0b9hqJ5seLYXt3}KRCx!-cC z-g5#6;oV&SIBtT!Lur_OtC93=w7mCHI)oRF_JCwILn`GZrue$n(oma8yj*U~`cA95 z!ldp1{-GOWX6T&H)nf3}`u?Be7^Obq!xXAtx)wJ%@n*(EA+t&|r%(N{MY6hY!9{-T zIgt6?2G=9uh3v5~=$+wbnv1ZoFSpesWXQpVAz^dq6*xh*^JC)|P8fgkQHM_}pKw#;GBe6@*f^JU22r@D`gJnKp@)?BGuKk!Sv&BQ==nJnZN3 zN1zLSN%w(UYce~rfQez|(cm0ukoM2kXMVUL(5mZT9)EM!#qmonMOUB7@NwtQiB->V z1C_}2arW2vzL46RT+o;LzWjApMwiBA-sxIs56qYylgRV;Fc=1Sy=K{$nR)DD^NMBs zuG7^FpwP>SsQsn$lkH6581dc3b<+J2I^;E6IA}WsB#Mf>b|izKw6WZ*>}rH(KU0J5 za(v1--gy_bfAV~q00=^6K$Y>NlWK6@dma8r%8eSq==e`S?B*%2NUzW(m|X4|ub(VRbz-e^B~)oDq9# zM5%tVq{yiRbkSCdqM|@Y{I4%nQ2Bp1V|mOotgR{VEC2OZ?aFUvPqNXj5TTmZwtnGF zn>F7_0V7Mp;z;8RHlCNQF7;_?5T#g0c`(%`mpixJwqt@CG1!udKmzt)JbQ(3yagP|kT5O}T!ei`u~Nob@p45Y|xB;{q0cdyD- zh_h@qZ?DkpG-RrxTsY!VpSOp!@N5QZ znv$YYz)8pKdV)BQfSQ=sIgN1^xR#0@f#^>GvS;@>SYi$|@@}DP#qYh3$)?FEcE%^c zTC4yGP%+fNoph#&@JST)i~1yc@N&RP?UyJ|J(wLe_YrxU>QeQT;tmuqZw*}iy(IZ0(cmNNQRzO8&ai>XWH!ngED z>2dJF-9vQV=wdNI_pepSR~ubTr{MxbvcXMUEZYMz7`na|Ebxlm%NSm+c(&+4%H+@S z>c$68cn+Ks@s6t01yYwJ{+*daJ!9ka7z%Z$a$L(+Ik6qHCO21`0>05Ve%lN-SP16d zG%~sKq=6z?k5$>N|G>r2`@U~}!M(!l{D{fnqf_3IYra2#4L~eB<*}=;8z8sb&dp4# zY)WMBr&wTaOXu&n8Z3{y7;qo+VVtI0;t0N>gqs^i23m_{mV!D}RgY zYTXl!9Nwf3O6C1s&BcDlyZ*14)9Hs$Vpw}vL~27eL$5u_wiZu|rHg@cNl0c;b8>MT zDyKO1SuFwyb=-iCn4a3Z;hmrv-C!*JI`HK;==;>+4NkcyBI_yyL}(Y^s#C_PT0eg|eQC z!A2D^p6x1RYr#VfR>xx}QBs0}ql0W}Veav_9;naDor7O5YHKc}hwti~(rxjmz0Mc5 zaMhoklTZ64EnqnxvB&RjBoIKm*Cs9O`KJ!^+Lg#uXt!7iH-+r_IrD1dsehXle~0=l zVU11EGO++r-u5q2j2!TM^uNY9x43?OJH#cCLh>>gr9!VJGW??T2l%}fl`EcJ$v$Sm zoZ_VDb0sW?{iYJ%&$+Awew0m_P+LDSo6UosX&}pgflNI|(ph;~<*SBwKSOgyZq<^E z*MDO0pz!z>$328*=$~&b=PRUx@90RPu2Phe`MLD_k)B)U&~5!@<(O04?eF4wjJjx3 zr2eyZK;932W_5nS+>C!359aPA2DWPVUy@wB+H`1woCmA77=Ga9GWjN^T|^*1WNu2z z)v`I5e^riu@)Ru*xv@XfKp}khtbQU(o<{W*c7Q<9H0DKbvBopbs8Y&y#2wp=BYoR@ z_=&gNBd9qvJ60en%`nx!xPND?q_y&T4v_{bNSWOabS?kOo1)b6vcI@M{ad%gQfXj* z;F!qPuUk$xN|;ouQ}phT?R)o>(jSG)8jJ$mw18>h z{IjHrrs4O$WcQLwqQEDiK4XHot;5Gq8jc!KQ9v1Tp8f#TZiXcS7b?M^2@aiz-2X15ckpMaLm^*cEjhu<(d3GoKvdDZ0H<>E1HsWiB&U!Axd3)omupB@82fy;aXbvJ(g`8j?HtWU3{Kl zNqiUArNghSS4zr`XV-u2hS!npK;9`4;&eB$fWBBtd8qVtB7WJji`+>4*x#OY6*SUJ>-|h$3_Zw!i2;rb3nYu-P zw@9v12~`yl9XbC1_@DSE&T_v#D={$X0oJJ@o6wZdLus$Pc&j_@OaC-Xn49YU+sb@k z1Wv9UJ}K*E|IF_V8J%h*9ZfDU3w5QCLYKJZNwdP|^v8az#_|;CZ=}Y(kCx8*I&;0Q z_PhSEwuF1^9gJgjueQuf=O_*=-3wGBMfjYgEoC|JAAnE2=^<@!kKCmZQ$>!tj^Yy>iQ{OJ=RU*##)oIZbfKn1~^HQL85Y?%Aa+q^|vigEUj zzt}K}>#zQ;E;wXvCgtY*!1oiFGiO*A%XE{Mbm#+hYTntG{-{by6{i#9u5E`VYUWB( zh^3D*#8SG;NuIAc0$pQaA72T7ho#YM=_F1y4jXf9*$>^HWf5e;c1KAds*p%mn!#pu zuFI$Md%X@HUHym@3kkn4!K5LN>Hf0J5KilunR+;w`MZts z-FnrjHgDzV?eWgp>oI8n-2M*AO~9(k}yu`n@+0HfD~L?Q25X9~zE7F7%q zSvs{pQJb6SPhzve&)9lNI9!WEHRwwCN)GJxzF?`+n8$AiO|Y zyUCf}DrC}@;aWDfB1Yt=ocaX~&xr-lR)N+Ck0GI|%p3}hJQ01~P_OXDRkZy5Sbjh8 zD`2Zrom@qO<-4$W`2J@bPY#OE5F_c+Py8(F-NzvGsmhTtFhZ#gKsV1ze=TRkgK$e- z{dE`0Q{r|UVs7VcS3fYhNt$iERFO_nS-meK9##D7*&Q@93!T(fa>#K1QgJViCiBq^ zqRc(0`@^rO|M-+Qxj?O!tfFNOd93m9i?$QZ>*=cWYpp!5yUaAC(!CFl@4;PhzK~s` zCbLhOn@=^U9)A*;Zu>^Zo>Q+soKqCb_j|)ULU)dH`wArIEx_|;+pC19U8QWMS#uoG zPyEr>B5~p!9<->_L_bre8V!1WCz9FEd4Bc~D$!E_bDZjG=r7)|P)?*AYrnBKA(mB6 z|LGJKI>j+VgiORY8J$ddwjGEsEHAIEjf;Nyl{*(ornu-#=3D4`IW3k{!%vmp*UA0k zk9wEY{_O@y1mQFYa;Y@kGG$d-K z{NZG?0+wls%G!27)z>~wa-%B=bGvYE{ z^VJ*LoqacHyp=6jRfke5;f<_k*kY;&T}v!Q>3lR`j}@ZN*jURHv8>hv#9~Zx<408d ztJkXX8dEkwB3`QMz#pTUw2A|^2A;0llJ3q=FK^~lwT9Wdb#H^<7wq4cExtGFEWOm3 z+4Cy4E69D&qQvJdv;K>O(N6V%VO%u4I*FFU9!;?>zT^^iRm?Pvt0zF9lA{u|b9Z0z z^_Z3H#_ zu8%x=>kUR!5e%&BuR+`!c?_g2*QAWKGf45_Zh)_;L94?JbP90OX!mZ zjWjz3-!H*=e!lwqasAdB4Zz21lQW6@X8UonJ^x5-EsE>ms+@u6?kCUyT9qSuY@WDV zmY4y~;<*(T!^^H#$=l1Ogl1}Wgiw2H)jL_ZtCh%QzJKpdh1ET@b%Yh%!@M`~Ea9P{ z7>vmM_;iq7wP$&b>RqyEl+3_MnXzUlgO_o1F~>cXkc(PnEh0i-MbCu7B&RMgm43Lf z%!n&Un%$~`OK~dhL|!Yv4^YXqZjy{n?yi>0m7CO#iW~WQuAiGx$bYLb zJ0oIUql`s+u-{?s{2ipJ9c^_=XlN(=*)7LCGystl%hlJei=Qwn(({PT6eUzey_|5C z2&X6ShM#(U5%7q>UwtGK%Nm@eR>no2R>EjQzOo=RT$blY^H})+dQ|gs;Ql7eou5d< z!rckH*R0GeY|m(9eGAhUf6g(uOMR^EKFRep&Am13A3wz&9jw_2lBB04`&mDemdCxH zqRYcU)$%PvR-28Hm}P$zTjgif4@%FBuIuYbs2edo0QLDMLK-QOn7=HranRfsN*Zp< zdH>q2DLMw^@-*`}r3%S#BKq|FsXxkCwaoXjW$9bXEX2f+(yKtgQzLG64b&j26WvBu z@|W0Xbh%Hzotf8vY+|W#mACFkWys_FGi&C`DYo?kL!PLwk=`R(!;%SZ^WOGNl!A15 zZ~<@I>8wHxc7Z)#?b4K6A+E;!7tEX3xoIg}7C-V#l_kV-`)%B1;lsA%j+QL8Ir!%m394xL0J7{4V(JhEU}N+R{s+{}w%HhAz4H4!w8>8+*#j zKtEFTr}Ux&te@y)VN?_wSCK{3WF2nrpZFX_=f2F!MF1p5quE)#x+2QmI=n6^q0N0S zT8@(@3!o2EYWDI{8xj9{0gOz1qOCPRwoP{0m20%cbRBF3-#yJ(;sPFEn7?&@*5yV- zkbbO`mvYpw+Zlr2uut-NZOA>?`6AZU?WKqkX<#*Kr&YDkZuQg^Opl`&k#72aTlH&g zsGF&2_u*g8CSzRvtNe{eQ&eHTsFEPWmRJW3;hI;ZW3f<5V`VlYlv z&^(_BMg5Mh{#)n02J#-G?zABWbm@Q8@Qb#X3Au_p5z3wYkF^=(Xx%X1;ecqWUXoUA z&c)}4Dw*`Tj+`@Xcfucvx44Y)P;fHAn50U?-k~1Mmcos5^!i@Z2@qa5-@OMMx&Q4> z5o66V@zY@bo+_1B@V{PmCbUUj8fC1%Q+Qj;lSdSsR}l^=7fN4|PbD*$u@mtyLF;E! zbXi$0Po8WIio3Nk>~C~xyIh@CczC=B<=hEp#S%lO*kZ45;r<^{ZxvR@)-{cy3wKz! zySux)2Z!M965QS0-8B$k;qLAh+=2xO5Zr(E_wIepbzk*-y5|_9YE)JFX{+LFSTr_c z>Y{z70JTgh-!O(wSul?w$+>+g$S1WKa{gjJlso(FSovTp7@MHhiB zQst16>%aB$l>rDv5s+PG(w#DtN_=}G)5ui6T-9O5nl>wL+}}2zcT%ej6YN6$fRUW7 zlIYLh?ULFW8vIk#P3|>3T*+_m3WomK1oi%5!R77gO5ERaDM1`YlY-4+5ML)mikRc(| zBq+UezuJ7~#M36O6#v0)0%sM;j-G4zd=3r^HRHBggU8%hBXd}Ne`qTh*+N^=92XT%OB8 zjZ}3=uP$6S_ytX3=hM#M^nVa)(ESz9_u>$C+@}`73&`W+(pg9)Rx1o#?dfn21K(bw zFj`Osi&S#R<7P6t6&(wpq!OMU+HU*4yTOxNCu#)|{tj16JFr(pP)M?4G^J1op#>$l z0wwsFpnB&RGaT$2y#s`zh%sz}Zs4=_(JCaUxwA9^`;37L+=A&BO}DDzChi1%y# z%~^#q+OsTO%sGW$#J$*3%PZwp|FlST{8t#jUkr$loK|pqF<6JtFf4m$*nxb%!JM1o zVH#5=eIg_!v!`MCt)_O+z$OSbsa2N1Q=sySkrbiAkaAF0PJ+=iDx(n;Aex**X1TZY zA5{yWH(ZB$1rbg`IYJNVPFR)-p{SA4eUx+XEzBCd)X?SY?P;FIA2X+h(mV&KpW24p z0gWm`YZ&=EH*i-FtdUKXx|d0T(uE-?<>Z%{`NHxfPu7gNZO7~s?Xxc#1v)Q!6VAnicz+>SEl~t;#z3q3JwWQ9rEx1&U&=r#PyWw;sVaQbv71I0yijGSaK!r#x%SS>C?7vP$vOl$2%zAWD?GJw1pE%cl9e@dnX*guDmqWk{~_-asubw(j$e~Q{%Q|d_EX)RPjQGl0YF) zWBV@IT>v5e?_r=@*m#Q{0{!5{r1doW|v`u0TdxIERyki}Q+rpBCo`yYg{_l~8iPHc;&9S$C-IC|ZR#4;_a zA#Z2tE{?b#-{x3#msVEwl6c6x8Q&hCkL|2{8vV~119Hx-`4AWYLXfY*#|RR97l-+- zDll62;~U8>q{2obh`JD|VJL+(g^GD-^8L~YJ0OQ41y@N{<2ehXquc7y2FkVt3siFf zY*50q4On&1o`wwN7Zdzx(V~_w&@hbDY@vAUu&Fo189OAaRxmJ?&5%T{*gF@< z1-Mfv;!Z#?9hNX7?o@{WkG@q=-#Cf_BVx(`M+7o&Q%_BZ>frUj`zDt;<-qz$a9mK3bzZ_}IXB~c<% zBuDMt@Ux-hzWpgSMG)@wt%3+G$5(Hi?T0b=5}l9Y*^qJ@A*xwO{(1~ca6ERISUzH7 zkfpw&8zWgQ@Mww+7)Uw6DnP`SjNCi59cp4|S7_GkJQ$vrqd_u?EIH`gPl}ez)Z@O6 z{|ONw!)d8a3N?&Nu^{?AdlQz5lV&{TP|e9;Zl1P%ihV@`)kmNNd-G&U4iCBSY4F;7_Z|vIS`G+P^^s zpWE+0o?Sm?m9|EZa?cd@hU{TFo)~cp{z2Z&OVm4noxSxEpH)70mpDr2d&Vzf#8n06-H557vk>J=NCAu!#NgfI7~7p{JS1 zqGxrcN>rarre%V|&$6qKo#IjzrSG%gDYQ!Bx8s-%N~_meTL6ssft{s<^tVInR~N#D zKkNvZ@O}ilsseVs% zJx4KGlV^2N*=hG@`23ZM<%VonHMpHNM52YB+NUl!2|{K{UNeIpn-+P~`MT!pCeYz0 z`G>U82g?a{PHY8vd~Ma}LsdUrxZ&59eDUj35{1!MV|eP!UUd@Qnl;37Xm79uFu~U+ zGl*{O!w`~LFyct2yOp&Y%z{0OSzED5JBpA=<>dme??Ot3wJHD<05{( zGSJ8rp7uBQ_IOIJL0pi7xjrZ@D8{IHil&wjqbB3l_8w$I-B*ziXcuDx(Qcp(t{`EI zz~$U!ANZhA^-8}2s13&Hg26{zUN%Y^erE{@T)n2vc&i*ju1t196Y%Wr><^zCvy`IH zd(bEh&!*z{Ujkf?syW_13wl1R+!gK6_%_?QVV#{7Uwz<2tc|N&)S@NIFU&Aficthn zM^>@EL(oF2q1~jdji5Mvl^bd*Y6UG4tFZ%XaSlTI^AZ1kQu65@VcULGi9SJF_)}&y z=B$$WI^y}fR@YgBQ^#R<1SW9B+BspA@FWqfJ~7b0fI340QyYDP#qo)cIw)YA5){+I zC{bqv*>~y9dNXYgC9Pi6ANVuhnMcmQZhmp1Rw01;8`JvgH^dQJ6h;m|Cj}Avo(_TP z{$s4G%BZbgodOuES_Mi(Ik&)DZ^VPVh?x=wV8TX^v%m9f3#ST zali=%M;M{g-3)f3g3C!%e;z_!wG8p!OXWaoOBJ9FP^dM`!!gvfd^*)6O~SV|t5-!Y zaGha-pZLg*?f2mz2ua0IiJ$L~82Z2pAQqsFMlZ+XhT9m|r51eey3;dW@6h_nmS?gq zjDS<*5kh#%>c7Q27r15lL1D><0_`#D(_*l->%+~WE-iLfEB*SuSBOCPS|mKfRePwg zUv?2N5Xk2*osg;5wWu?H{5xX+W)8l?9u<+tU*1`+heNv$k3E^yGv{6`Kl&Hd?_yIb zl~@|qgf`v2{}~9>Bw6%UDBWW(&MKS-U&+cBuDO2MBa2s2WTTZ>cyp?04c72=pZwKN zFjfVtvb4qyZiX>tkqEz}IDoIB!tH1*=X^z$^k6#=Z-zhk{K@SiL+MTdbgN}p`wEoK zcOJ<8wC}IdrtG=JWOj0i7+Hp)TXA^84^6JVqb=oIvK5FL?)PJkPkfkOPG=vCB{Os@ zUv^vc424s+{yDWtCc~UTIQ|g6GN!>)8?$r?U&Ne&T}#u+(ttA~YZyAR&`Lw8{yDXY z22KL14rfPFm+8y6x*DF+|I<+7Ju@D)WZqGiD3`xJ$s}V%700{2GQM&45}O;lQzvG(S2sy279z0LUEl@Ww>MqxUtz^Jngjr7~1I^AYg+_lLHoLO%=_p2+eC~ zg0-#a+ScB+FPnH-7cW`wEmH=*NSM(`7qy}YmruiRp;m$qkhwzUHRAaSF=l~O!jECd>~DfRl})EX z?C{a^Ac|c&YNy9Lbkd2rzLPstZMz} zLoS1MV;h`sd?TLBp)c1=j#XO@0}%29-F#Zm(}uC(erH*=PBx+yc+JN?KVraQ!`tqvLRK z3G~Z-ZtibU8Mbx<6OkP^+`%zRC^x}&m&m^2IWmWnneAm>2>DBOIOYd<+GZI27#+SQ zZ(B9hCs1Z&EoYGgR?lRz+|3gqrzm|m@TcTU)bC%Cjxrp;gZ=zG+GZhy`c?@m=@j45 z1b$Zd5vq-SWnX`#bdjSl=O{l5W>cyf-f!U)WtmZI4?K%TFATUV$ztA)K{^1&sMNq2 zQJFu4W2M0{VlFO|*c7j^2C6n1yQtr1#s)H`sSeA-#Fn$^w3WN=gp&67%k*mD2$Cxl zIm#;!x41wiv>5FY-JIu4YC^l7Jh*XD(AA4;uTnCMd9_tLjk_kD2xPYJ*#)0Q;*wByky-XeF zvyO`&h$W!yaE&;rl{1e{PN$N>aYij+8*W z#_eA$z8F2zoq!=KfD9c_Ow{jBISN{*Vl-adt{&!E7)YO0TFDzm>JD|viZpg-EK%ZE z7QX&rHehM(&&Cr=SLpryyQTXw@|>2Q)|?^YPM*3Hq_BRsDkWop{Ly=!?*Y!i*xcec z1*Jq%A4CN6r`+{1M^WxLUDWQ2E0tDhl(vbfh2HLnd+9S&X%Q(H+)E+Q>N}S?gEC@q z^#>+)sL0(LH{F)fJbjqYU|rgEUIH@3^hy7wzXgk>A^#@6OXUn=yc}M)BvUOV0eeus zbyp@9B0@UtI60IEk@)Dq5dXQ}cJTRTaX2F9D<1U^83K}Gt~fp!*U_oNtoYcemX z3Z4QhaOqitm^v`0+Rp<%b2S2=2DW#D0~vr7<1}s4`-0&Qc1Z-+sF_cxFT^gTD^QYK zjz5svq`9h>($nZM&cg5r(AV*;jmtMJkX=^?BfWy7tjusmgV(@_FN=ryaJ(b6Tk%A` zKc5#gw_GK^fy!vzreeyJSJ661!s+HVpoXd%?9VnwI5EzFx7)uC(s?K3jU%9~sQ5d- zbj16EDAObYn6K_!Vrk1z z$cBqp5q20AKeq*!ejyP@@ZHdCyj+`9U7{VWTCtP;wr4FE>Wq80IB*5o;X)gF(e1Ov z$f`^5_2&=XximGxaNJwA3X+z{UgBj^_+dK5LJ3nk&N|IegX>Q633bXEd-PCd1XGe8 z?%x>c)aMpaEO#Uk+gR^r~VW zJ2LeUNKS%Ha;D3`n=LdJl1=m}7SxopHIj5QPun#=m&T5k7o(-WRrnk? zG`}6yeJRE6pf3Cw-BY`2PkG12>Z6&a&&~zQW#RH8HsX|VeLhjufRm8X*#4%(7?%P~ z-7>~Y_cF4RF+TdzCj~6cS%?C?d~M%dMmFaVVR6P0l)oV9Ei<|3FlD^ya2=q=U}3w( zWDOnoc_FXpehh#cI!QC+sO^;kclXBT$t`M*R_t;{^@4j#ezFJxgMA~T1j6$7Y{RJv zE@ODeO`0Qxm9(v?c3LhbMxFkegX)cFo zF5hT02soAzG0B7M!xFT`sa#RJxQiHZ`7|2@fK!9$#2*v4?wGi$OG22{OEo3<6XMRK59H=M;V%ggX zAS#U0qh~D!Cu#!zcaN}(232gEA)T;F))r4Mt(f5rXk}Xbi7)uOD6$iQW~}>|tnCTl zLs&!f-568@+4dj54-H-N^Q0D(&d>yuF0vlw=q}UTY#xLJ-JmJ=(;1@|z zBiKAVclF)~7Wgf@F>~SO(ytb-Pe5{Xpg;;Im%l3FbY=Bvb#-iX*d@ro*rfw>#$=EX z4)Wh{x9M@W;j5V>xAp80{sMCFG1VTb)8QYF^b)fJg#96}!b!t)MPBh|hL4regfUbT z^|nO(<`y7UQ(8^L$wSkQ(}FKMi|NO1#NBrh8Q)Jq6}CNAk{BLJM0aq?UK(NKVj4@L z!HwQ}N{y>Xu_#iA2BvCZI$}LU7BOlFTbxWy!RKS|Zr8It8SfrH?+qr*PV#a~3C7XfF#OBf< zDL3MBdE-|m?c$u!t4{)_(UFNZ1&a)kCrhV9Ty{Q?Yc-r5wQ;Y|lfX9p+|1h~yO$F@ z%^#i601f&5=2tlq4x&LL9IC9%LV7t3vSfWFD4t`5Z)(IgFMpC6LdsX1o@{Ri9o=yf zs|HI>e+A8kQuty{K5P)ok>1_(Kwps7qEaPx6RwKlR8+P~jQOM=s{`1=r1qBS1hPgj zvR}Nm1K#*f?V#AcC$hjPAo6ed-Uw;C@8(2tb2a!=P3taFLuvi@9g{ZeRQ?kFbm{;^W{ef{l0sb(Duh*$Xb)<~az@rs3f5D66`<12Y>BZ)rxdki$C8#fa zb6sEeEC&WvhSGv5=dXvGiWTp$fPr0!)l;z$y{6=NnQ5;u`2#dw$$=eY zhTyH>!nefkW%{zht7PVSl#H~_TRzks#iPO&`kXc34nUT2z-5N(lw-$cs39bfugTh{4PWKv9n zsehM^3FL2Y5|H5LRO0He-k8<%8l)pF*62a<*aj>U;H)yX8zZXESxSOw}AG!*jTY zQY~=q!;YlKC2nN-_QilewAY9(L$wWp&LPAEV&jeX%|ZGPyhi93JkQB(h(COPQwYzw zRp1Yh8HFAqFu!9eu%#kV;mU`NvoPIlzf+phl2a@Z=D(>OXrGWG9S~hA^WH(&gd{q< z%wzT|KwYR26!l-NO(9eD=1UYK5lk5eifAolw6E-X*eJ}n6mOWQ}PyyYE(;z;uP1{wYg6>|K7*}^z=|O&1HzGjo^n;y# zGdAy68_@4E=C`}J{R;D!<;4}p^0lJAbT(qW%R@J2DPgLZe3`FFO%Q$m^wYHgzaJgH z8Umd);;L2IT^L#{gjRpVNF!0sNwRFYMaO;{aQb?1wWzH_E_ zrCd8YdE1jJ7)c)S4&xEo2}v$?Edj|1dBCGm}VqJ3kk7XQfoBNeVsmOKWWhLv4Cc03*;EkHGq*& za$QE$_G}?AFGjqSRvPFU6xkv@kJuW^fzN(Z2 z7Y<}HGDS_M#OG3CWPBzv={TcImCQ6ttTxfOPtY0KTUqj-WeiQ1V1eR?8DtBzTTMTu zZ&$xIvgQ1)k^o*J^Z}_^gyjcFC%B}V3l_YC3NJa+77IsTlVn9e(kHe5%`}05*9A@j zqZL3M1Uv>s^-KV6>E6drHoaQO!EphYwjsgGX+VCRIf^GF5u=xA2Pd;ILi2Y`QdzKO zyAleMo)S7I@e3nMJ_M83w$tS42deliAuy&b6jzTZdv{@Uu;`Q+87 zva@zTN$tox(IbS4Yw=J_&G1INS~@z_f%kotbs% zr_k+JOFR%uTvur}LoKq=Z*^M9*X^~BkIm9bhq=E_MQqG`1L6L{h+fK~Z8EL)YV?Zw zf}|5HEog$EVaF$H#n99mI0$dy%pazPQw<82NR1%Wr?fN0Q6Od^Mu#S3!B-U|VI%Ph zs78GF&uDD`!7PZY0Bb4C**kl9-Tte~za4e~DGo=>YD4A=e#q|{hu5HNRn`S@ z*T4pJMnQ1KOyZ29-Cm-_)HwRnch;Ua}BxCqv zJWj^sF{T*I`K10BV-2>nu*uM#r&96XSGNRp%g0EAs8DrY%S^Lyp|YV7D)FS|(dO)u z_!;=Z6tpl^rDd?RAaXR+)_3<4SThHZGlEevZ-vNDM7w8zNBbLJq$w!BNKs$~=-yZ}Ol<=YcxYGYF;e)H zVP{N92KXTVht#cs^+JoXGak*Hdrf-O%eA00?40kFkBjOk0`JYFSXHjM>ghd%_XJmA zwwH#`hXvFjjldxYE2Z?Bn}gNCM6XF7q6#s1Ek1yZ9Lq;AJdnaRIIPmQ1d7*s*t?go zt4u`3mGa!DOY99ev45;jZH$=6B{oPP2mWOsu3kv?bYc3Yc3_-!-97FcVFfX`9m zw)#3zb8n#YW+TO>qMTPM{x(tqMhtHL&2xyrnog!nU2$ol6vt^{*Zp(O|-r zEP?xtq>N~4quU`~O~gAEZ4r`;aKKm%7Y>FZAs<SlqOOyxKAq!I@Ctjk`4{xSSnwm93^WOQHfgh+k*C>4KR;^#ghAU&!v= z9I{tipQ;rWA>F#6OLxjF&UCm@FQ5`HJs0{G(Evu44(NL90!6V1C&Z^l;SZZ6a`cMI!Z%z5{V!0Btt(!dcR`m%( zOZOqr7-47rW&yF|56*+p#v_p`DJaYt2nQS}jjbsjaQ%3b%_+=b7RXJ_2wTO!$`;+F zvGy6?)fyu~jj+;!qn5D-!qhV%&atP!6q0v6{!Jj*xLsO?`QJEb=&Q);IIp3V=4-w`b;6s55wc;3C|&(n!0H=+1Nl^ZKUrF`J(5d73ndk9~yw{FN`^un2) zRVZZYMCt41_3Hv4pR3r z5p`wNGw@(T`!5b)1M;`+9OIQMrKOAxjsw7|pI&F~T&MRB(%Sy@{$Rx#0D!do4CW2f zI0&j8EHt=AlcIlg{<+l4*bJ?O{o}tHXAJ2z>oSFHodr!QuHj_-bKd(Vf?U?Q= zE8*0mPB+PNL`imo3pau)G|R!*AO4=fW6#zl+Fvs6TmZZ}Lf(MSaW9YG`XAF6v)MH7 zRlHM?WrcR6*QXc?IQylKSD5zm{mF)l)JuqE+55Ed08t8{B8+T3|3Att13H-kOb%So zP8*kvP^lL~;+YH5Uo3~~8CHiz2)HKNw=6kh`?J;tXm!PN_;~m|Q9K;raN9R_%%;$3 zMaWXy{6%CaJ`)h;CCW%BLVZ3ACNj5Dl2v{cCgvul$|$2}0~VBL_&j8Be!w)*x%`C- zvpTD8ZQp2@wP{~cymf|guQxh?go4*bKJ;C@E%jm$BOCSlubRRAO^FE9fpnY)5LGW^ z?7K=K_f`T;P;c%XJM9Kg#gj1jGojZWuOC)+g8_4~ck6yzYAnQjwB%*xFt#js)ga~u z!C2Zdt_hI&(g-on8*fnduNFt|+#Uh*kE<5XMJ0|H6gA)S^A*lNdaxz1RhK*g-q1P7 z^kKIL1YV7!T!h)&b9ZwW4Kq5zw1S+xXO@l5caGbhIa=_gL}|hMQZqt1xV*i|U2j{M zy%-=`5M>-gVpm?EKCeU7O(M>L>JW2`VRu0JoQ3LJ5`y|Uv`X&OxH8UQ*2LH99!rZv z*}+YBUAT0<^&!_ILwyfJktC$Fc^wg{DLxAOV!?C4pSjPlZx>)6c@yBJg?wbcYD50; znRH)5wol0L841Tx$YRPOx+iQ+|E5_u=csvFEr!l?HDIrLcDDEw)tpNWu=5F(NfULN z^tigZjmLz0*>z(5i`@esnODOk9h)Q<%fY~H3N=(U7$^%MB?@h~8Mxpi%3F-HO6et9hsxm54-zsVQSgaAQ# z$AD6vD9q;}u;4VEp6<;XeBzNu#y1-CNT*0ZWXYyPA`qBIEF3>(Fy*61Y~aCVTml&h zEoPphD3YgL(`C_Rk+soEiMq@QHZ<%cm_k$8p8w|OVwgD1ZZ)k@6Ms5dpJqCWh4bi##I>Yvbp1QE&0-)jiFHy9TC!Tc05lT9)WuU;gE*gx z?LT8GmJ`oyj6?;3jQ2^1`eBGW>=6hSR@=BtdEVGW%=3bb2E7`u_;cPLp6m|&yCjT*Cbz<2-Q>sF3KUboec z*Nbc2s{t)$Hw=Zi8ezFdUr=Mbx?uM*8|4YvJz1_wY>a$fI~bfsujfo|W^;meCH`82 z4NSa%0#LeUpq`bc^QMU`X_fm5@bB1kzG+YCCJ{jCa@kzlmzpe5$Qbej{DoS(mFX4r z5ES4Qe?ii8SMj}{jRpm!-!Bn>{H-B5BYF)lEoOn5O#8wZSM0^udB7@i7X}-hXTFv= z7x>%sy1ia3sC8;&zkCaY-iHTy=1yE#BKEXNFgt$DAZ4T0EY-7Ho~S8vO9;@$K$CoO zh$tZ;ja;BOma;l2`KIZSo$&%DqFqs{Sgi+Z#Bnb-nwnA~vOiBR&TAjPV%GK;v!C3-;(JS5hKo$ z>YOvpn<-U{Ryx@ukcLIH4cTFq*AuFPw_SGtCjHp;1$nn*oUJ@bW!%&JX#dV{A8jdT z0eCf{>fsbFbIO@Ss?81MXy$GEBV~3gpxUv$p*#MGPt)bz8gIv%@f+aGW6plQYj^_q z7r?0ZaGOFzX<9W}`tX^r&>sv60EeQ+&v2W%XAFpi_Hl3Y6N0++x1W4yB`78KRrGn? zlTU1eipUKfgeIX-lv+%&M;c!g|30Kp7&lVmvRi8`%fm)5Bh$$anI_Q)8Oc&P zdIslkn<*zHC90SxlqoH{ngEkb(c&_)m1Aqe>Eg>xi6e?k`kL8;aB(o&kRQK)Ju?rd8O-1-P946bc@fOb;m8nwrZJ>j5;v*q1@ID6qRJXKp)uCf>M%v=4 zZ(Br|VZN}4>tYNYnAbCm>%$>ukWZ$`L>8%@q2a!;bH1r>rWPM2e}1glX#=@SmBJ~D zMvC=PL}m4b0swvyX+#%XSLex1{HEtzGTX)GDCP<2+iN|IqQ8R_n|!&qkDAXb*_Ns? zuH+H!FJ=1aQ!4j4@-IRxW{A(za+LReiq;5Wc3lR z3749QZh7D;!b{FESfMc$2!_;+atYoN{yjjPxnFXC+`?@>tMB?$EDQb?uMKG$K4JMC zd_kXSW|>Ii%8_$``!P0k&*?Z)vdWjF4C51EyK<=x{wRJaEp+X*Pa+UaER@ZzUmpk% z6Ov_}_e@o|0imB4t)9SpqSN6vllrsMH(=lj|pK{e%i`iQC|Hb46biq zceebQzf34HOJ4G;J3d@H*!jJ%xjEK#GXwikSUmbok37cvzitETT~FI~^_GCwJwHV|pvM93n^}42BdfBiAID>a-h?tab+9;-6?{VIm zSYfxS9sCO{;{l@xN&f`x9EFFG3gdolKZz-tqS%*=itGf~)IYR>#aN((i2FP~{M}Wx zz_^q$Bln5n&UBTJOS#c>>SV0LbMN;}ktnnJ83S^I9m%Wcf);0xw94PRFY8x^jFk&$ zIR5HrU}RpXA%k1V>O%+eOVWPH2V9vpy1Lyf3moTAT#)~V(tx0XaXy)SHeEG_G*C($fP0~)z9&PN z#Ex6ZF00?8smpF*utJw&z1PA{y+Gy?)P%QdT}?rN@ikC?`ZL#f2XuV3I%T03`jB>s z!Is^IcUUl$9fc#>JG5-Unb7Am|Bwgs>xCxhIhGs>=2*c+$7aF<2mi4+~gENb)fr}-PO5jYY&gCR; zIW|v}FV-B-C^6)Q4F3*w@3=OdHaxcA2+Z`Qdjx%kXZY>>9madau=Ym8UO14zGFOla zXt4wd4?gdM0t_OA1S6O-duAkwRxVV26Fg?c2*e`0MCeXE$*y*dnao`N1QQm5oO_@h z9TPW7{PiT`1qKUWJ6(ri%LHDMtyMS+U4GIgPZKjpK1ZU+o?|>tZbYd&}!IfO!XH|PQ@99>gp8`QN{AK)GJt()2_m57PisB`q0(RACy`iwnbp{P-Gt!<)} z>V)q*AH5kFI6=Bee970B;^h~dE6`p22M!KLyvgBq%nLbNRjp_rM;5z$Oqn{l?D1!| zkgE$>HKBK-NjVq>0m$>FRI3(gR||X%rbpN=J(I!`&-qaBJ7qk`9eYa_Mc9_ZUF%7 zW2;u_8zOpsjsoKIgeW zi5*ay88bA@!ikTqT#(p7#7Jo8)1)``md5CYZ?pCoT+ll6Dto+(l7UuJCet?NnwmFd zwRKM3H>+3gpOtb>X?{&G{Lza+|IJLB{-DNot zY36Ji(7#1yhSWX$+1!<9ydM5CYQ%j9UOTjr(40Jw*H=4`rK~5~<;@cQ2hy+Y3+H^N zTu;n{8TPRmW&=8Wu>^0H9E_?7(kQf{Azx$wRG~*zWm8R&B{4G;{5>LS6AF@f!*2+v zs5Rto@Fndt#P~+#Iv>$C4svIaG57G2UAt^hOtAN9x?Kgy+jWX}5^@%ARo^DQE~vp> z9XFbQpsH|rTVGdJ-UY7*bb@wvPUKB4=_@j7jU(Iofb87AgSVIyfub2((&~J(7isYn z`?ZF?E$(ViF+-kVWaDGQZ=8plyP8S!tNQ0{0e%P?GHZo6Y8dHxXiJeSsi!U63sL}G ztA~FP#^x1taYh|p$BP+;#lq!&f@n>c$Z9nEa-b2VFT@6$6?Hlb!R&jMUudn5430}R z;=64_fczDA^WRUVW%`+t!H@$EcwX?SlZYhoQx5QoN<+Tj8xwT*kN@MYy`~Dv;n(`z z&?S1aq9ek`aHz9~4`g0EM#QkO{Zh!#+6VvoUTzq_xZ+eur=wz>lBYIh9?ePq+hXq= zcS;tD6+5bwW7Z|Qy_`pRv{>OojhOj$^E0|8$EmHe!bVb;!ZgZLinH{P4e$MBky+WE z;p4ylR4*7Zt6_HOJ&vM31k)Wwl*cCCwN%T0kzF5-XM2$cbSo4XOpQ7Ms_>Y z8U^E^1D{#g&dlFk5NHL69E#i7Y3J;%WHRthR#NUiEfrEz>D{Efi&^MisI~M_esp2! z8zecNPLVGQ*dSY22rE&&z8Z54ef@WKvDCe64#IBliw+ZvJ%&iol~q$=ua=_$`t`_6 zgC~8taf3`EFXRT%p2loC8ht1Q8J!J8^-wRpa$G$G@=v@TC`@3)+@f%MxgRMHgF6hT z&4={e@8>qHv6ctl;(xcpVVVv3eMSh@ShQfeqJEtvy!dI+82*EpaeETHYS|m{e#QOr z>VTm5vfHQ=UW3Nc z=g+9Ei5cd2c-;Qe<^o~?l7^S^tLPBm-yJktN}hP__C;+TPD}7kvr4-5X*x<*pja+i z>N!HXY+D%vSh_%uzdt&v0G2;P7-aw!5knr1&}42|we02}N?ruH@a!~JIE}8m&d#pB zj+q-D`B_gdK#pLuT?4u-ag_%P4RlH2LEs#%z|qtXmDKR9MP2g98 zpJc{=36Q>mGNZl~C}LnMwSy81d?jHC%jINe`t;P~ESFSewfGOVSHI@6ZWGQq$EGli z4eKX;p-_t5C#38jG3BSSGyiuT)RC=(HNbfk6NwrPAAe#;yw;8(<%siB*z< z%JcvOcROPpO_ewP- z)%g?qs$Hc)ggf-T&+RM3MXOb-GgzknlPx9(V_$(8On^7U`w&%cdoS6P!P$>@Xq(Y& zNIu^FNP8}oatbu+4a(h&tc^B`J9k!-N?OVboatU+GV&6fGIe348Tu-`&Kmjc?f3I@ zBgZd;CHsw2@#p=B@Xnf=$F05pRr9=Q?ZU>gZ}O%PoSA*%wFjxH8mTKb!8Q(P61Ltg7n zN%_m3fE+@B_R=FHU9L*c7p;^E@1-T<^m(UbO$@swnYb%JJ>yjPPo3Tmh#p~i$IKOA zx>x>}^3bF(76~W~M-=MGNGuoF7=3WF89=m{nhTp0?)VmvSL^mU(9ZjLQgHChR)w@3 zYA3D#w87;76*cRaM@~NWzk=Q2&v>24S+QPd{(-4hj(Ebq`oDsc$~ykjYIw!(4-LcmQt}) z7g8tPiF9`wobB`d_VZ_GuaJv~GVHL_ixec|LcG2h8j!!{8R*}4B{FO|yH855A59)F zY5nzhPm0-2yU5H6VyGK@CEc3@zLSD>eLth~;n`(g=5(d)?+{lir{iB>gobROH; z+PY1}R5zhaKJ$9W6EqeY)dreil9~Sxcl)zEM3UPSYJj?bVNd`aYWzKQ=3`(9LsVq| z58#5_+YuQnelTX&0p4!70eHv6v~_`iAoj}59opw2H?&=qcSTI*GL(`1#pZvTwI zeI3VIdD1U949+i5eaV}B3A-8;HHwfErCbmsdq@KdxF=f4$r5JIvt<25_(q%sI=(DR ziyFyUKhu^as*xQl%y>Zr)04c~<|{H%;Dqacy8uBiFFt?%{3+iUWKps8LxqYSgL>_#E4lRH%9*}h zd=NDFsVYZ$tRQC%9TH&A<+O$_#0Q?0`(9o-IL@L=N>33rWv|g1raCsB)txKVwwnA$ zip%nNv%A}zK=70tyZ)5gj1klU?LG@CvqkXyXUEaj;0K=Gl1M5}zoLSOl_u2S8&9%2 zjLj0JP~ZyDuZ-oXS`)k)N+!goUHnJP`%4VLkMp5tF(AX<-!du{JQ75>GUlV3zsZ$w zQmLxDU<8=?0)D6GhQEzF%Y@p+xcRHytghXElp~i^MEkrdw)Y$jeoXQRX^1zgjZUz{ zZ|>~4`uI$CdR(^k^c-Dmv~F&0I{EocPfsIxczAq1WsfKS#nbbX$brNG4h;W_pP%2f zcL%g{$tx^;e10A~IVs<=ae+po-@j|9;?0+8Bb`5$g69bbMSU2qc+)7$CxN--n;Hzi zK>i8fVr?Ln&aWEeyWZU3H+HDDOG~}z7gm$XZkvMtyBOEJvI+Q#ihUEz86*0IoT!eD zlCt1s@PbawB`~uj<5Va(6mRus-I~|)pvaZ#eS$Jn3|Fh`Fwtw@jcX`vj%=h}@EZp! z-AEw|6%P)gMg5l3`#Ep(PH|aDzG2}8q3LI_9DMm97jZ-oZ3q*<)m`P)xpJzob1}`> z>fzDl_ma--xP5grjqm^dWVzk#Gy2c5bax-#-@8NjH?Ks!y{I&|T+*U$UOwdJ2nyxVEP0!QGue7+iz91b26WJ6v3X z`{3?wAwVFwdl)20Z~_E(3l72kJGsw&zqJm3fQ9txuCA`Gvo}{TMqBgfufuTxRmaU$ zr=hty0$p8QVV^%?WvYdLt`0N{MEnK=p(Y_4CQqw5i(&$Qm>WJ&Dk+ksnXZKIT#?IB zazH%9q@|L%JL-Mcscl3)Fn3m>IR*Nj)Fz8}cprqni`(&T{y#|Iv1qX1kb?`vhK{Xx)TbRJr%j{xUH0{RpR!X9*4FgA&}6 z_<$OYjAn(vT_<0gu3T=x>YQex*OA{~tUEX0G*B;<{h`H4htM4N<=D{`Ua{c9e$R2O zv(sh(>;C;fdiXqCG1}PJIJ6pc)EF4_15&V?gXx-zN`?|x zQ9O#2b&i;Wu?GGZPKl((8Hhb`I52c2;mXElrQ0X+*I`&;yDr@#aQ9`aV*?Yo67_$0 zQ7y|pLla@Ew9#bS-sh#2DaYSXCm_lP+{D?n%Z!ymc^1-k>lW~;apQciRn{0}rc-@U zW?gW%nZd`dqx+O#PKJLP;uo^7+AY=jj)!2dQIW{6MEU8X?b4_AewRw3R8VkA9cn+n z3o#P#kBzE|zK*G~1#JzCW_EdBKr-1({+zCMQnxsx++}=Xme;RS_`|;74UfzkVu_c7 z-rsX_^3Hj!Yjdtr_wTnC20lasp-K7oqx%j5(Ob#FTRL*82`=j`bWrT z11rY%>xjWoO3X-pArE7w+@)Nq{Ayf@omfGg*>U=q&jFy41Nu5YXv_5@2&K_-7(el_ z0w$&6K5zX~Us9NO`XkLsh1<=OfWz(V3P)bP=4eEYAxc%LWT~WPkwQqC#bb|4(8k_P zf^Kcl=48-IGDYBBh-l!ei0JE6%+b-2{OmNacGYI2byG;oD=VzQZ*`Q9PNP8&hYOR< z)l*i#-mj>rVbv+sxgHJoGF9~XzzI2VBS!oSvXel9C5pZb->wHuj%Kpm@8vq*9ah%1 zb#$0R*Hte=?4NTiW(c|JV{h1t7978FkF)2Y|ELp0bYE4sg2$9|qjp=o-f;yx`wd?F z+9n zh=qO4mC~)Y&4)3bQ>Y#Sxy+JEq*$<*SJWHvn`0R;Ke+HK-Eh^KK>v1Q|I2Yc|BC^l zyu!jp;8;!GbKQVu!jp~SVVjG4J!@9t50JrEo>)!4Z4HS(QUh4`NT3ucJ-lrTf4)f3wFd5is1zmP^4IH$d(Nx&)Ve84R z5ZKU^u7vAyRhre3hq;jor%A7fE=f;ItBU5J<@Q@{4e8;~?@)bVy8I{L+kcDfvwo8`M7hMR$j9Np`z)m6=b!g1L@D#ac{8~N z^<9#7g1hAztCkJX-%N_5?4?|QcD6n39YG~E%@*>dC!DR*;z}n@j3t1ZT_XF3SK0rJ z9`QXLOa|?VJ`KGNV+B3nL7)Dhoz*xe#O1!(2GZd^aB^U=VD!>`qCeKTaWP3F=ks+1 z6HjoKkoHj3ClW^KoMCg7DH=)*9Qo4$hPSRP-mvl-9xe==A-z_y-uJ~706}9%2RLiU z^768LwS)EF?t9|d3F$Ezg?Af+Z*l&Ri=>3C-Kzn~$wO#@`SFIBSubQZS;K0@S$-bw zc@e?uR+O4*hs72#<&9Vww)KA+zI}BfY~O920UUcnmPO|JO;_S3-~GGeLJ_x2_{Vv8 z7F;fODlJW>K9E+pc>cW*2q`3#rXc9~Hm9+ji`$ziZ3&lQ-FBO#$wP&aI2S5Y8 zn<>2Or|8~Y29n~Mt+u_rGdJxU6((>(hlY`Lp*H7L2%UQ3I?CD4Ur_r}CzF5KCSi8@G*qVoB(ACJbf@o$M zW|?#;o>*Efez{%KXg~iO=hv$gEnm##eCFT_!}Xll$p?9f%3KR5kfM`p#^o+Zy9$woS%4gdEZ04 z&T8n-_p3~-XS{?vyLKws3NC@aIDGm~fuRDjAk+38%m|m*+@{OM=}SRBJCNc1>>AoO zU)Tz$cJY-qa829xqw=KoJ}ivvd^sez*g^52YjAwf3c zE-Tdn!}>)Bqx>p`X4k;i)TqI>?r*z)a|VEqu0UW8Ia}jM*rs=kq>)&^y)r5qEkMfC z#3SZM2K<(W6GifEysYnxC1|!-O34=oyeoZqYbONUJw00>J*w|bPZ%Oy|AaJU%&h9I z#HnpJfX%fI;B2v!R>=RKyqsZmtH;aFLL`0Gxgww} zXI?pIPwB_&ezzpH-zjI$pDQmKinDS>x7EFnLK{|R3iI9Pubuv|MB70k;>XxAyE;3! zcPDFsihmt$T@M(FC1L}x+6=iqk~?|GX-Idn@S+p?C=_^$_1ZJAOKY@0>QX&taTWIi zFiFlk-|e4u?_vc#6_^-93tG>p)>~ofk;EUU-k!d=Y`nN+yJebGVZkp7uB zXklK2uJZm3KRWA;I#QUN*|A_pAY5rNCS2$kyt%%1&tC`t-c$Au7i#Z_qEH;gN4?B$ z*xlM!804)Stp6mHAAiR%;*X9T*tflMdGF1^>-xnW9j|2&IRUYF>%#f4dL3u`p2&pL z^9?sqg=IzChNLwAtRTw!?#FG4`~KGTKl>CWZ5p1vPaZ}?006H0U(-TgSI_Pak80a} z-K2jw5gOTFr(s_59==`&y&}Dwh(6;%yL{Z?ua+)(ma|H2Ly@*N&=Y36MvpA6g}1y~ zTX*snZ$xrywkc0;o1o7a{Ak{=X{2}yVxOV_a{1-<+xppSBWy@n_DCwnP4vS(cc@Rh zXwLohbhn;1W^^?8u#lLJEza`@8_UC;GZ+@ba{U(8|}UX|E&2P(4?jiLaM{X5r-p4|bbalfcCLt4;C8dV z`*hBW90c84=R=3{Afumz>L0-e);K!@eaB+PgLTat*#K$7+4LMAK8IwR-wjYb0Jgb! z;_2j$cNWySnnK}I`^pGoaw+st(&3e4$Ti2za1FYmQWo5H5=-`2B&9I=r~9U{Y4Dzb zxXD7h4(^aYLt2imyd4?-hv}knREdS9*cPX=pQjDc)6)YFxkS7rg?f>}e{#P*1=Wk? z1s9`o@%<6}FvnEmjEB;DocaLR$J-6bV`_!XRF$Tj&&h~esHTNTWWdFPXX=yBJQhmP zv20MwV?P-jJB9Lg?Xk|sH^$w8>g zbm;e|oo95W+V;D#Y~5L6n?ZI{^J|iDJ^(%G?CdNawYHxLV^IX(VS@}|yAenDa>tvX z58XDMs||||WOYN^8ppL*^koavKT@;WPZZst<7CGk@?c9ua&g?y7Lwk+soSgl%s>r` zLEBT9@*gg6+5f)y1UOI@%saFac{5a3WGq9l^D(3n@G!L!44^@jkGI4+4wDAk7cF&P zv(bwrpNd>fw23dC!WFV4hIR+$@D`jzmfq2_&{p)UvY(H#Ip1wgivAfAeU2_P{Tp<{ zCmENqXcISnH;*FAs|hxf1s4OC`+s@a<)wQ^jk{Vhmj_vUdwX_ZVBmF3=duB2Bp@;h zIh~!h1>Pnc)j9oh;ndpNIwZy(Jk@fRoJPk^OW$;A0j{Hs07htYYnD)wM}y^lmc`*g z|FyL>mBPk=)0@RN>`px{C{G!V8?<-1=8uHO4sb^&e3JGmLJ>|t-y0fye-LIa#gakd;zWTj%23^;-wYBk^ zC%#3{v@R!M11cbrBJfYQ3^cyAChU=^K2Yw?B z9?Y>%P+K%rP(92F0^UNf`n(4o+{3&MB3p=!g^;t8)0c&g*Tipp0U7TqYvJbCY{pV& z#{Diaof#sSVk)+@#nr)z+@HiK@q?XDo8k$HxB>D^V>H6xuuX1 z43r^e%B~rB>gwx5z9{*j^ka9Q>Gqn&Gf0<)?sO+ej4N+|cNyhm#J?hqXqM2xT?b5o z`^<$U$6#dXdf4>{>fRZ&I4m;d&BX-aTldOg!V^5|Vn+naAx%!POj* zaZOnMtT2a>MvaOI8$}i$$;J)?AsdjF6htb?xYCAMv=~OEC5FP0k-aq+%%@VPo0KZI z7aFI#@$_`r9U-`SG&m11VNXrDesm7H+4nvbTA!{KLx}5GWfjcFw@G?GASqzC@o;QRT>2 z;V4jYadU%gx|E0fG=D$Dnb1ot$zt%idtV!*R)Ac*$Ls@B_uVxP_`0}h>vH%ue+Pko z8FA|SC@SwLaYm={XgfqcZCpkf#xk@SxV{o6gsT%o_N?E99XLX1f zHaw|RPNeQ@7-!_3Dd)I;S0YR%KX?UZlab%6CmZfG+@%lMb#U`XOYP`@e<~Razi^+e@Su4+ez!OH6Q(q?ovBx6Vx?})C+M6kb{Iq( zP<9_Xoi`?5w%FRLZ?Of1avahrl(_w^TE{c*a8VjM&p8~!)w?8N9FEBTc**(W$m zST{#K-BA#{0FGHEF79D2FlRi_uG6K8YO?Bgpo>vO9&!nw zWx0Wm9g)-7E%fM65F1Huu&`X7_b~Db@?+Wsd>YCULS=|IMow9cuSayvy_|{S8E^wb zKSZbo?Qz|W%$Usd^xXzX#Ul!?vhwor)wj1tp9E51i9WHf-Q2Vm&)G$%LQ!7qmb#gH zO-Qoj*oOs>_>oHSGg(ar*Gd(=FR`An3j%IF2tQxV@bmMF88m3n4-I`vp;bzeY79x( z?s3oSGn<->&=M!LK)<{vla-Z?`YhKf*tyCoJlXk0yqMDzG!S#5vgP)7rjg^~J5-@bFht4xX@(kYw$A|KK1Z zP>1@}8F>U+zeL^AOPTbNCUAE&FUV%lL76hsQVadwZ;VRNqZmUnVGV3Zpq6?FDznA=->&1L(sQ4i8{>6wkQ74Op%R z$DIS~H#e!NcyL_Q(Y|ZkOfM)BNbvUp1ODw&BUw66hy`_i?MA zFF~YFUo)J`W~M(mySw9MvKsXXtzBStJ-j^99%){sQa8*S^WDl0+ZBvliL>PLF(={j z~f(B7xjX4Zyc<_n-8;tyI;mQImUA!y$3(2>$o)2VMAQH<&EYhZ}^s+Rg(hrEk<< z3TRMdig6MW61b5+8tK-~O9!v}zaMhp|9)`5n2?z0>g`=VKt9qv;O{V_6Nw9RLpBt0 z#D6Y=RdCe9Rb}WupQ_-%1o}iBYTtMXGfQ?*0o;fb>8XLN`85WbtA-!N6= zN}oq*A2WN0VG!ppgMpJF(p&FWF*&hIe$w1KaQ9stFh*>1WL#*#F)A>Uh9s^HB0fC7 z?~{R-U?3hn*A056>AspPYf_fOm;MXdr?;-VBias*j$1{MZ~F|^Z+IPd&0E0gT#vWr z2^BtkRNJ)pT*DaH0H)Bx190yg^tgO6C5g4kRd|oyeZA5;<<#ox?Gl_iqZubdy^6b+ zXCKa0r7A-LQiF(6?LFa6B)fnSW&2PvK<1b% zDD3-WxwSqRO9lpd>=E0W*nEizE-oMAHV@q1yZoOQ00@BcKtB$o=dynKWaH;4=EL*5 zuy|}x?>_X7@9quCi}0jme?o@8#KjP6ov|8;~B znjG1c!DcT``PC9NGkXx|ZIN#SiQlYZpd-RzxNPlew2Bf0mw4FikZx48^36_u5%?$o zc_)uMX3a%LPQLl8+MvyK8}a7$)??JG-H_1#p-Gg&W1|DIizbYvPE3Ug$K3~t2TNh! zou~6rdh7^lZX*ou_YTaHO=Ouq?sypbpcFAsO;?!Aho9Y_!%>)FgHs9;#KGt-2QkQ^ z?mB8Py+BnAxJ7fze}BwzA6MfXgrRGw7O)A{N2{?WsE6bdX>9-fl-&m6@ z1Y=97hatW71|cCK>B(KY=g@SlwvVV-5ulap2@SadFw~6GU>92PYkztg$7!uA`VF7c zh89yw=BU+L2W$OI&C#LocF*lbC##|E{UO2fTAaJ3Fp*uwk$f#I>egfWvzaIze!DdAU^Li2GT-u3<%3`5pTy)h!WpHlu`7#Le7N|}iBLT&o) zkn=)aA}rqzUGGCf5%H+lDq&mxC5qQ#=Xo0R%pEZ$OmYxstl8CHo;<^obvJ7IjQl1a^D_fPlCfsJ zBb+U8w^H!uJ9Nn_Ufw30OHXK`?zcnjyCUGduaA|P8SoSyEN^`n6Kc)kQyU?)dl?#P z6QFZ&# z&W?Pb9iGls6RJ6^LTMv3q_7k4Q`A!B-;_Vaa&{tVAoOE{^_mqCuI*ZI(WCBl)JSsE% zJj5)^9$2!sp!JquM_`m0{pC}o9#TJ(6}R7-uJR|W_BYnL)iP1wnj@Jh`%h62yUXg! zu2M;$r4)N;oI6X;fMc2|XRbN>TQkmlN|oKGbm3?u@!%Hj6AweAQU1aGf~U^~;+kKH z08>%h#{*oT5waR}gtc~GSN9>E37_BMf}rVQP?}k_jc|9^L6Cy`V^;a%_s5_=&v&7s zcf<>s-6b%KmYmaperXwcGIN-`OPwI>Ar87!6ri|)l;eT(20GdEa{w6`ne8vOgl$-6 z>lQz0`%DEh_;eH4?<;RDSdbhUCiwRpJ?k9@DT%+a6kcnh)2Gh6gIi-<8H9)CD$FO{ zHw7WCS4O(RL^HZmpuD~rRWgfp;FHRC1(EmW(TnB@2Zm$M1M(G)mc$lIG4%4d*;|~0 zYYqv4LBRNB5G0OaIE!g|d*D?+hmN2HaX)#rOZ^LiC1i-}n+q2^?xwWg*^qLA}`cF6%si*dam|3Ro zJEDdHLOC_OA*51MdY#tOu z0a#hGCii_O>X6lgSl3I1-)w3Y^h|!9NDcMUs3V2)tTVl#C?A)KI zhC61@(9$y$QSUn$H7YmbK%X_tGLV27)p(kXWslNUdw8>%;0|YX8Uk{pN<|IXkn; z^&x=Ywmbv?Y*6^>TykM)i75nnCUWG(`cez(eQH-%xL(QM_wkH+?T z9CI^<&`}ezk;RTYca}^=^hil5^%6Wzr8CveuzSpLH&+PogyO=$ugSM zp!9~vgl7LXVXZLFg0~QOwtrtKf%e(ODsd?7xToy6#mMz>a>QVJ4M~*QO<3HLqgK39 zzHD5!>)GG?3eO|7@J>r1p9-Ewfr1$6&sRVk)WmSVIWQ@Jvr_&gM#9TFt;qL(Akcfe_qX#7ywgY5!1?E))z$B=I*b5ZJD=*udb5!@YdzVW zw}yoNS=tH0hj55*d*CT}cR}&$sw8@W5;tVQQATGogKr;|Gye}=3P8MnSV92say)YL z^!#G6a@a$`p|z(ZLjPkTCo#jCM1va9iQJ&|kiSZh)hhLfv!@y^>v8}Wc=$Dg*`-?N zzRQ%s4S|}#eVjjT1Gs5(6{6~x6yk)pxe2N&AC_;0VOCmsr(-0rGe;&_VSXSJld=57 z=TgAtT>cmAt0{=jb)HI*Ki{>FsgmTP@P>~pqbg_&5dO)V-L4FNLr;X{;f4G%0-DKt zg$vONh`EQxakxk%K~U(DT*k8fjcP)tKgQJOJzH#SxFw9a8*%qx7o3G+$J7RFlZ<5o z$LCxMbKJImiwD$;_;?JU7wUAz1HdDtPSdq7Oq4)v{k>eNq-}e<+n2?zDWK8Y`ptGZ*vB54O_vRt}Gh81H-d!y@=EqkV*X(zQ z5%1VN@e{sJJG|iJAmS&+-1Mz+U4NSs59*fOwMh!rRIOs$k81y)VC8WJCyKFF@lL8} zXoFy8_wYyi?{}Gr<#=iD0zE3n+l*!Va6Y*(6DgQEHu!a#p7Pcgb$lax9R&YTg<(1t z6tg_a1gD~JXtacC4zd@haG1m_ieB4kr5O+-x{$>b&uDhJTxQ(BJGAHnwI%^wm#u9L zQR$4A!4Gjy018a0Ow+qy2nl^|q+TPNa9VPU2u8M9a&|gIJL?a1%Igt|2asBZ|R{Flwmua+#ujg8MJy z{D_{C=QgUx_R`g1I2zXY<>W77A)Ad6ke|OKxI$@X#bMOA5EE7rAH0)~*L}q#6{-js z$6h(oUzxRgzH-N^5cfL(Qf74XIUM%kWX~;*H%tRCoHz?pgTjvvOA;0R`i^RsSH(0d z!rrKdv7>K3z9k!ahyGG&0npnNn!%4bjaoI^Jy@{Z#mMn8CD|2dSg18H;d@Kf=9Obz zrp8=&<$7Pi$mca)Py^ZTj6KEry;kY&?M4+KlMl3ph%r`0F%JRczu`WeSSh)X!^8A} z#jqogAs}(=p4$Mkh2uvTODVFifeUURhU^Kg82O(xz2@!Tf6ASyxyLJJ?@;~;zHIqe zs`_O z^6<>W@V2eXznvWcEe7wz^NljfL!TNf+9X1$3dS9m|D}Sfox+FCtV!|TBoMF^zI4=Q zVL?X`s+~%4%1JKE(MEfZcVkqN3~Wr_!npnl*h|HU=A7B)yt!tSbDc!_j)n+NBg=WO zr3^L?hVyenEXa~g`tN|5fixN0Jj^Vrd@=3ISV*1gg}>R!mY{EhtF{csK3O)rS+o`& zy*y;VAtK!2Y+@g6jL2PS&|+-Qo%|$2PF*&`s=4-^yk;I|Byqyf!tbVOWQqF+2LJi- z><{BPFfiaZEon6|rN}!WTGD z2!5bb#T@9oBrO;Fq(4{^bsOb$*XwWjIo=iHmuh{;2-*~xRA*BERV-3ml{FlKE;03% zrvm)7Y}A+!L0=Lv=V5|7y9>*17Wwk}II zE=nyRBODQh^<^!%HuJ=wT#jrc;v<(Cy7mhUnR5)e2@IKvO*yno*+pm9$7%-CEjQ&{ z8z7)wdb+%@{yamLIA5?x+{|5nqLbOip_^f}z7*Kv|8=~oI2u6|VuB6-SMg?$0Dep5 zs!Z98c;n*iM(wn%t<02%QCmXjNj|xQlOu{JJMxCFF{5}mwKDuvY$|-c<$c=MYXE4; zh9LI_EOlwE@q-os3MtX!#nA(B1k1pdsVKtt0SUr2=)y@%g--apMPEaX=KZ?T1Kk(S zwIq%N?ops!vy%ZO_+GG@PY0&t-QL$4hR;)0UIEWp2{Knw26J`q& z<*Pmd5|ng$PLcnWhyzaUQO%Y{!wI#;(u8fRv3>0*h}`Z4$>;PXGh$ZjpnV%xzVa2} z&c)y+rG$XPDB#aUC=!nF|5&;AxMAKgHz~)z<7dxT0UqoK41oQ>r%-nE@FBT4jV=5j z`yg`GiipoN`1L75tEY1QXcO>M#sfLw_G(qs3G0>McO%^1Qt{+<%SXHZ6^R%a%!;5J8-W z@po_2-w)RtGqIngT$ZI&mK8TdoFGG-m;VoYTbh^~0d<=mYkizWQ!#SUS?v4~Kc^Gs z1}9IL6*}X7)`Yc->g3cv&Dg$ge}X~V@E-<~)F24;T>px69;!G&*2}G+iW03%5VE1H zGerl!y#C>15kFc6SJ3eDFwM)Si1W~#dfh*wc26}gIt4-STlC%s!XvIfA)U2SZ1nNzT^urB(%ps_?XCPRj>y%&~{87HF9P3+=L z?EY!FMo6~VwT891>60zN$B zcGe;d_FvhjqZQkf;E7-WAo2M4tzmd~HK8=4=!%5K3%V0eI3fmeXu;nd_+pop5EVr! zB*e08)d|uVh!9-&>w=zmJuT>hU49&=Bb~y)s=!~S_no7JohOa*Bb9O5=(M=XrlRbP z(njGEF!U5H#pc{!!lAH|p_I#)8U?AJ>mog=bvWmg@CyoymCZ<3u6{*em@7Q&yP6P4 z1!1*`F=u5GE0{LU_cNPZGXYBH$0f%x>&CvSWkr~$r4!x`V8`ey;&9`;u&~er>^k(T z2}!>UQ)3TFF$R8>bQdbnV4<);=W|-=nV3jWVf=7g!yHp~>G36P>#sb#yxec$>nyE zf?Qq)M5Vobfjqhk`{tW+TLN&c-&dQPD8vx5`;)E+0mC^|LdU=h(ziZ$W-D#3aJdEs zKbhCb zYlf}5m*8)YPFrqLei4xYu?H$v!dTK9ohK0!mZT0={{wP46a=_Yao@qeC`_CX9QTi> zkeS$+BYxgr$#~WMxbS85JXw?FlPvj^ITfiPs7BJmAa(W=UG)rDdP7DI=LtsuPd2(K zKs`}1iZ@>8#L`8>o7JoDjj^XPSgR^; z#=odNM5u>}HT#KRCG7XPi}YTpQ!7lAu;~ULAAF4AR<3Vt)jb*?j_2W+mme26^pS-{ z;YR_MdIjDyxh}v8z^1?laojpgrIL1T#8GNUmR~?*z?T2J)cf~pwS;@X9?Ymzosrm^ zUOr~gfsT$Ni(S|z4YJ5$`fuIeE{BURN+@#Y>A7iL`wx#K??W@eur;3eJmrf6vPy5~112Iojkl?b9D#wzX zGZDC-pK`|O0I$J=fx&NQXN%5tS?D?uA)7i}d|e0_eHvM^4HXcb3oeOAcAarEWY zzCocTXt1L*m{Q-M3dTWUQ(dd9FeekIn81ej0$73}u?fEl3$GI?>{^Ebnv^RsgpAxw zFrRR?&$=|lNV_)i&HLy$4wg&~WW1NmyjYINI5jlTUk&ZZ*zA?5+9VZ*rjMVvByXKE zt%{Y>g&4+SkFnePvnDJy)eI7Tn>%Crp$Q~7rseY@oo7@QPsykIr$RGiWfZYfcEB#V zl1RjBHQ<y#y|GFp*G z^@f|q@WceBU_Jn$tSX=Jl;~1nV?ETd%hxOl_KT)%O>O+%7(BoC^z!_;VhrqN(W}ml z@Gk>vawl&O47XwkR7HTRx?{ldDf-xYNJ(apBho!qq(>?fU~79e1pMFvpFI*loI}pd zsS9C821&U1x%vS2wp9z}Wx{_5v__UCu^~OqtINj>m&oSBB3+H!-|V4c7ar z4fv)3ndTofPao)9-{vMIVyL({SmSPZwxp((u0{l2|_KPgUBPLb06mSiz z|FHYzZI8@VwlxQ#eKW=iZES=LM8ozyk)0F4!vHb#^aO5j?2P^EfGN|1eu)~6{Vd1i zFRg%<4k35c>BhaAgX_M0di}{g(A)dIrPXVLUnQKx$f}|mrdi(|4n241NxL?XhirbJ zI+t%#L6JUR`?!N&M4(p*(!=>lCsEhMNFz}(>Kr{yA?Ux#wZeSxrgW;NtErwsW#xw( zxy%CbU{anli06Dw1)=ss>}rxUK5K_VKBTz^qT)+{)KD)vsS&`tC9%yn{%pzT7OORB zxO$V1u5+*xy%f3*U=9*Rh%}k~tXFRFOaRO(>Te>g|;on+@ zvlpR1P4tE|XtRo)IS9(kIuH~f+ej;B`UdMd-Vz3z7X{>rP6NUdgWcyj{OsXwOBlA1 zCj{|ez)X{W;%M0IPXY++3p$s9<8+@Ha4!Sn)fxg>k!i!*zEQPRAO#$O)+HX&qs)qraH5Y$Kw3M#1e+sM5vU+3I3Y>$YmpV)Vp5s%j%i*lFR_skX;ubG2++-LX)~q2$kUm zwKTl7+sJP)fED`Y-JKMg)t8xrr4^Iry^530#&7YXx;3WGUb;IhUQ4#kC7Yh*!bBow zEk@?g!#;sArP4IomfbB4Ed7fIi~xTepJ*g--0(Qr6fDBcU@5_B45m0k(^?4h-hp;%&9y(C$IKyDJFIl22?voubiS z*~A7;n*Dk&%2eYnzJWUcj|%?%TM9d!jA|K5+b=5d&zf5|#!aFL_LHlQw8RKJ>CYA2 z`hbp7`KYK+O?vYl>>*_KdZjRL@p=tl@YQTkHKtS##M4;z9Bq0*;!k#L)cG;WxZRTDiZc{o;m&@uk80 zb)f_>(HHK{XSn?P3-cx|*E-}>Vg_E{H%S^|1& z3VM(5GUmxbKO8V@$r)9bP;T~W+T_O=LLGpR9z>el81w+I7;noT`aJq!$M9gDCr`p7+E=O_kr8Es#$ubHeBRtX@Kx?+6e)*sXq}jaUn+mmF`@Ox> z+#5Jr<8&iTePf!02R3HiP$Xox0nKyx9m6V_8T~|^T3(SVo=)O@hhsP|okG)0qc5`d ze_ntgmHQ_i8uvB;b5;Q<;l@|OWyZm7gB)I*);h5YE^v=jS8P2t3xT^KZT~X+hJKdG zZb$6Ai$wg=%epBtTItK;+M@WErLMeCD-zB@_FR?l2QT&>^Y$vT(5?ATTSREPSa$z< zs!pZV1j+tAM!qzWDY=j8XK9s16@k{2=QNfO5v(Iwq3b2d!LKAB7 z;?qEhS<`p|UGWT%eIGs6%=E|X117*>*yel9RAbm32LMi!Rf8=4E(D7Q3rS=CPqodH z9LiO-JxZ!}p@8uaF>K=^e!{j~X>-iNXfM}?-Usbp^_FjnyTgu;kHN~g7qp=oYC||@ zir1yq>|$g?_SxD_!J_{GFcO56Cgzy2PR0C%RTp094@F?2MoAip0ul$!`0)&iz8U61FW&8LvveQ!<-EM)V{9FVjl6{^m*>;VwOpQB-Hbg%nHyqQ?*8 z`u+nK#<8kE(SXrdZyZ18INjG!fzdZNmtQ~t=fjWgM3T~QE$o3BMDbvie?5&rV1S&7 z%2DPvc*k)$kNxhJ^NzV8K>J+RT57%la*x5R)T-OXAuwbqEYUeL{brZL&rqh{wOR~m zqBUOK(a7q3_qRssbZDQiP0Ok**$@zWeH=p@EQ>&Yr7z3>sd_^j#_u}ef8V@=f!U=4 zaX1vUn{Eq75-J5o<4Yh%V7V}au+6Y&t+7pym@wjQ;*XrG)(0g>>FjteLWxjbV!qN< zo(+!SnI3%B@3Y2?ICi8?77N#i0mNq>Qt#bL<8W@}O~HgFa@Que4%l-Y8s#LOY7@Mv z#BV*6EBq7qc^thA@`UI9!I7VdEyEjlpe8RnzyuDMM5!HmYO~?AWF`TD z${;tFYT3&j@7+No1A4(5dk4=6m>{c&I`k(UQ1_)ZXrO@*Dy3YeDHSi5_$KSn;2TTT zd#h4HbW;1Xj=vkb{PKqO>3+ax1Q^CR6L5xHdmTEf`q;Y8slpK zuP#DiYkfhAIGxwyPDax;+!u_jNF)~$xgV8U4F?;E+ZM4Q>0n^_8rAzU_kNNHIG8+^ zWRZ!mt^=+#Sc^#xQ}ZsF%gSyVIqawABDAd_QZbX&%)$Z=7?~6Hdz0;HmY_$P0wY{D z+I!LXFwtxNJa~L-Nrj_gcBL}n6mc( z>qp~@7~PE}z-2M%w+0wrP#{MXOH5IMTMm z*`lK72s8RKH$1&21S`orJ#}^!#?~p!V_-IlUt25GqnzJe(N*bcXJP-jrU334Ia=zM z*3l+*@aiD9{15^3(s6#kOZ;~N_kRy$69Hk8q9+C7jAOw6h7_czx3guutm1h%L^g*} z0x&%c{Ns_|-CUzhu_YI+@$UQDPhzQ+J;{roW#VP%=7Q1}phDu^`we~$yL*P1KP4w# zIjCV1N6AbnaerKfj1zZqEB1o@7yQ?U*4AjbbCt(zxRRqj@4x=hHL856h9hB4|5{>9 z-i7;={6JXeV6iX8ZUYznoq%QZD&g1oWquynw&+vjD_+nAQINXrI&9B)E}tu4-tj+m zFYI@IzH#2BczT8=7QP%5{`x^(1n<%vH|9=Ow(;S>=j~E8AuzLrFSRZcw0Fl(4eJp? z5}P+_zw8=VKUdt3?0K7btfiRduP0o{aDdEGSeo@JoZhulf~OreVwxjiUuO#EF4$~vsCDS2k?OkGS##YI532~`)^f|{7^}mMJ(GJn)qgnO#GjF}pr?jUrUyBTgvVakKy+p{Q1tRd3epeNse zn~se^X31Nn)pk$J%VjK@+YyDcV(vh68dxvt%<0XRaH9Gf)DRocrHCe*VGnS<14eB? z)$CjvCco6{C_0#MCFs~7FdR%vpkHHKjRp7HEu zPx=-+_?1_U6IP0gXN@fwy`6$W)Q~&1G3as-Ty#zfFzFi25vVfz1Pv7r#D0!{MJ zG6Sia$!tszkf9`wI>KjTb&JvaOGG5pLW$Z_0s`(1KieBSm8z14bnEH0;wK;B;;-T4y zsS`AG;Z zCMKGQt>Sm2njPH-qPRm2uP z5TxB0Hj?@(dJLX+L<2BsH}n@!?k{cTVSU2M2oc5*XUE~>Fiy4R;36BXi7Gj4^e2{z zl6V1y+A0htt1D@y`6do>MT%-0{%7rfXp~1es*MByvrK~q0+ZJ-XP=p8nW>V4%6K$W;sga5Hwjq z*KF!JW5~W3*Cpj)k+wg&p-Fx{c@?m&#S|t`M#NufXn_7?m&uYatuySq@=- zU&O%^MZqBa(D4B+0xhLvDpzJpi>)uOF5ujRbr$L{jO(O;qzh!D7P1LwfrcU-r%U?GLWGpZoIAh$y6KxNus8 zwti3lJl9{vVyJ}AOP;YRldPSocvc zzpe9sq^t+EPizvmqiTh-zcXMR9y9o(<%4Xyd}|Un+ugq zy&|g2D`pkW=$!&B*-yIjyd}jWTO=WnaFJoc zYN5FOuaihPm6a#*Vj3GJ>bz1QugksCe7+VSaXojX44v`V(!!XgJEOvt@Z7}5(DMap zo{J$PKM!Un;}*F^Mb+6FHj(Z+RFv{^>sKG{bxQ;UgtD2CXLi*op@*svOF~RasiDhs z9#2Zy*T{D)GwDwP^S(!lYUs8exyXBgRS&D8i`-cX`MZSx*d-zR2t{| zE$VysCE&h1=`>5H(3=j}ly`U0rLzLys0l*=8e#3@kJ>G&Qy)}`KLut(=jU$75BQqM z-JQMB>0~|Rpr{AGIb)0}^GWER%Y5zTZ4V7p^*(lEj=CbwuteiovL?a98?DfQNrxs^! z2`KmwEczXkt)-5E$CfG)pH8muy5pkQ3ce&FG&*dpyvwH689sja`3fa<`Xzrg#Ah8t zSI>P48O@6lNt$IzLm5BZ905sN8nSk!lhk{e^-6OsH<|K*3{*cMpB6npFD8Ew!nRNO zbqg)%k3!J9lLFYR|B*Su>B|M` z|1KH3rgFSyZo1V2=|r8Y7|e`s8!dRhGWX?L-BWULm>Jvu=#rA}Mn5avdn!vYS2?}5 z3*T4{6j4NHz?haqu`4nc$6`Q=F;vsEP)x>TL8Egu-qK;_OOd<(?zZN^D*4K_#=uO6 z$FVu6@-pZ%@lwjGxCTlA+k-@<1QKlC-ce?Wb9BI}1}JGE$CpoIdfl3sAT>3$t5X;M zl@&ZW{O;SMMqzPbyakaO%<0Q-_D!yWq*admfD zbzyBs1uKGRyij$jn?2C;-t#~!xbBy5%xkW2G!%8`nyK0>I*ctAx&Cr8so@kXh&p5$ zBkX!VM7$vs?S;+KAH#)PwD$)Akorlxi7#3F5yh*&bhe*?5!BPiNonA);WON)Ey)2O zS!%Jn#5OOGn3cL@#w3hX-oo%u7!h-(rCl&!pdiN_ImtC{!G`AgWX z$nknyIzhNkE~+HfUx@WR7{4IBhHvU$$=wOvnF1*5v{H&@`dFOMVNgUfoeVSrVHA$t zOd9jzRvi4ZoEEHR!Yxae%t{w44SQPZp39cHq~AouGLr(0IlrFxgTF>TC0rXUr^Q+o z3xL&8V}k9ZH8%lpV+5XBmpzN;7-F^^U?crpPegnD?s=$}wGo*zn#5JPnmG^N(GOoK zt2X29Lo@hY8^`A3%?9qU+u5I4HNeqm$2$U88gb!gNmZ+G!0aT{b32KF_%^f;kn#N; z`=-S&Rn5sR+j>?vJF$k?7x6XgVp&MC_8;s_}>J-w!Nj`k6Sj*}V2)fzl<-$g#p~azk+HV!LPOZQ5ThW!J7XU0ey=0H0tGKW74*>rDyKhO`A*j^A<;j$e-A^YAM`AymM%KJOQ0rxKJepF5^&WK&FG04kcU{(0=@b>^;Y* zdx#?B>IF$5NxgRq|3K3G{DLvB1UN<%0nQ3z%9T`tuM$}nRyP$85 z-g6c-3R0%omjmLopn=Ucs(8MTJ!3?Bl-chLs6pAhT4cSgFOmPqC0MZ85wZ7LQRQpZ zo8Lahv1yw6swUoAB$Al=AV}V;!R=yF3{8Oi1o0Zvu2@E;OG_AzOKpK27svNJ^d-I4{{9#EC6YQ#En-u zK?w9BFqtlv0pt77r1q_G*+2JcHM}GmaY)~PX5ryE;a~$YnioVTsfUYtn%5))5#e~@ z=J^bmGGrb5zSJzmzVwM2|2-7Zh)pIjea>0c#qqYA`4GyPlpcbS@;O|KU`aOqRV0{} zlf^kG{O56@&gN;N*_;zWs3!#<4^K?|A90#z%vM}k;y9sLlw`q#zPdcja)Qav&JBGL zHZQ>AB@YOF2H0;qu$Nj+m>R}x+vVpp_V3vnH)8SXpq?(rr-&eG=r8lOxXYx_Y=kPr zz`YGN`8QvJO@J$>_}x;Gu&AhE2OMx8KxiZAJvXP3GJ&^e(ap|f8Z5Lac4t>$Ss>`10 zU={q=cL^ReNV96}pVX$re(N%kI6;PzXT6GNV{ICQNt6|cP?_QUeP-+5DjG~M9s)O( zB*V@tyV&V|P>M42Ges#byg>YdN{f-=DyORv@{$epVDec7nUm`F6 z+&Ecs*^LzM5;sa6amwPvk@IVDm^5hd|A^C_G~`KE7bM5Kl6vtF&S;nc{>3u{8fGmH zFOz=v8~rUCm9&(P^X2x)CFb)NlB^BnXWkhA*3`ppj!^UfBHI~klW_I{@zFk?N%8eF zRS)TZk0%@B9NUkOg8#83#&mWCIpjfbp|*jOyZK4)INHqhlgla|$leItySCQlamt@F zi2+g%Y52cc?Zs>M8>RP1ak~VMPt9+h^jqM3h-JZ>Kpi|k2iDnslkawW1mtxs;b~(S zTgK0w&|KLJ#;x6OSmn5hSB?&NTM;H=^^F|&?{h(eKb-?n7#TP(%U>==uybqkE$pT@ z{;Q95DUiZOF^?sUPO+lnG$$C^3=0blYYd1^;tv+x{%K>gVZWF3(`gS3`-*XP^Z4$f`>Rp6K-yduDb+rkkJ?h}G^P~(}!NEs#o=?2G%5${aNGhztJ(oM}ICAbD)k;^l zS=3Sc&2xI<%Yf{jK9>Gvt@kb^1u6308#T3*5>}f=vY{Pb;<&*dx6OdEyo43dvlv!i z-?e}&0r>HohKC!aL!%vk>>JP$g~(yc*hPsHLi)zyXW|DPEFZ@E8hJL1qdeXg1=Vuh zm}(CyRP+Li2T-N!=AB4y`#p&YnNBa6H*G-3UHKs==Xd%pj0UB@$!UcX>rB;(FeJf@LKO13R!*~ z_0f4+rQhS7=j0PYFVOe7{!qHCwMPJMHI8wvFOPs~uW}w-Oh`dNvF{ud5CGsCfMJ0r zOVwUW2DB+(j@-HKRccfDN@49wa=8&7y@VEJ(^2-2|8tC)hgnZRq!(~QPlzyijX#Q3 zV*&q9bBYDCqXWk}nGcDSY1Xq&ZWqNl}J<2}q&G9nztX1|`MR`%U!btk#9u;C*vb#wh?nmQkl}kU*W)8D{p(i(oly zro*?AB1uCYR}H`U^^CX0xgu)~?u>+7wz~B?U%>-+$L2A+(tp46GpY@IL0+(O4DO8p zZDMkFs;?+>EduUXM?o1zvI({YhAT+BjeH&W$=<3rmRb9h)IG7RD4^?5R8iBt=Eq&3 ziA7CMU9xyoW))6sv&8>pakyaVOTtR&$|X`ZMS`J9AC_BA+O7TlLSJO z;(}W<+OLcdQ7X@UWW8guvf-(lJQ~63{>TJQV3QlXj~?ILUs!a`{b>7czq4A}zA#^e zw0MAWqdc@B+8BNrN+90j|0I`>!||aO_bc9tnAqJZploA_J-NGI^fbW+%};xJ;-8gP zh-6-6+0aNI0IzIx|=k=?bllApnnwMH@DjnZ)BLJ+$L;nxkz=d1Wzm;Q=UoBsm} zYnHug{6tL8J_CD&ITcHicoP}NV>grCr~>IeG}sW^y+UxQn2k$3^kk(QdU@mpHgPZi1|%;B6#Mo}{3mX0o;?Dq26 z$iy>>*@OW@$`XX>Pr*GMK4!%rCV^mmvR8-Awe4?0d$miX>I{)xaU#jam%qq@dw*NK z&kOLy=R%RD-d5IR%s3QDG&&_{ca8L9spHRR#zEx zp$5IK>GB4mE70ilIf(Dty}J(AfIGN%=P7#zw+fN7=T!Z~h?{e>Pg{NWo@k6Nn}S<& z`Z%!z6^xzd_mJUY$OKz-ZO)4EV}#VpNcA?4GmdA}aRwDHpUu87vCH{49$_s^P8kcd zg@Rf3c-k5rzC#%!s)T3f)IX>;WM%3+DiLW0I$aaA4~&WBMMo`{3RgAQq16M~4n3H0 z5cO8Pc4P}atRu9JY+{v^D97AdrvX4wQNBLRgdAn+>=1Y!*bB%g*) zyLJM5w$p0MIJnJjQ05>t7+_2f=yNwB?#Z~q&l3xf8kBeG(vm$1Ny;WGrU>%p+FVQB zFDCJr(bMDPs=bTfuk9i@Wt^x|ieT(yMe5{30LQfcNSz1k(yQ70=8#kfE>Nk>$v{|+^%U4=@lAWjA1?CT zh}v`miZXT|McKkKWuLymwT~f1Ya2)=lODs(R*n>;LY8G~)ceQx~=+zur*)l)G<7oP0?%VYW8;mYTt7Bch7a3jKyp=kvaGw~?f~yxkM9{jBL|4gO~uej6t-CwW&S8Ot4X3+x(@ z_{%iTs!2uw{=dL`Kz=O&>w`PVQ3QGd2^^cu(Ctq;M#S1qhGX)}OwaT`W^f<~Sq`KF z>&;T#IKp~#HmegKjf#hApC|7=l>Xa zdtvvqI)c!*g1EqWfU`+bwHAJ{AR%U2gF#ayz>V>H?-Ekz!Os(4z++W@l5lB=Xl`1M z!7A56M3u*Wys9ilI`37BBH7s=L6rLp_3Y^ejte{9c;bv7-Wj{=IW##Pg2Set3?>ha z%o2At1pqUJ#7)~YT^hu%O@C7oUJBPNCWeo5KeE5j8*G~g&QAdzIHgMd3M;h2 zumzNRD3#AkqK^;NUXlvynq|9ZgN-jsd)$*>*FKoC_Jk?FH7Wnr_(Cq5N%1|>xKGTo zW8$)7WbuUU9{b$Pl$!bj#l2efU;SiPz>*~L1Db%vr|8(Sv2S_0V0Lv`P{r4(=mmYKzd8K-ba;%(Ps#bf@>hi%H~0(}Ka1ct-k>MvFp-}qe0vzTZd<>H5q{sGT7}ah zCcCEGfHy#ZHgsY4lODhD*z#h4s~(!WPZvuL$iaO!Lr^!>F_h5& zsDLlb&_Nj>?GyLr$x|O%e@4wJdh#R|<2>iTc&mhs+diex3KGWbjnZ)pC#3b;WjBj~ zUjWSc&L}B>>y(U1&;U6b0Kk)THmBEPh)HmG00>GI2$)-a519Zskkk@z{JBwnb)#H` z_ageO+@Eydp85>`-#nCvgS&Vlge4QOiAXbI%e_mU^6G?}_1mw#C{8$*PPx7*tSYOm z2bsqdablv0o4uut_g?S%S=AJU?n=*|&#Uau`a`_m83*5q4gwqiz~$BT^dvR*f#L?i z@w_``5uGWJe>tL$y)?9BlELc1n!&<+AJ)ZV+~!c`b7&Efz<*fr(7^i!5C7~ z(rs4c^GdHm)RFlZe=!WjB)V#f6tA;>^gL_JJ(Lt|oehu2y$` zuVPv9KJ+S(A+enm)~2I&5sz!vY+m)Gi_>7{zY4*=4ekMAM~Q)iu#)*c8z;ccW^xJ@ z+GZRAm{57c|2Fbs|eBd=6aO2RP{a^tYF0|AFi8T28D^0KLy8nT<_vw$HJ>*j@Hr+0_n4GKP!OS}Z)Qg5owTRqGqBYV@T;wyo zuNMn-K{_r9&yU8!M;ONO1j&V0H-^v8@&EFr@7{%<`*7HZ=u{O15NVtKdsoXKyH_Yf zvcXBY%}aKKKrfi@K7@mJ5C&IAPj9t16dvBtaV4T~h*(wM{X9mCXRUrg zP#5$ZDRX6sRM|{EM7tpvon#^x>>FcsXMq#n%Zr+^W^UaY9|cCw)%+H==;#Lee=mo}4MbhlR1y_4~C;|KBi~ zn;SPjKSNM3z#0Ej7LHT%2oL?>k9W{NaNE<#FvgCW%c+gFo30F%<1X%B&Um1DH-tXy z7joagQn4R6RkqdBUs|$KruQe-JAT7)v#}uLz zP3MT+rca?q=E_IIqfJNgtF8&0-0kw;OY+}HPt!5M&L1s&d?PEr_&zJ`malT7w%cRs zhV1Lho7Jy3L2z7G_~Xs&$(P@_C{;Bz;Ik9&o}9m&uE5|N94DcyjPK1uWo7C74(n0p zI`zdtrW_Sj>TH$Rp0L7YwgcHzM_JHdtr`!r_Y@!?G%zvP0z@#zZSE0(DzmP&b!1^d z*Su*K1krjeFh7T&2OmJQ=#$+>;K3l#(zq_O1utqd^nWyVTl-WEA*$2m+1@G!$+4=1 zi?Hk^sURY0Ds3gRnT}wWg>c)PGb}Y|Bk;(KAbp=1x;i#fM2?J(>dQx}LH{F18vfz~ z9W|wi+@ptOt`gA!Q@aTcmBd7OD)UPa3X!WZh5pwV@&kxTr_G`Uf8Iypo;0X%NYQGc`4}^FXI|J2mJJdalp5k~6leNwwv0 z;(4S{XG#>cU#7$5qR+U|dVkWx2=1x4pqSzBA}9B9ny*v}YF+_K*XP%BRM3R^h*ZCo z7MP)q)oSsTQALoa;za+E9p$j_erv#QdQ41Aj?59rD~eVojBrkrH3Te#AIW1SW+G~D&+Ld&GX4A;+%Nt}#)C;Q>o|z9 z<+qBo5!s8hgphm|?{o7cKWv8|$i@a(GMf&ne9A*S+UYz%m1A#Zt|K<=qkgzhg?Mpv z#rvbkQMAq?M0A|C<*>xYUf1%Llz>CkP=8-FJKV4k!7OEwSE<144rluR~>U!^n8`eeDuSNmWPRu<|3 z!5Z?-A>;*5;giWQLFT`v3F8@~ixIhMQHGYw&95cjwJeq|9lP@}>Gx`DsmDHSP!d0m zdPUzQg}rYz!Z~w}p$+Q`KCb2j-mSKP-vlk)N7hzZd6ynF;!JOdD4;_F1B?_Dhr2_9 zyL( zi2@u|z|JVMh{rXDJd&-dqUA{4!rim0XpGF3(8_V*wrsX7rHc5FUh>ShF!h6NGa|I% z62&=NxV%yc3fY|PatRYNOacC@^cFTO+2;c92pZ;o{4Tk%+r_@>y%E^CLv^}2@q6~~ zA6(x(bufl;=-}|@{*h`u#xA>|zP|6`f?!rlOZClbfK>Lmsx%t}jMg^o&rE(CJEkd{W2o{v zyY8XmQhd0fI!bmQG0Nzu7>*EtfS5tG@vy$VeF%8Ifyz%Q>4oLM;P)t@L1^w29*w6I zjy_!Qg}#DXj5EJuVr(jk?gBrO%}NVV8vC_*^%T$B))N>*2jZQ5A;4l)me>0CZX~vL z&zuNsCB=(xyZQTf_+S$gljs|o7A_v91-;cay>tr-7XU431MSpv2F9H?&rkj2NWYH3 zbQQflH{8&sidT9y$5OG+h3(rGO0+>ubj7Sd!c{Knw~Xh2R8KrgIfZofhG=xZ$sKKA zbKoXFA#5T#O3E{W02Vsedsr6ad%vjj%Vl55Am9Eehh36h*z+^FIFiDTo)I4+PfE~U z(Xf*A?CoVqP%6VC@@*)SnK>=>g*EL`XJw|-^Y>*+ZgPv?5wP;C%2wr#|Q}t>KmCAEuJO` zJV(JGa<%i#IvGGZzT6ja+eYGVY?PR7-l*hU9>KZ#5-uhGqYtg=R3~jN0H;oHnpvl; z610`s;y{Fn?3F3zL4~$T^`so39Z%QX4BKI-<#_FTon@S8$rAH{< zOLWXv-b-@3>Fay&EWju$7MvDlJ*iogUa!0EC3!Yn=AIdrosLdJwo9ORf*?$2PRpZi z9el?LAzIK7WOXvvyvpe>Qla%X4B9k`(*OoL-jHb56{i;b!4#Kbik*3N7HP%+%3)sm zeplhudc60NlI6bN>%W%y567Wf_W6~P3QGi9F@Hn~DDSd~KQFFCv`8<;iei0S7hEwi za&&g&k(8WH!&hrJBs2tx8X-_Jydq$>`klNpoWw6Crb0MKXZ_W@3Ona;-jZJI*j>Ik z%p3Z8=;`U$E!z9ZoR7HS&;#004xP6Y#d!i13Ns}ZW*b&arP%ykbuzunuGcCWlm_JP z^9MOWGbT4K&UKG-vpF|`0i>cl3@KO>Rf>Y5Fr7|06eH8+K(wcJOLGIPOQpk9w%q?S zETT<N^D~A^2Ix8=4zer;)wX!Qua~(CTr`xi{dQICk%V+C0z^O@ zFlKO>we_cMDz$WVby?mEZG4;(DsSY#jC%pd`3p8q`GtfOT2_kZ?Nh!OQWNU9pn(sg zw7gz67wM%RcFI)t3cazTLJje63cCb$BmlpGK1&5S-y<26-*m&M~CXYJ605#mmT#?gIpz>M8Wrklr+bI*jS)dmi zDZ=6FV9}<(H>xGWbk>n7|MK2}X>jMqV3AR|oKdHOi+@h_!;&4^6n(^6D#29)!y1M~0Hht&UJatZBPpwPsDOnxhv_HJ4wQ zDrBd8&BUp;we941@tO_f5DvFyVVvfu`b64T>!m-YQIzMoY~BgFzLS={p)^^!;brS# zyfSE}=VYw2k`QBRDAH*;rO9!rMWOg`d+R%u7nHu@+(DIE60P_$MEbKn&Zv-9X-NrC zT?X4Yf<4*@HTAp82vsU?QM?5he2zxDZHPzp&nhdu#fU1}m4!Q6=uLSNq1+u>vzgI(VYj}ZD@4o95=uEMo4_UNMFFJ2w^ zo>zX6GdroTyh6=z`r6XeuLMT6)N~A5y%KEmpxF_Fay7&t z=7>J`Po+o=tz1X~Yn94enHo;t?X_t)YZWzEzzRoCC{)MG4+SOe>!*W_O!s-p%{of0 z0B#s{VhQK3%*iDZaBzik&xWm&Q$q2sb@yGGf{5qAiv>f~Gvq&P8Aor&eLdAPb8~H+ zoCJJ2G#nciXz^GLPi~*F>grZ-?%)fTOUkX;VK>Gd2w?;rfd=o4-{vah)YPVmUkgX& z`R6hK@8ju%`02X-PPB(2d-=G!SonAqy$)(|TMPP1&aYyXr%TDF)Qfu6*L~+ZzhZVW zja&eyZu-yWl@aaH?=O12JwuxsXf;_zcWLB~g8MM=5-DfTqYP_39uxw=L{$Q^8dMJz zr>Pcu+{RpH?E{U|5?}lK!Fn~uyWe+JI5@a~QLWzc(7R{;-+Qq%inP0$6mEzH_yCK` z6RQQwph~duBeA97aXcYHV)DU6FH=KQ&)n&)kPYLc`I;W@Jz zVP`isGX8mJ7W8p(^@jYreWeMK10s^&XhpD;C01&x);go89u%YWZTWIn{;ne=(5~sb z;fM3FvJ(WZj=k>-QdXtPWm9x&l5!V=+_R5kMIU|c>;|l(>5{UgNk}O|76$Y!qpO*^lKxM9~@lT@UcC<`GKm zpVRdb$X9JrF6lo;o=J_MghqPmlZ9kw7c1_D@Ai{a;Jy9GFlh^OZ`==PT(D*oq}Ns7 zS#g*mb3uGICq;o3&wCr6$IchdAE1&63ecJEr3A0BAf2FCb_~VO)oz#hx9e=x-rZ7j z59We?eJt8ItZ!}}y7*3@CUJ}H{L-7_U6dZ<9bk^(8GO^FX~WU$Z5&d!mXT6sflAm|bK_bLVn`1j>7R8kM7Y4SWKG6zpjLvF)+s2{mXqPx+$w`&?#128XjUK{*kakhhPCcVM=}&KP4-rBk=o)uq}9 z($-K$g`)L}gT()qV(BeI^9w*S$hR9MD_joB9N+_g7-{2}^ax5s04$Mg_iMEJmOAm zDR~WvGxN}bP|;2%?0O~Ir6(cg)ED*Zey;63u4LbJ&)w?=vqyo#Q>fS;YBx>W?mOO| zEJX8c8~^U_mbM@TsakD6hN>n67{`LVfLc!%mk3%r2ZKlAFb}MQ}a~~)v^lw4$CFN1e@lm1_pjnjXGl|X6 zuZS#xmwzIoCvQH9{I>I`QI~5YaV~WScwkJ!&59U6C5S zii-4iu)oiH*b(~Cc~Rz@4)v=S6fnIX@>{PDLt}06>2bq{kTV;j<+mQUYNOJ5qT9iY z&#`$j5es7;{F!4PxCb*cxFq}|VJ=T-T0zHAOApiVtjQoaJmu*mNNOF1a?}A0hBe(R zR{6Sv#<_R*4R-yYxs7*zzP&92ZpQvV)3RZIuGE z!u#g_Ms-*Qf{nz+!>IYX_N;<(%Jx_G%$N?*2KY^ydHT0R`d*6!L=qcBM9mT$`g4`% zf-E7rDrggcCkrprAj)m8gnA|8K_aa1OIOq2*ciqlan1SFFwOp1fefV>l#;HxZwS~v z*Dqz5nVD(j@1Fzh(PL9jn=vZiZ#>5F^?#p#a+ZiRV~Tq}ocH_=Mq@$k-}$QMRe%+S z{~f89^N$uw?6>N$Sb>iqVFHkPlSOTHTjBo0y*g2SU*Naay7I%xTvqK@r_3>)yMg4` z8y>}s-I!>~9fLmshtC>-8co7sc}ovT@R&ayL9rjjqHa&2pvxJV?$=ZkWlnWxtWXl? z&6hmRk+m?=q0l_hp1c#jyyKO_E1$da(!WFI_}}B@_#3(b2rLGGRe|`WH`|-F0b(yC z{yp8|(8U~d`@Dn*7Ty6T89wuvA5R{ZFOh7@g~Ghbw;ROi7_n+k@vEEpsbsxci^}8G zGDcE$x`co4Bbxkbi%sF9{%k>Sa`Swmg}qpjDR{AA40WHK z7K6$!#@p zm^>SQSOEpm-N}8q+n*R2n;fa|KmMi1VR&#urhRze)Z`emZ?nIHlR3a!t+%Rj=4P|XUkr<7g|Xj z&v`k{8>G>G-vGVVa>V>p2oko{0i6pe#Dzry*@_ga0JT>h)cb)?gc0*hUnmr6t_*=% zG@G|Eyp95%;ZT+`Xagpau322?wlGsHhh6qU2GI~zng!kG@7pv&mqHlODIjmEC;1^Y zDE4tX;~~HdnnygLiusIUpg6e%$}Mr+?HoewFN5Uzi6P~u0yWXZw$qT zLWN7mD8b0E1gUkFU*+u<#!~Ys*6U)t9*GeV$ld1y&!FEd-BN%&hNyQ*eCySVhh6!; zJtjdn9_B3wz5l;BBL`aqFn&xBKa-=P%X%^JDH)5vpJ)=h&stgVj3mQXU?z{<+6=EX zZ&uD+mP3s06?;Kn8^)e?y)GLqb9V%lw#2B@>;Cs>^6Gj94n&fFSj2t~zXT=oEf-+~ zhb4pgkQOkJ>%w~|L2GeHz5N41t5G+1m&}g3fu&Ks2G?2|+pO)I$l&)K8!ohju z$=8!B+P2fI1`S)df8xEyl??fFcXa~^r@`|e6Q#`WqHb@BF*1|O$QTh^g!m&;Im-y1 zVNwo7F6tZ_4Ki#h2;d6A{p8l3u`O1v%bOr`^|ib|%-dglhR@S*C>{IeQ{nw)SnHtN z_tM-*H7LeZuH4u6(YkvG3Pc@lBvg%~M(bQ(+s15M4lF?#>FKbcXKJp%Yyt3^Lk|GK z)a@P-N5b{D6cCe;EU&I|Y_FMOz$kXN|9fW1K`4mk&-|C-Rw5TZJU`LjZtjz1@)_Ui zfAkEp!})>t1=rJS?DnR>*Aeg@gw+JP%?(qy7=Nft!M6yG>q9WqqV z!+r@{s`A2-g#?RqySPF3wn;O0z0-8#<6;{@-(Z+2ddM+Sj4~!PkvYHi*ql8PTHcYF z7)hfB;@U8AX?GW<<;Z-Ry)a{utnJNA=I?UH^&aG_W>`Hz0)k8?&EJP?&3&re_ zE#Qvd%6m0Y3>xtHkz$X)fi0h61$=#AsvB%xb75@|InD< z21lVko7Cs)oU)Uxf1mi)HWeqIFV^?KQ5k#Af))Y$R-IRQ@49Km!Ma@2VGhnrwZQ6y z_;Nq;J16AGmqGi2HD6p0l_AxfNAkb|iW<@d1|>G9t?d}SQ~u5#hqj5U(ltPjz_Z5n z$Q^`y`#_>d;{y@`mYL-eyLp_5jzQAf=o^K4fXyBNk-pQmpSyFYCf;{zJM95f$ji&i z?lu2gKD}B~b2qn?c@UI)zHs;ox}WnO1g6Q5lQk$Zr6UTV&m0MpOMkW6!uWF7bsXOb zRVDMq#O!VEQSK;NlOhL0F&}9+J3_)emc$)ix0sI1=3uWoU~%A z7?-|=(^$|pwz=f7w-`6kuWIkC4PgmYRJN2Xk3JuK)ae3k?KvXvL+aX^A`DE2498_# z;&`F6f3C$&XcH~Jb6f&}|Jp3C3ChN-v!cu_c^HC)L_`K5Joy`^BuukA+7cC^PSAe% zT&dF2E%#}_ObL?M(a3P~liM-EZ)%saiLHeUx5M$?*-T;SlKteYuS;!~ind@k;*WB# z*Pi4)%9(@mxKT;mQ+W8T5?}0nEF;yBi>&hygaM zs;2tyHwOo7IXO8%C@M`U$=*vBVpxLif0I=LBD>8@TbTUw{ahA7MI=rvD`n9aR)H#l z>X9orli>y9YT8eqi+5I&ydCfC>12rgjOxoPtgRR8$aZEBE(Yhm-e zH2Uhs8cDXxBGV$YC;JjqL2zXM@rL+=Ux$GS)sq)U--LiY@5=#B(N7BFqOJnv*$;mM z!^43LY@{3#)K%#H@fXADZMmj}!U_pShB6&;Z4T@f{ zv=i(g4P;m$J}mAU9oq4bwuOSI-->~$r*unhV~^v%jdcyPV|>$Tn~#}aLNwC26-Kc^>og6Pz-Fu_wX10*Q%Jo#AA8__>7=Wuubg35!%Amxo-y)-<`ffR$Ag3Rox7t z@i5D23Pls);M25o3;KBlx?Rhe&evIC=6L3F_ei1|b1W8w_0;My$QHGrY(*Z608G+8 z7KvM#z6x3{R2kAwQk^M36DbG{9g<<1kMR$T5|lX0OG}WaA5Gv_jT7Hier(tHpA^jg zCZu*_a>Tgzs%34okYN|mLn?Q50CH6v$Z(?M_`*jr7kb!^;fHW(fUW7@i0)_p=0kKA z*>@_6%CCnSr51$k|A+8fxkqLe1KzEHC~tSdNlSoo1TMDgK4FveE`Rffv4l&ELeJ>9 z2a36N*Sv*$v_1TH3`rh)!*B)S^?ON=ZOo*zU4Gl8+}wVBiu_LJ-cQz9(+87$4KJ)S zOMs060E_(y3JH4(-rapJ*wVbT{==eUu?Tqa>^I6Z{s?uDgB$^#GFvp75bdhXi+lfe zs+>rbFJN#jfGT3c>mgp9pq0Bm-d|y79 zBx9JI5EWX}qg4n^(uzj)&d&p8XGTo)XODfsVyEqKZEYgB!4(lEs?O3Ds*i0B>1nwM zX@e=o`0u9X4P$O^iWIt|1CQ#dX2dGa68iIGKX96@p>F<`*jV%||8R8SVU>|5!(^-I z+=1$GWc7`hcwfCm#c0XEH3e1Lv*5L{9p=i6CiN__?!J~BPl=DQmscdPPO@*P=azFS z@L={Ks^heO$(>@2G|t07U-0@VgX^bI+&TY8d8}$iApPsReba4!USPU5W@b^>?RDpCij{FlY81f1=qU9ecsed|IQ6Wh6Bpg1@ z2B<735wvu5Ba$2h_vFg*6L7(2J9$m&14L}Sd%aE0z3;vD zTGyQO$n$7k9l1b}2w1?RNRw?}*-Bckr1dotgi z+@%3VE)>vdzoiNU6a67t)hv2T8Yfo`2|a6i=kbU4tKc6T`rMzQ*%!XD!t$09M7$bL znNl`?k|Y6CBc;bMo6F|X#^}wo70nxu2z&!-ep-S8`wX1e{2&W6nV}2V%q^BBGO==P zsnbFD{AYII;D?+!+WY+3uN+)lQprVssSJwY8W7(#7vlf8okk*f6@GKk1>A=^5?Ldb1e7Vh#xwTzv(P>uhVl=Xv0vIp>K__##Y+xb#iu zzq20uN5g7)w}Clms$dN;XfX4w@a$DhK?nXdUsWpV@s4@Np^tGkCpssc`BSq&pI^AS6czDpOBMF z6MM!22Jb{yL+$v|=gtyZV}ooz0mo8({j$g=sU@QgvdsW~B;*wkq}zlHcW*)Mjb&{o z>)7SZ+HGGJ1wcgUqg*@NlvP_KhTAo#rhCl#3EnuLxDV;MlFv=F95FYrF ziwjUDQ|d`fRZ~`Xg?AxG<=n`>*yM2-MkO-zZTXE#L?Y3B=s=0QkJ^B;b4hz~+L`<@ z85rCwqG1Jr_k)PS;K^LnFufS^9v7hMZ0_6v)B5WAdZ6Yq^!Co4Zd~a;P%W9@tz-f! zCj*cMt=};(egS>1Zi}Q8CS~){j$tP;pMvwSRgE>C^#%54 z*JTU;q_EGPGhZpNM+P;am|#x31&1iD&3iw@I}~6U6`%hoy;2%HZ{dM=-s(A}C;r#3 z`q9lEjPL)Ork5#?%gjoVP&*-cE|3Z})(i_o$P^#Lwj(`^?bc0=nV*baFHt5t@2;G| zSx3WIAt%pn6sptDk`kzhmhza%mGYG>CN&^LvrAJV-U7#!>EuW1SYgp@l%*?EMRF0K z21MGnz}aRp`~u%fVY!qC!LU1x)8Sy1rjyB%Z@RgTjUQZ;NcP*;5Q1q9y#=j2 zUzkBNNuiL_zc`(7Sg}522$E@-eQI+;CphqAf^i|dyrQzEt}YOsQVuDh=PP8_*waK* zZw!X#+*cr_+rzB-#oEGxK=>}o@pSz3a^LNJ?$iRxw?u^C}VXZgegIz%@a|%{%P^CM=Ag4Xo1%FJmpP=O`eY2G|gZmEhB>| zJ0X;H@&uD6?Cxu3>N&TF$yamp;J;KQkOTC*C-TOWgT4019|dNWQkN>4kw*ZkS`mqnoX`(_)plZ0b#VUd=VWoGW4&Y)4r%Es1JT`<7weoPDO zq~g^BLw~BspR~ROE9&?-25p++YNo$U=yFX{!%&eM+n_9OAw79Yp*oa135eWEqOTWe z9EKz6^l#uSU0+smkmgv@r1DFRDNM*}x={OBLa^bcxM{unVF{V5QUsKil5on|3XS|I zsy?-%+y`a2wD$G)Q`gqkni}=+MBhm>STl)SV2O0;tUsy)n6OVgU?0)&uOuzL&5KU` zIOp|ewp-TILpdv?hL&4Wk1Wd`**%;nFtn*t@$(<2<;aRU?e77Vn&I)&utChg$6?%xNQaH*T_3t4mgSjs4!6H*N$_sdjfhgoZiI4Xd*V>F|q+Q z>CLZUWIHLBu!I_Qp7q7IbZS$KIz8)*@HX|@eZ}X%DR**80AQ)&l9Cs*ui^FeT+I3% zk_>XGX=$7L)g}O^Fl|>4u=L*6-#LN18#bgzMGF;z7S5hvIp@)>QbtMHqwStGA*5ACnuXucF z|Nk-~_&3MX_=gQA6jp~vapbE@E`5&gz-?d+LW!i?dsUWIHEY^w3@Wgd!47I$^HgUM zRjGv0M*3XI*$~)dCX1Oji)q6s$(EW8Qo@2zkfcYR`D8br~z2(P-KC{vkyR%H_*?G zGX92IS{V;l#1Vak>XJzW`xBRME{~UsIHb4AdkiA2$9we#zwvCLVUM*dk}cld=ZCAm zwnl)7a2n8!1eP^GY9zKkmSFj7{k}^pu$X}K{KO@L@>4h`y0wDPo+g%6 zHQX)sbzDW`d>s%?>-Eg{o3kK@W#0Scs{AG*-`^x(4b$1bUn|L-wxKyae;LG$KD0Gb zWe!QSB5y{hyP}@Lv@uqYd^w;6!J>X46%Oe!ouk44CGTkcVp0!7D4QWutKT8bvHn3uo|tWaMU(jI$7ODE_iV znK~frTcdmN)BTk|iSDp_&Iv+tPdrg?t%YkXP#YeJSSqFI6H@c&8mfyG^1xn8UWEO!B97E=bp zAs$_3&6OFoEaykvdne`JQ;8PA68c00=6wtX2TAh17URC6N3&H$jodM}^LJ=&ElT$u zkZxTjM#^^(l1gvLIroU4O{;5V0&o--j=vc#19(~(lD_X)Ku&5da<~%KWVzBAM-B{h zK*(CKfP?WsjCH-X!lzHhQDjI+JZfqanzd)R=a%n)jv7Qogkp)+qAu6REk~9Q9No*#?~Ky%v)<(5sWqYgTB4caW@ETqDl7`*NL|k(%ge{ zDWNK%%`<7V(o-mZmDln^C-ra0q)+UQXGd()(_$~vU6Ft+$o$}(q4 zA`v<|QZ0Hl;Ku+6XMS618tPx4zsO$=j<#IE#_@&&Th*CA3-23oMSa_u*V*>*V(s%W zV1lQ(ifQ+cfbA4FOq;dt-U`t~^Wqc5(dsa2l8@AwE{A28s-SD|VIm{zO~9k>VKFi7 zV(<42yZC@NB~8hVzx}Jr1tpLd)5gYg3}pN(jOr_a4WlLz1Q*f-zIW#E_|~kO$b}9u zEIuJxVYA9Ur>=~mCMF$+|BGObPbJCuvuBP(#GkfIqD*+L$`8L^)xar_Gf!x*T_PJo zXKqR-rl3eN#B)|IuD&oV8ciJ?696;<_{YB^G=N$i9v&_)FaOohu)7E2Aru_omvb{* zvt)0IiZZ9o9ym^ku%2_vOA~#430pI3c5DPHGB)3{Y(Et^@H)l9#!7nn{OpW(zdSBB z)4qPSoeLti$3-vol_wCqfFBa7l32pptRm8B2&%X$-g1-7Os@68mv87$d_(dHhc6U4 zXGUFhX8`a=WP}d|wLWq`rD#Tsek-QZy)64Yft+?n2-cp~?xv1z{{L=80Jdi@!4J(U z^renSdc!UO77+qI|IZxW=R%pZTxS8rgr3*Pm~NdMaTiSGg3~$HOlagO!1gL&CBtFUPZg+<5!s|fc^JdS2Gj-8A^ zy4>SBD83Bm*x5d5Fc9a9&9}K78W0csm7Q(qow?8B=V>6KkDvqs4s(3o&%D5~Z#xDC zL;$!1z=Y}=8d|`513!SF{2UKA5M1-OGGH9FKST_!`3zH*`YZL^0M5(%cq<_{`jsN5 z=;>VG*#O6v&oOh(dQI{z!smG_=Qzq8F1q!_4*h$3=5Cko<~&%zbN*%GV|d#}K2v$u zxz<(G2I~_|@+*x9>LNOydt}(#D`>;lC_TQH4M+e`SXKG62U+?sd$(OXtTdMcz1}B9V^rlkg>(;8N2ftUb4456GQ{gpypAEpw??9qH z#G^4mbNsyg^iZTH!_C?>^V2`wZMLsJcrGwch(MvJHCTO_#a}Y6i|-A>HgydPsj%x& zO6a?>Z?BIM2MPjdSFkzE+RXhj0`>jd?6BILKplj*j|ZMj_Is5_)XUL~y9}U20z42u zpb4ILuCaJQh*>jz#>T1Gq>zaQEK+(V9^WIw0UQCK!2)`yKz|-ElRG*hDlf0h{UoQ2 z5b)ah(>D$bPTIlAc6Uxrd3)HKtjB>f@JXCwIAfR{oZgdt1d0Hc1WfwMcL7gdUR`Wq z_qts`5t}?6;+K~iZnNXsl0AaCEr#z@m0$?GUxo`)#-5r7eeS`zauEyoXucJ=92^`x zb&F3bbAVOXIOy#bbX5SzWdDv<{@qnC^T>V=BK_*xwaq{%j$7&rgHj~P>*Y>#`m9`B zx@a5|BY7#-8MK9hvi6x6~!EpKMK| zVCEx2FN4q=ty3mmajYU%!Sk z4u_ip5i|~CIE&qYzGP>|40wk}JPj!pRB-7ExF+A!OBGiMj-C_6U}W)!2|1R-_%EMI zdn_a8xO=YuUaPG2Vc`^#)c3vQao5N=Le6%}ykF7NhyC)7+7w=fjGkFFH1T)|2QJ17 z!S}e!wcD$TswP=I-riCnbGb49?|%k*nFC$8zMZb`IORO8$h&|Qv336s%obCDh%)Gi z}jfF!JRK;Vx=fmM~yNRNcFL8%e)sxsr{>t=GOpwE+l*r-#zfIE~G)an>@Z^ z(1_J!3(mI1lg%-y(oZuhSCopO)LTi(R;;)>l+VO*7)EgZY8MY+Ekp40`i4x&Cq#Uz zo7%Aa*CQ(AkNb0S2oT2IkvXwpG2gCy_ryRSek)&mwugdFWK!eq9q1`aWV8QN2+^Iw z4|n=k4-9@i0*@U`ml&+*h+kTYsMduQ(2_@+#8c+Ye#IGn_g5gm=Lm!0v+B|cB#TqZ zi4)U|yysUq8}qRA+2qjV`H%q)6>=c7s+Xtbb;n#?>#ks0Cr-Ti8Dg8Dv zWc@2@0bYC6eMU#@5wYDC&ft-gU)CWcrbpy?ovk|LB<$CLhjJO9vGQ666r@e|egmXF zZU3tKx3UeEcb&3r`E%?Y?fho@V^Vb`6#S~m>htK|#9gXxaGA)H+?p}MCnq~fJ|4tr ze1=sMf+=&d+|3&f=4%HYR1YKTz&YQ!@=mam{E6~;ncb2~QbOVncEJ|3P#aS1o7?A! zOHN*X0l{lG!Yec?q?2{Sx2?Sgaf5~LQp&SLg6~|3f@x8EM3cz6(f1=J2KFF9@HS9h ziC+Y1cL_QxTg;v@QLexzwxI14pNEvR?CcIcP}0hmR;b|F;o}kHvWcUc@T#5pEPnUM z>+6bMgL_KL;8qvE{XYbhpFXnkx*)aG`|0R3H=jK?%(1ZGKp-|%d^`SAPFi#hhL=KR z)#^XL5Rqu)77e-~eaf-S@zR<+v~65wSr}_xk7@dk1=ul9s!w(Wq&7hNzT-TIh4X*V z)Qthkb68FoM_dTF$<|VdU}-w}G_!~U3-8ci3OAqf@~e?BwC1;P5;m{OsNOnkvyFCjy0os*)_Ehq{&OglCYYI1DMd+Plkb1mAP9(EKEB4%g80LgEpw)wHk{;2uTkXCPRC z=QvBy^BrJsbJ>OF9ZM*%^m3SuQn`&X;&NC91kAvnRluZ`Rtd6&19*@^hGpNW8aa70Ohw?<*SwQ8@pOCFff5w zKRki<^7HHbc<+g>$)SoCBCrHz!Gu`9F6OzA2VcvtJKhg7M3Vz84y$_Y!h=|EAK%c4 z6PJay9n}01aIjuGTo2^w5>CEqBi!2uAKLr`3;UnL`@4^dUTBFqIvS>nK+v0XwY!oi!9mVR-YX6_Dkx5NVnB9AiI^y8wLam zeo|P$_5r8VbR4yIL?GcY|BVFwCu+Jmf$$Nh>Z1TXNUwe2JH^+=N}fy1<1#rIk#yc8 z=XYYOu##BeqO^^Oic(rdSJim?8bK;x@rHQ+v(yi>fwY(I6Aae=3?`T(ULT#$H|X#a#hT(68uT%T5HzyX`>Z3+d}!X45MoTr9nJ3yJDT!< zd`lRWn~#R{;syawv?TZ3eu{}=_ku`F+m7;0=BoGpwK`om-b ziEQE})8=0t<10>VgQ<&s27bzQJQJAm!Vi-&NYacaH*#zxbrxCg&+SG$6$_v|NDX$eE5^_ z@3_6Uy#HzQxKyfpAG(yxJ2GEijB-M7qyu&$fuJ#`&`#jCc?%v{UGR;@7mdkR_;z6u z!j5k_^O@EWGnu*ko)evv%R<~Z2pr00TAj;H?P$o|=4gpd$>38-sglYsuY7x{U_5zV z>j;4?PtmuMbHzsbx;?ed64Kxq!2?9&WdzSvt-s>DIi$WVcQ<;6%szlUu~L5aUu|Ms-Rmg@aH^81j!Qb6jl#zVH_8eqluclle|gM=KA za2zT5-I8sLNKR}|NU#6!qc<&|+_{nR6bhrd|7zE7duSwi6>|r9>NwP=rCHT5GA!M# zLK{OmwX^r11J>iKf8DP6#)Y43{(}KDRvvESU2JtRqI(Z*3$! zmf{t(w^*MnOwiea2%OvZ)a2oQ<{3r#47dB+| z>Lb#8>mX%%wMXT%i-c95~LKV>x7_SKrL|2*2YEkK6EEf6?p|E{ucACka>3_jer zTb1kAH%taZ+8srQ^Vtz?Zw3o6(E&FRQEf%xgQ1TaBM)jbBC8TF439b5eqv(hhIGuC zDOrY*#^@?0=r9~Gt#q2BI6`kP=+hBa8Qn)pwNsALPS*G|uj|;HOw-L}8J*0u{u@zQ zNE8+~9G+SoFA?jfC+~<-#eVr7ATYlBpa2N>8ypUO1V8CH*#u!F2BtOnWT+xzTA>{oW2q`ZkBgq)k$ZIiAXKtI z{Cu8k#V=-yNYvgp2L}n^gfsEbB{U`Rh@AV?3=&3UfM;gveDUdZN2l|5 z8Ldv>iNS0)J9U8qf&(nxaP(^0>f!lj&vQTM8Ln~7{iw?W{9`>TxeM0x92uD<|A0JS z$TQjyMl$HDO{CE`TNK~>TaRi8rN>c~MtfK*S2m6i`a+{>n(?h&mb`%1S4caN4^2u` z_UnfRp{mz-6D}!9q)+Sisw&u5UbLgl^VPY?FSICP|Ci8{^RpI8`uQm14gDc^jWPI?M~Z0VSP244H3Az7mC)`r zF-Ps__rrK;739_a7;~>n>ofwM`GM_})Zs_TLOjE5PZ?^es;YmJCw5nwo&KwshBsI; zW2sCZq~%~=i&3&9nz!&Kg$UUkIE^oV6*=`zWmnggR2V$(cXlYQ2F#{c=sCjCP6 zps!ha?ptD{KS5*nr!k?sL}^mNfy_jcN7O?<7^|cYDjeYpO|>X-wkw1H+fK0qYVuBX zp6nwn=AnJi(w;JBZXu8D97K?CS>-RkA)QvK2#rPfb3AeB-+yArH!E%4PF-J>B>yje z;S@mM0-idq;us7|&;l3;B(k8G5+v6!=n?C!Huzb>~+O>+zLt~ zUSi{@o3vpEg=bsNr$!yXW#J+Md>=8dXKJP0`G0dr9@Q5PmG1|A?{#Q>PWaAFc-Zi! zg|G!*&6%>~B&_MlPYD6C3W>XB?R?RF)%LCrZB_4uB39X96~e69!r;E+553VZV>tlu zX{DdIv(|u0MJB#E`yjk_vB}wVwA+BReCF zs(0D?5s@RKpX8;JWBOV7SpgH*fX!dGyL!zxIFx|jPHO{lnW+Y|VN9mzQr6|m`##A5 zr3AeWh(&vlVQcnd<2%Y|*x&7mA{6KhE|{j6!By^9MC&*6pToi#NQK-Be|b6_7GR@| zj=ukX27Z|XpaVYFQ)1GWeHo(vAw`esod%~Dc&?uD(jNU&+4asA6x1=j&S6~5 z>`Y?pA#(4gELijd(KEBsY#;+J}+{Gn`Jt&xL$)%G^FA^F_8ao0cKM((n zZ+z$m*pG`NK*E^ztV;jMQr-0P2a>>NSy5Z%=UG7g7dT{(of+zc^w^~+kW#suyn zBdz~6Zq0$JILd(ZWS7Tld79*vdY8Nbs<7n#TmM={As#qQ)l8a|BWElsfdQhR|y`;JjnSxg%9Dqg0bGJ_{9jU89;Nl0t z(KzR?7c>mKZfE?PTpCSF$n7Q1fNlQ;+S{hcGup`h1G)7i5z`S%z%n~h>ZuJ`?ge&w z%H$)qfR%3F!9lFqa5Tlc&t)0T=W-WhR%6LyD33QM~cIKJ)fd1Uq#>|4v-5a} z&x?&;x!rGZGt?s;k6dX=Jak|PxEq-TaPutwks4V4>k+j6u1(Ce?FSB8RC7mq)s(xZ?*TeNc_+md$Sv2;jR7jw=qZOJx324jBlmq=XPJ0 zS{!#qIqqB=mzI~eNnZ+ldhL0S|63p!=$?Yd)7ikV1P*r&~9u8+GKlZT0L#C@I1e+^y*=m}Su z-SDgXqXu(Z2N5zK|7j->mlYstLj5!!KUAk>n_*sSvDow@OxT~AP!aC-3&I$|cFETR zlC%>6N7i{$Tvk(CIikC{B_cakpF54WSHO(w!}>$k`U91xw2JS#_%rIDy_0S1gr?X+ z$gULSiujc0mE!Lt74f^u+WRp+)8P1qm=aaC~>45jkL>5=L58vUZhycm6lqCF9uezeDyI zQ-72nldp^Ab^N{GBm2bWfqm?Nr04yB<*;fbBTnxF*ZDl*LYdpaYSN2<(tVtItxtc8 z9M2ie{_i)IMkg+@-ng$~F@F8K7nEsR-}@db>V4!5O}C;Gkz3^8obv68F4YbeL@tTR zy3jLb%FUq)K47R|Lgzo+Y3F^$0tF_f3D15y(SbzT5XCHc0JUmH@J@wAR>0a!r9>UC zw}y%Q4Mw{9JL~FfW--c^gi(>)M!-bH$jWvr3J;~T=k#mAAg3^Pp5FRWgXL zf=%7uHb6}#i0coU@$i3E9h}rAdXH+RZ9FM{9%ttcipVa}jrn;UGw`UiC6c7)H-vd}5 zZ!E@%z+OJWTe3`3Dpm{WcbHO;W^DPy`sTcgCW6_lgs23_AH_oh(T{hfhPHl+h+Z`N zL

f6b7b<#I$;%G=77F5q`jh_EYp?drCp#@FRG(T^z|-R$U;%SbGw7X5F`mpTT2o z>o(l8m2{;m$z2FAXm#I_Ct49P_4-=|Pv^XH@_^Qkbvl8sm4-n~_`_9EZNph_+N`|# zqn!cELWlVrOMwt{a35;`c*^|sw3h;H@U^IZxiU;l;W%!&JPbu3IW$b@TJ!VO#~~&I zt~}Yqk$o)>bwqm;y>AHLxRhknUods1_tgF@Kc48&oh}}!auK@J!~|r*&{f8M41d> z5z9mnM)oSN^|2u6aI!Jrj!a$VL>Z+w9J1AnEp5)S-eB07vrR`x?IZfs$Ed@PWzkiC z0jk(AY2rthZy=0YDD%`r`R4nmRGW$lYLr-h1kH~$1$RLn`6vi`74l65fi8}enB|F;B zkEv(&Yhh8$4?CqxNkJ}?)P$9`+4%r7qR+p@t`m>b;EC*c*vHT3ggUo3gXPchM*CG- zr*h8trCuV!$eR>{14!JYS(<%%AQTcB}`N6-fi*`0*aWjF_geyoPZ#*T7u z3-G7e{pKqg#1n83J4g_pt5IJ^PK$^If|sK&^cy@D85Ua(3C`U6HP|7D-NMCiJ+YZB z4r{1~5&)0dN!7bXFS)GwZ0GWHKd@&4JmLG#PQUvRw2mQ}5ePM^?Wd^y>k=156|Tve z>lxu#ZO4=~mYb;AEk|>Pvb{0I7;O4kCm&vmQXvif@sn~VBoEqNaEBbd@yZxsqd(tf z)%aH8tSoiTSXUU-#>6pF^ASC{2tVBcfj?KZB2TrTaNb|_eg0ojHsQ;3EK4;!3WzW? zKNpaX;Y;`sIP?h2t&QDsPaj0$Q}8Oitf6gzz=7bGe7{Z&egDMsd5yGI6?}MwsIc zp1ZZ}5g1$|H&zJgBKLM0SiPJ2bUo=W65w=a=*0fyN_|=}dQlYRXq^W3Y{d`C6-V?Z z@#8+}GMF=m)|sn{a_H$L30NV)w$>neD#5**dtI~BiIDt;qFE0~BsJ1K!2|bbg5HHUa4zx#}*-NKLHXEAe$<{`&$~3uMeS@710oMx{gz@B9 zJRBH^|J*rr;vnI8o@m@~aUoTJn5yxC&UkRr={{cE!xwy|Oovh&V`CnU@0!q*Pl8%O z9XiS7-&mSu0J(#~BoMcMcaj(6B6zeJoOvCm11`{m_S_bdf5AWD4c6&497fL5nUp~) zJe8!xL-$@GyB=&Dh8utHl!BrDaW|+WsWVS}V&uMpQQxx5pcMgiCED~nrBQqiyPupd zNwW0>XGoOuF#M(`RYb4Or^;@fK2nT7VK+AS)8cO`!p`M!ss8D{X)8^aX|YAW z=39knyx4}}fNCVMS+ntL=HM>RFT}eMiX;36ju|z9o+On91FN@&ZI?*#&|HppS_ePr z#-D$f*Y0ttQxa_NHN0<{gO=X2e#;1Uz|I8JQKN56}c(G zySe=!&l4i++MQcJ3`ew3W-1;ONVf#pd4;zJBp=UL87$u$ynG|wy_R_uzIfzl$id@C z2H%W_HtOrzj@z4lu-}^sN)>hZQ1k)XGW&^eYj%JRv9Vff%;R_d2P!E~KWrUJpD=k3 zCFMj45=Cac{}xG*E%#5e2+O^nax`%O6R6rQ1(7-hWaVcskuX_oBm7#2P>^^1C0tUw0S2Jolq^k@C)7e1Ko%k--l|J-*T9{_}e@hW^~>0 zl2ix79Hhw(GaHpwpnA)*Gh^%XgnxOD&NtIf8gYxROuWT3l}E zJuEt%Jdfcv!H=Y+9k&#g&{m7To>RbLHv(WkW?TmJd%u{i24-8pih3DC9k2JY81Kvz zuXfl2JK7Evr;`t8jV-j`vMr|=rwom$BFnVC;LYomY5eaytrz=pWc~`rcVJ?y?~}j) zo4`P|%^-#A%L^yK(3+ADb5R-aiKt|4ug1qh8+?F_mD-hD@3>ru8bVFgha5<5Pahkz znIF&LS&!w>G}p`5=t+li%!f_Z_@hs|Bc4Fw0Pc0pcy$UfwgrYTvMfPbVdrPX(tNgn zR31VYwOECCk|ANxcH(!YF1e4H(wkqR9x|v*o|03e3vu~lIzMC;j6er~fs|M8*FB$C zMdN$Vn2#vh?>mppI7i~R(H`5f#Nl4N1Cc8~1PJlUptR`&H;Vs-jAg$yXwn@*M zC%IM)y4Mp@QQ5+6tZsv60&>{bDXw0;dzv-zwg-0pD)k}O3QJnE*)!Q6Ygef0jlxmr z_)#H1tk*kOIjrp=_#|~$-P}HIyGvYZjkTbATXhRPuN&n5y^o>&MKHwLq#7Rb3Wyh1 z*6kZd@9T4V^Z-?pkF;jhe=I=dotdyN5Hv0Ss0r<34X<>T|D|dA7FI>q?JSJnQk8R1 z;&s5ExdvTTZ)~@I&emGE;7{^dWvnjJt$Ii>uAm(57um6CGq156@3H$MghiRbme_y#Gm`afyI(bOz@&2|c$rJb=e$6{ z=lKkSMI?+n_e%7}13dhk^I|XqeDW*p{W>p>dy%yvK@9~B z9lTYSamS-npEMgmX2?GoTIn`mCH;M=0e{c@z8s%|PBbz$KTU{7>_>v8&OB8y!Y*Yr zc_!r!C%r08F)fFhIp0nJMxNZ_F6z&3^hg<*_E#1!aIt_YSs<;bU7RL--~{ zh=iFhawU87BeUr}%waH5#a0LR&wu6AYRHSzTK?MaJhzu97r_Fd@j3mWv2Ch^pVW`| zC+@*IKx@t)Ja)QM4%^p$={?`MPW?nfwB{ZkM9Oq;g5XZc&68wnMA>3<&M-GOyW+pr zV9Gj~sMA)XLLHGC-&IteI@D|aF|0C82}?{V2^)o0b0ZMlA3a`qV33`F?|UX@3BsoU zd*TgR+ILZo*h$;)G;D0DSOGJp)iP5kMIg+@U+!8lZq|1Yqs?!I z$d$Z`Xa5J)>@Pvl5|%upY^x>QmGx#fa@3;Eq}IW6ew8|frS`^UzJc3Y0Ip6}`xb0R zk6`eG5_sngeHw%pr(vK&7hAA2*q#0@?h1YF1!s`QM<|dWA0v~U5KU}mu4H)OGlfcG zQ+1 zja@DDw|DPvAl$$N&qbL#%VQgT#7D(W8-zper4lMQ!HY6w0%d&7DSxbjHw6+SYwB3B%o1Cw> zZ}f(Z$a!wX&UsY~etUX@s%m%Hlc~bK)-&*Xn*)FRyiQ#h`n~9UPWx8M&jHMqBhLo~ z4N$y(8G=!X8fOBH3mX4!&eJfcKELl>DdKGQi8|3;(QdDb%x==lumSJ$@Rx7;J}`LC zcdhF!iZna59onpc1`rR;KiR9~^BZ$(?MjZ_Kc)S~(;9thu7KI0rymQG(8K*$sMe~{ zrycbE+@y$8or_Fjy>gCCV@OFfH_G>r^A_d;47hRIVU0g){xJ=|YyJ!X!Rc$taLimzsqNwYR0@?{`|Mlq zK**w2CVJwv>@WHhSvni@{D}2KoPUm1PxAh}%uuTBf_3|jC(hSlqVNYVX`K?r)@d6SW!KFP-GV~G8%EgUQ_ou#;<7NO~9HIupaf-p!L zVC}q+?2ZWVg;BlRZquH~YpR4Gj)52B<0EFEH=k-9mN#;sBctBRvgN?BL9jr#{T7{! zGP0;Au2kcKIp?d0}0f3UZgZLKt^AAIXss$IUUF$e|w2le^0fFP= z<6oN0i|gxq*E74&?RS=1n8LSg-2=krCWv&bb5s|zB1M@UrW~R9-_IPpL!Inym@Ojm zC%<=F-Vxe4LKCcu{+9n>wx(N8;#78A*M%Y$P6Bfa@xLwwNqJc6;Vd8jE$CNL5_sAC zTrk!2X9^oOMaU7m_dE{x&gg9n*2l&lT<_LOyZ|v7M-T18R10mZK=j>#Qf)=kP%<0V zsT5S}uFCB(XLDyv;-9|U1&66yQj`?^GMtf?CCQ0MFOD3SII>0sW41`Ei2Vtg@oOqv z>Rea?giMs_In4<4h_P{6;75%x5;n03(-^OLO`d~DWEQAbAUf0M2=r3H^PP>3kfDxW zs-$XxQHQS|PlC2#&9`Kn1gJg9D)OPm+4SddVfa5#bAC})jB6U9VMJSRAc>I{^xB3~ z)2jvhbQ)KSsxB>j`cZtp^V9yBojEhs7$xn-X>7Bd=Ie3Y!PZCV)|l;voZu|i&U3c& zf?0A|dH8qes3_Q|*}oW@g)uAN`Tk!6?5@{$t=!;Qlr~tL%_R{l zrwI+Gne4PLfCc30D_58O`8YheBk(f7PW$4M3A2J9hC1`H=EHcNlcC4UvR3*V<=$P? zoKt9phvHE(L~x;nelz?6Go;S(-dB+zwpdnHycAP0P%5D`!9<^7Ac@^N(5fht^S4z6 zG1qU#PEP7F_z1>ZOJ!s3U(rmjqxRQ~N3QzAclsM>8zF#Jw8{PEkSO$JX+HrzPn^M{ z$GIs0)zyipNf4`cfWo|V2EVOXT0&exJ8V+#Zq6mn+Sb~DGcKLV&JF$sfqy{)@vWuN zmKXngCP4{Z+>}2{MGc3HGqQ~}o8{sOWmL9w@8f%Qh)Iu_P~}H|Q78ummnyP?f!LGA z&EWaV6@#Z5hEjd8qm&OM={ZJA(BM^{=9_=J&GQe9@hacm$ZZjRYU8>kO^K)O*vb0I z%H#WNtC!ze4WO4Zj&3x)dOr;XooIdQz50BqOshIA!7PRYY|7=fy04pa>q>B)-)%p! zfC3v_m}%o3TX{GHwwz}_DH0f(t&3XuS*$fAD!QxIn8p-0@HUzSnxR~2YpRD$!$l|C z&qx+?WpallX!9X-lhY2H%8}GhL5ko&`=wK?I%nMscUIxJ>jvIfA6@PYKc54U&O{x_ zoMzNajJ0G}7*>y%>?>V3CZC3BnI!g3-Oo{w3f@iMonqaGh)Ol9hjXITEiQ(ri zD_<>abBts}F7z+(>9X)_KRu@jd>g;sU3Qim==fZLUKL$jT-NUU3Ngf^`r#BY;$UVm zTE4?lYfL&4U6{dH?6!s^Do5I?pMUo4#GjaO{%lX*V*EO{%g=3E#i~>vO5x4?SuVab(bj zm6bJL<)3wkM}cG8X$Gf`Oz=sd30JN&)JarMBxAL+dx3)DRagk>0Eeft4hdW*{iq17v*x994X zv8*MBL`oGD36D22T*|@7DT$*{BeISlf8N7gBYY#OtPID>DZbCQh^-;L=cEcj!?M!h z;cg?20B=8a8Cfr=?IY**Et$Fi&Y8jkvV(K8scUrcHKhl-w!0>A{{KhQRdB_XbxYhK zxI4k!-95Nl0>Rw^!J%QmL!%_XeFCTCLfB^nH{YJL-gEZ&& z?bivSTYlW=8_891L5hzxZw|;=68WQgvdPJZh0Sd$x!$69xi}V-zcNL%3()hRlPub& zYVx9^m=rv|ShKJiSZ*AmmA`Ux2Qvbj=|Wdzq)I|5wd0x`3hR{rx_*wCdRpW=_0&X- zP}wUD@=npGvv%B0RaiTG%>GppHuf{fSfG8=S7T>+>D`_sfrB`%7b!-Oif@)hv4{`u z99M-`v!L)+Pf>VGfWN`09HC0O#Q@VhWSxxiVCfX*^F76@7`-?o!Qfpvbqnuf`i$80 zleEe2t4{hexRF&B2GzOQ!h1$TGDD_F5)q--4D6q|Nf;(n(=lAGX3gl0X5>;L6y-bZhee0KPS*kBw+=&Y z)aESs4NWfo8v|~Mj$S2BfCw6>-Ic-|LX4$#M$IS9*Sh4qK1efjB#5<Ek_x3K6-pJSHF0keX*7bvXa11WOY9%B1H-XAu-<$dfz~iO*+eKeftN#aR z=chB~+<*tX!)1?^=V6m#uL(;n7si%AjxAsA?d1l~-ZrDGR7E=R={)(rkz6w7se5dzs z)ps&yviyRFSm&M&62>1Vh45|Ml)aEiYY63}NoS2u6J5dW{bJGVSMMN1l2DGMGv*V3j;?_kj4tbH z#JArymM#;(fp3tPF~tbPGMGLF8xfI%BftwD9fd!CO5aPJDqdYt6GP_#G@3_TR0?RX zYZ2tLbzej^6(5CIUsw*ZX`ZCc^raj(3&b@a_Eu18shqQ;z-O1d$4*ua8rN;rGJoCR zJ7K4B>JATXh4lWHN)9Ep%COU$U7d5G0rqFxonv`u zV23UCcI%RU-2Ji2N-WhNH*$oXR4$ zm^NU{1@H0+Q@Rj&^o6&!)2&3={-8A6fR%JPs)Ux5Cn*I*l{gdL9Ekw=1c|Cv1Wn7H zeSuMxg7wJ$^klKx57Z6-jcbF@M*z`$c($%GRjQOrWgSl3`Q|d&L{0%Q0vkimoO@Fw z>M^XD6owx4XbMh&>o+@yk8z1c;5ByFJ5K<1ZFPiF&cg6s1~~JoQ*RZlCLW1~`jJmv zWp2ct<0r}p(jAy?={&%5I`0_}Y!yX*nS$Y5a?3dEQa4rTaXK$Y#j{v?0IiLvARtT7 zUgV8F&!`w2C+g+kI)TaG5&a^n9q#99v-95soe?u|$DwXI?;67VezQM51tC+(I(YO6 z!{v{G4`A(1vpo4O^_rikquh-F^M-}FAKlZP3qE`v8Q!O>1}33#v`V|#mCZimMZIU{ zp;j9XdVBW{_o)|yWbEcE8oEeM%wQVYiV#g+k1So6rc~7<*UyafY2RA3RY`VR6j?&l znY9_SW?>apgY@rSzuZ>@ni#$Ft+%B$QcYSO>X%U6y`z^p6I5NogjQXLorC zF%(AlaJv|2S>mIPWphc0r3HGEff&<>#=A3+)RMl(6gnaAJhRQi+x9H5bAc5QByKUd zs*VM$-=$9|2~k>#@7W26<6Nz&QqZN9clS{i>5vr?yUwkRoqL6_s{^9`)`xV#8Ey&Ytp5wclfTur2jn@iS%9*;#l7F~DD2Ubg3*&GjbvFQ>*8 zb>aXkJs$aAw7lXSiK&D*RH)Kbat2H4iyXCI4N>KF_DYLE-rdT%aHhnmvJKvSLTjfn zRo-5J8w_&DSNnf;a|PV% z-1dEGa`pu`Dy=c_Ludr6>!@H*86A0#oQMy4t(6U$=c?5g;e=0^8NY6z(8nmTJ{H0a z=Rqe-OL7L?2&FD-@XO`Swg>n^{XetnI~$6FfAWaYYt9VaY=F&s2eJmaw%30E7i&_-B8OT#Hn<6QF43ij^!>M*^tIF6c%wAPtV%cS=+NLoE?JW5Y zuO+LbyuCK>7-1)(_6-?-q8W^UFDv79p@NncH7}MGed(Lg(QmOeZBIWJ?YQ6g2ItHgvgXvb z5@r_?zTEZ3{5k~J70QV>t`@I&Hm>j+g*lby|E1*|#9>t^vvZS-Tfq9q#A5fuXJG7C zmv52}YW%DG$G8pE0&Q*gIaX4J*`3WW)84PDx{zY~=0Kv#GM2ZrNvgJ<#ib{98Wl&Q zo-Z%*VohxUAzAlIRM^FTkMw`oh5ig0(ad5`TQC%uirrR(r{`5BxqZsv{S?=rkbX25 zkN4?O`zPJg?4rV7Vobl(2;e0Id5>{%Y`$K}G)N5?};Z4}j#_Z!4HQ)D&hs7oMMZ|&20ygl2EC7(saE=U zLAeoPn9PP#rtckCC;I*5WWn3!l5ucL=n2%94XJUZ;Skup^BFCX9&{(G;3yv2{0$j| zu0Z+rda46LEYpWR@P5}?`35w&_d#&H9$e)l6KH`Ij%&UWfY$lov2j4ck*SZZ*hRUh zeYl6}av;rVM@;iG6DQ$eZnd%zkS@Fe-S1H!F|%!TtrkEMI48dqr92*+f~}ASG@3v& z|6F!X&(RSczlAbXKH%IaDcGm+)%l*PxgeVbYt%yBp5mo-MV#@hRpB>N%6}!fiT>U4 zG(-`Bl?_$28(PdHn3;6%Ky`=y@fS#R;bk%RY|iS;qjnqaI@HN(#@ia79adL6d)_si zX$f1pG{%j4jRUscLj<#_eLEXP(8R2yw6wHh*k&(*un0q)R~_E8QQazz!-%Q;yP08D z?Sx;}B$Uvhfr|@4%19TBSaCRqsSl3hNhc2)8f*Brd-RRWXY>>!Q4$KSn=U;SFNi z9U-WI9Ml^}zPT;eY4(D?d>M~v^pX06A-*>7#Rq%UADhf%9EDzxV(&*) zIcf~?=v&aJyAy$+-v!+S0L-2=7!I2axD^?4e)=@g^?myXU4&-w{2aJh$E)mEOCpZR+tT}Ar&_3Nu6jOjwGXm+>WQZC($ck zz0t_RzbOlKuOFSFzXpbF3iD@|*8ni9&k3Bsy>rPnhJ;5|H4z%^6qxIt8ifvbDZ&Le zYJi(;)O8x*UEIV)q5aOXJWfn8uK%SnacgZ~m0E+z=^+lQM-)2kRLo5u)zVa+uxMB85Ey29~jq9yE-^#>fU&W%5iHyUbY9rHed0BxCWD2srG867>&D0Z7f z!^G

', +'bandwithsettings' => 'Bandwithsettings', +'basic options' => 'Opzioni di base', +'beep when ppp connects or disconnects' => 'Segnale acustico quando IPFire si connette o disconnette', +'behind a proxy' => 'Behind a proxy:', +'bewan adsl pci st' => 'TO BE REMOVED', +'bewan adsl usb' => 'TO BE REMOVED', +'bit' => 'Bit', +'bitrate' => 'Bitrate', +'bleeding rules' => 'Bleeding Edge Snort Rules', +'blue' => 'Blu', +'blue access' => 'Blu Access', +'blue access use hint' => 'You have to enter the MAC or the IP Address for a device. To enter both is also possible', +'blue interface' => 'Blu Interface', +'broadcast' => 'Broadcast', +'broken pipe' => 'Broken pipe', +'buffered memory' => 'Buffered Memory', +'buffers' => 'buffers', +'bytes per second' => 'Bytes per Second', +'bytes received' => 'Bytes Received', +'bytes sent' => 'Bytes Sent', +'ca certificate' => 'CA Certificate', +'ca name' => 'CA name', +'cache management' => 'Gestione della cache', +'cache size' => 'Cache size (MB):', +'cached' => 'cached', +'cached memory' => 'Cached Memory ', +'cached swap' => 'Cached Swap', +'calamaris available reports' => 'Report disponibili', +'calamaris byte unit' => 'Unità Byte', +'calamaris create report' => 'Create report', +'calamaris enable content report' => 'Abilita report contenuto', +'calamaris enable distribution histogram' => 'Abilita distribuzione istogramma', +'calamaris enable domain report' => 'Abilita rapporto di dominio', +'calamaris enable performance report' => 'Abilita report di prestazioni', +'calamaris enable requester report' => 'Abilita report richiedente', +'calamaris enable verbose reporting' => 'Attiva la segnalazione dettagliata', +'calamaris high' => 'high', +'calamaris histogram resolution' => 'Risoluzione istogramma', +'calamaris low' => 'low', +'calamaris medium' => 'medium', +'calamaris no reports available' => 'Non ci sono report disponibili', +'calamaris none' => 'none', +'calamaris number of content types' => 'Numero di tipi di contenuto', +'calamaris number of domains' => 'Numero di domini', +'calamaris number of requested urls' => 'Numero di URL richiesto', +'calamaris number of requesting hosts' => 'Numero di host che lo richiedono', +'calamaris performance options' => 'Opzione prestazione', +'calamaris proxy reports' => 'Report del Proxy', +'calamaris refresh list' => 'Refresh list', +'calamaris report interval (in minutes)' => 'Intervallo del Report in minuti', +'calamaris report options' => 'Opzioni del Report', +'calamaris report period' => 'Periodo del Report', +'calamaris run as background task' => 'Eseguito come processo in background', +'calamaris show usernames' => 'Mostra usernames', +'calamaris skip archived logfiles' => 'Ignora file di registro archiviati', +'calamaris unlimited' => 'unlimited', +'calamaris view' => 'View', +'calamaris view report' => 'View report', +'calc traffic all x minutes' => 'Calculate traffic all x minutes', +'cancel' => 'Cancel', +'cancel-adv-options' => 'Cancel', +'cannot enable both nat traversal and compression' => 'Cannot enable both NAT traversal and compression.', +'cannot enable ntp without specifying primary' => 'Cannot enable NTP without specifying primary.', +'cannot specify secondary dns without specifying primary' => 'Cannot specify secondary DNS without specifying primary.', +'cannot specify secondary ntp without specifying primary' => 'Cannot specify Secondary NTP server without specifying Primary', +'cannot specify secondary wins without specifying primary' => 'Cannot specify secondary WINS without specifying primary.', +'cant change certificates' => 'Can\'t change certificates.', +'cant enable xtaccess' => 'The associated port forwarding rule is disabled, therefore you cannot enable external access for this rule.', +'cant start openssl' => 'Can\'t start OpenSSL', +'capabilities' => 'Capabilities', +'caps all' => 'Tutti', +'capsclosed' => 'SCOLLEGATO', +'capsinactive' => 'INATTIVO', +'capsopen' => 'COLLEGATO', +'capswarning' => 'WARNING', +'caption' => 'Caption', +'ccd add' => 'Add network', +'ccd choose net' => 'Choose network', +'ccd client options' => 'Advanced client options', +'ccd clientip' => 'Host address', +'ccd dynrange' => 'Dynamic OpenVPN IP address pool', +'ccd err blue' => 'This is the Blu subnet.', +'ccd err green' => 'This is the Verde subnet.', +'ccd err hostinnet' => 'You are not able to delete this network, while it still contains clients.', +'ccd err inuse' => 'Already used by another client.', +'ccd err invalidname' => 'Invalid name. Allowed characters are A-Z, a-z, dash and space.', +'ccd err invalidnet' => 'Invalid IP address. Format: 192.168.0.0/24 or 192.168.0.0/255.255.255.0.', +'ccd err iroute' => 'Network address for route is invalid.', +'ccd err irouteexist' => 'This route is already in use.', +'ccd err isipsecnet' => 'The given subnet address is already used by an IPsec network.', +'ccd err isipsecrw' => 'The given subnet address is already used by the IPsec rw network.', +'ccd err isovpnn2n' => 'The subnet address is already in use for an OpenVPN net-to-net connection.', +'ccd err isovpnnet' => 'The subnet address is already in use for the OpenVPN server.', +'ccd err issubnet' => 'Subnet address already in use.', +'ccd err name' => 'Please choose a name.', +'ccd err nameexist' => 'Name already exists.', +'ccd err netadr' => 'Subnet address is invalid or range is too large.', +'ccd err netadrexist' => 'Network already exists.', +'ccd err orange' => 'This is the ORANGE subnet.', +'ccd err red' => 'This is the RED subnet.', +'ccd err routeovpn' => 'Already used by OpenVPN server.', +'ccd err routeovpn2' => 'Already pushed from OpenVPN server.', +'ccd hint' => 'On this page you are able to define static networks from which the roadwarrior clients can get fixed IP address assignments.', +'ccd invalid' => 'Invalid.', +'ccd iroute' => 'IPFire has access to these networks on the client\'s site', +'ccd iroute2' => 'Client has access to these networks on IPFire\'s site', +'ccd iroutehint' => 'Attention! If you change these settings, you have to restart the OpenVPN server that the changes take effect!', +'ccd modify' => 'Change network', +'ccd name' => 'Name', +'ccd net' => 'Static IP address pools', +'ccd noaddnet' => 'You can only add new static networks when OpenVPN server is stopped.', +'ccd none' => 'None', +'ccd routes' => 'Routing:', +'ccd subnet' => 'Subnet', +'ccd used' => 'Used addresses', +'cert' => 'Certificate', +'certificate' => 'Certificate', +'certificate authorities' => 'Autorità di certificazione', +'certificate does not have a valid ca associated with it' => 'Certificate does not have a valid CA associated with it.', +'certificate file move failed' => 'Certificate file move failed', +'cfg restart' => 'A reboot is suggested after restoring a configuration archive.', +'chain' => 'Chain', +'change passwords' => 'Change passwords', +'change share' => 'edit share options', +'check for net traffic update' => 'Check for Net-Traffic updates', +'check vpn lr' => 'Check', +'choose config' => 'Choose config', +'choose media' => 'Choose media', +'cipher' => 'Encryption:', +'city' => 'City', +'class in use' => 'The class is already in use.', +'clear cache' => 'Clear Cache', +'clear playlist' => 'Empty playlist', +'clenabled' => 'Fornire il tempo alla rete locale', +'click to disable' => 'Enabled (click to disable)', +'click to enable' => 'Disabled (click to enable)', +'client' => 'Workstation Name', +'clock has not been synchronized' => 'Clock has not been synchronized', +'clock last synchronized at' => 'L\'orologio è stato sincronizato il', +'comment' => 'Description:', +'common name' => 'Common name', +'community rules' => 'Snort/VRT GPLv2 Community Rules', +'comp-lzo' => 'LZO-Compression:', +'compression' => 'Compression:', +'computer to modem rate' => 'Computer to modem rate:', +'concentrator name' => 'Concentrator name:', +'confirmation' => 'confirmation', +'connect' => 'OVPN Start / Connect', +'connect the modem' => 'Connect the modem', +'connect timeout' => 'Connect timeout:', +'connected' => 'Connected', +'connecting' => 'Connecting...', +'connection' => 'connessione', +'connection closed' => 'Not connected...', +'connection debugging' => 'Connection debugging', +'connection status and controlc' => 'Stato della connessione e controllo', +'connection tracking' => 'iptables Connection Tracking', +'connection type' => 'Connection Type', +'connection type is invalid' => 'Connection type is invalid.', +'connections' => 'Connessioni', +'connections are associated with this ca. deleting the ca will delete these connections as well.' => 'connections are associated with this CA. Deleting the CA will delete these connections as well.', +'connscheduler' => 'Schedulazione e connessione', +'core notice 1' => 'Notice: There is an core-update from', +'core notice 2' => 'to', +'core notice 3' => 'available.', +'could not be opened' => 'could not be opened.', +'could not connect to' => 'Could not connect to', +'could not connect to www ipcop org' => 'Could not connect to www.ipfire.org', +'could not connect to www ipfire org' => 'Could not connect to www.ipfire.org', +'could not create directory' => 'Could not create directory.', +'could not download latest patch list' => 'Could not download latest patch list (not connected).', +'could not download latest updates' => 'Could not download latest updates.', +'could not download the available updates list' => 'Could not download the available updates list.', +'could not open available updates file' => 'Could not open available updates file.', +'could not open installed updates file' => 'Could not open installed updates file', +'could not open update information file' => 'Could not open update information file. The update file is corrupt.', +'could not retrieve common name from certificate' => 'Could not retrieve common name from certificate.', +'count' => 'Count', +'countries' => 'Countries', +'country' => 'Country', +'country codes and flags' => 'Country Codes and Flags:', +'countrycode' => 'Code', +'cpu frequency per' => 'Frequenza CPU', +'cpu idle usage' => 'Idle CPU Usage', +'cpu interrupt usage' => 'Uso Interrupt dalla CPU', +'cpu iowait usage' => 'attesa CPU di IO', +'cpu irq usage' => 'Uso IRQ dalla CPU', +'cpu nice usage' => 'Nice CPU Usage', +'cpu steal usage' => 'Steal CPU Usage', +'cpu system usage' => 'System CPU Usage', +'cpu usage per' => 'CPU Usage per', +'cpu user usage' => 'User CPU Usage', +'create' => 'Create', +'create mask' => 'UNIX rights for new created files', +'create new backup' => 'Create a new backup set', +'credits' => 'Credits', +'crl' => 'Certificate Revocation List', +'cron server' => 'CRON Server', +'current' => 'Current', +'current aliases' => 'Current aliases', +'current class' => 'Current class', +'current devices' => 'Current devices', +'current dhcp leases on blue' => 'Current DHCP leases on Blu', +'current dynamic leases' => 'Current dynamic leases', +'current fixed leases' => 'Current fixed leases', +'current hosts' => 'Attuali hosts', +'current media' => 'Current media', +'current ovpn' => 'Active OVPN-Connection:', +'current playlist' => 'Current Playlist', +'current profile' => 'Current profile:', +'current rules' => 'Current rules:', +'custom networks' => 'Custom networks', +'custom services' => 'Servizio Custom', +'daily firewallhits' => 'daily firewallhits', +'dat without key' => 'An encrypted archive cannot be restored without the key.', +'date' => 'Date', +'date not in logs' => 'Non esistono dati registrati per il giorno interrogato', +'day' => 'Giorno', +'day after' => 'Domani', +'day before' => 'Ieri', +'day-graph' => 'Giorno', +'days' => 'Giorni.', +'dbfile' => 'Dbfile', +'ddns help dnsmadeeasy' => 'In the field for hostname enter your ID (or a list of IDs seperated by;)', +'ddns help freedns' => 'In the fied username enter your connect string', +'ddns help plus' => '+ marks a mandatory field', +'ddns hostname added' => 'Dynamic DNS hostname added', +'ddns hostname modified' => 'Dynamic DNS hostname modified', +'ddns hostname removed' => 'Dynamic DNS hostname removed', +'ddns minimize updates' => 'Minimize updates: before an update, compares the dns IP for hostname "[host.]domain" against RED IP.', +'ddns noip prefix' => 'To use no-ip in group mode, prefix hostname with %', +'deactivate' => 'deactivate', +'deactivate user' => 'deactivate user', +'dead peer detection' => 'Dead Peer Detection', +'debugme' => 'Not yet implemented', +'december' => 'Dicembre', +'deep scan directories' => 'Scan recursive', +'def lease time' => 'Default Lease Time', +'default' => 'Default', +'default ip' => 'Default IP address', +'default lease time' => 'Tempo di lease predefinito (min):', +'default networks' => 'Default networks', +'default renewal time' => 'Default Renewal Time', +'default services' => 'Default services', +'defaultwarning' => 'WARNING - Your settings will be lost and replaced by the default ones.', +'delete' => 'Cancella', +'delete cron' => 'Delete cronjob', +'delete pc' => 'Delete workstation', +'delete share' => 'Delete share', +'delete user' => 'Delete user', +'demon login script' => 'Demon login script', +'deprecated fs warn' => 'Deprecated filesystem! Newer kernel drop the support. Backup and reformat!', +'description' => 'Description', +'dest ip and port' => 'Ip Destinazione: Porta', +'destination' => 'Destinazione', +'destination ip' => 'IP destinazione', +'destination ip bad' => 'IP Destinazione Invalido', +'destination ip or net' => 'Destination IP or net', +'destination net' => 'Destination Net', +'destination port' => 'Porta di Destinazione', +'destination port numbers' => 'Destination port must be a valid port number or port range.', +'destination port overlaps' => 'Destination port range overlaps an existing port range.', +'detail level' => 'Livello di dettaglio', +'details' => 'Dettagli', +'device' => 'Device', +'devices on blue' => 'Devices on Blu', +'dh' => 'Diffie-Hellman parameters', +'dh key move failed' => 'Diffie-Hellman parameters move failed.', +'dh key warn' => 'Creating DH-parameters with lengths of 1024 or 2048 bits takes up to several minutes. Lengths of 3072 or 4096 bits might needs several hours. Please be patient.', +'dh key warn1' => 'For weak systems or systems with little entropy, it is recommended to upload long Diffie-Hellman parameters by usage of the upload function.', +'dh name is invalid' => 'Name is invalid, please use "dh1024.pem".', +'dh parameter' => 'Diffie-Hellman parameters', +'dhcp advopt add' => 'Aggiungere un opzione DHCP', +'dhcp advopt added' => 'Opzione DHCP aggiunto', +'dhcp advopt blank value' => 'DHCP opzione non può essere vuoto.', +'dhcp advopt custom definition' => 'Your custom option definition', +'dhcp advopt definition' => 'Impostazione', +'dhcp advopt definition exists' => 'Definition option already exists. You can only edit or remove it.', +'dhcp advopt edit' => 'Edit a DHCP option', +'dhcp advopt help' => 'List options', +'dhcp advopt list' => 'Additional DHCP options', +'dhcp advopt modified' => 'DHCP option modified', +'dhcp advopt name' => 'Nome Opzione', +'dhcp advopt removed' => 'DHCP option removed', +'dhcp advopt scope' => 'Opzione scope', +'dhcp advopt scope global' => 'Globale', +'dhcp advopt scope help' => 'Global scope or limit scope to checked interfaces.', +'dhcp advopt unknown' => 'DHCP option name not recognized', +'dhcp advopt value' => 'Valore Opzione', +'dhcp allow bootp' => 'Consenti client BOOTP', +'dhcp base ip fixed lease' => 'Base IP for creating fix leases', +'dhcp bootp pxe data' => 'Enter optional bootp pxe data for this fixed lease', +'dhcp configuration' => 'DHCP configurazione', +'dhcp create fixed leases' => 'Create fixed leases', +'dhcp fixed lease err1' => 'For a fix lease you have to enter the MAC address or the hostname, or you enter both.', +'dhcp fixed lease help1' => 'IP Addresses might be entered as FQDN', +'dhcp mode' => 'DHCP', +'dhcp server' => 'DHCP Server', +'dhcp server disabled' => 'DHCP server disabled. Stopped.', +'dhcp server disabled on blue interface' => 'DHCP server disabled on Blu interface', +'dhcp server enabled' => 'DHCP server enabled. Restarting.', +'dhcp server enabled on blue interface' => 'DHCP server enabled on Blu interface', +'dhcp-options' => 'DHCP push options', +'dial' => 'Connect', +'dial profile' => 'Connect with profile', +'dial user password' => 'Dial user password:', +'dial user password has been changed' => 'Dial user password has been changed.', +'dialing mode' => 'Dialing mode:', +'dialup red not ppp' => 'Dialup profiles can only used if RED is set to PPP Dialup
Check the networking setup.', +'dialup settings' => 'Dialup Settings', +'directory mask' => 'UNIX directory rights', +'directory writeable' => 'directory writeable', +'disabled' => 'disabled', +'disconnect' => 'OVPN Stop / Disconnect', +'disconnects' => 'Disconnects', +'disk access per' => 'Disk Access per', +'disk usage' => 'utilizzo del disco', +'display' => 'Display', +'display charset' => 'Display Charset', +'display hostname in window title' => 'Visualizza il nome hostname sulla barra del titolo della finestra', +'display traffic at home' => 'Display calculated traffic on startpage', +'display webinterface effects' => 'Activate effects', +'dl client arch' => 'Download Client Package (zip)', +'dmz' => 'DMZ', +'dmz pinhole configuration' => 'DMZ pinhole configuration', +'dmz pinhole rule added' => 'DMZ pinhole rule added; restarting DMZ pinhole', +'dmz pinhole rule removed' => 'DMZ pinhole rule removed; restarting DMZ pinhole', +'dmzpinholes for same net not necessary' => 'DMZ Pinholes are not necessary for same net. Select different source or destination net.', +'dnat address' => 'Firewall Interface', +'dns address deleted' => 'Successfully deleted!', +'dns address deleted txt' => 'The DNS-Server addresses have been successfully deleted.
You have to reboot or reconnect that the changes have effect!', +'dns address done' => 'The DNS-Server address settings are going to be saved.', +'dns address recon' => 'Trying to reconnect!', +'dns check failed' => 'DNS check failed', +'dns desc' => 'Se l\'interfaccia red0 ottiene la configurazione e indirizzo IP tramite DHCP dal provider, gli indirizzi dei server DNS verranno impostati automaticamente. Qui si è in grado di modificare questi indirizzi IP dei server DNS con i vostri propri.', +'dns error 0' => 'The IP address of the primary DNS server is not valid, please check your entries!
The entered secondary DNS server address is valid.', +'dns error 01' => 'The entered IP address of the primary and secondary DNS server are not valid, please check your entries!', +'dns error 1' => 'The IP address of the secondary DNS server is not valid, please check your entries!
The entered primary DNS server address is valid.', +'dns header' => 'Assign DNS server addresses only for DHCP on red0', +'dns list' => 'List of free public DNS servers', +'dns menu' => 'Assign DNS-Server', +'dns new 0' => 'Nuovo DNS primario IP:', +'dns new 1' => 'Nuovo DNS secondario IP:', +'dns proxy server' => 'DNS Proxy Server', +'dns saved' => 'Successfully saved!', +'dns saved txt' => 'The two entered DNS server addresses have been saved successfully.
You have to reboot or reconnect that the changes have effect!', +'dns server' => 'DNS Server', +'dns servers' => 'DNS Servers', +'dns title' => 'Domain Name System', +'dnsforward' => 'Inoltro DNS', +'dnsforward add a new entry' => 'Aggiungere una nuova voce', +'dnsforward configuration' => 'Configurazione di inoltro DNS', +'dnsforward edit an entry' => 'Edit an existing entry', +'dnsforward entries' => 'Voci correnti', +'dnsforward forward_server' => 'Nameserver', +'dnsforward zone' => 'Zona', +'dnssec aware' => 'DNSSEC Aware', +'dnssec information' => 'DNSSEC Information', +'dnssec not supported' => 'DNSSEC Not supported', +'dnssec validating' => 'DNSSEC Validating', +'do not log this port list' => 'Drop this port list just before they are logged (reduces log size)', +'dod' => 'Dial on Demand', +'dod for dns' => 'Dial on Demand for DNS:', +'dod not compatible with ddns' => 'Dial on demand is not compatible with dynamic dns services', +'dod waiting' => 'Dial on Demand waiting', +'domain' => 'Domain', +'domain master' => 'Domain Master', +'domain name' => 'Nome del Dominio', +'domain name suffix' => 'Suffisso del Dominio:', +'domain not set' => 'Domain not set.', +'donation' => 'Donation', +'donation-link' => 'https://www.paypal.com/en_US/GB/i/btn/btn_donateCC_LG.gif', +'donation-text' => 'IPFire is driven and maintained by volunteers in their free time. To keep this project running costs incurred, if you like to support us we would be pleased by a small donation.', +'done' => 'Do it', +'dos charset' => 'DOS Charset', +'down and up speed' => 'Enter your Down- and Uplink-Speed
and then press Save.', +'downlink' => 'Downlink', +'downlink speed' => 'Downlink speed (kbit/sec)', +'downlink std class' => 'downlink standard class', +'download' => 'download', +'download ca certificate' => 'Download CA certificate', +'download certificate' => 'Download certificate', +'download dh parameter' => 'Download Diffie-Hellman parameters', +'download host certificate' => 'Download host certificate', +'download new ruleset' => 'Download new ruleset', +'download pkcs12 file' => 'Download PKCS12 file', +'download root certificate' => 'Download root certificate', +'download tls-auth key' => 'Download tls-auth key', +'dpd action' => 'Action', +'dpd delay' => 'Delay', +'dpd timeout' => 'Timeout', +'driver' => 'Driver', +'drop action' => 'Default behaviour of (forward) firewall in mode "Blocked"', +'drop action1' => 'Default behaviour of (outgoing) firewall in mode "Blocked"', +'drop action2' => 'Default behaviour of (input) firewall', +'drop forward' => 'Log dropped forward packets', +'drop input' => 'Registra pacchetti in ingresso ignorati', +'drop newnotsyn' => 'Log dropped new not syn packets', +'drop outgoing' => 'Log dropped outgoing packets', +'drop portscan' => 'Log dropped portscan packets', +'drop proxy' => 'Drop all packets not addressed to proxy', +'drop samba' => 'Drop all Microsoft ports 135,137,138,139,445,1025', +'drop wirelessforward' => 'Log dropped wireless forward packets', +'drop wirelessinput' => 'Log dropped wireless input packets', +'dst port' => 'Dst Port', +'dstprt range overlaps' => 'Destination port range overlaps an already defined port.', +'dstprt within existing' => 'Destination port is within an already defined port range.', +'duplicate ip' => 'Duplicate IP address entered', +'duplicate ip bold' => 'Duplicate addresses are in bold', +'duplicate mac' => 'Duplicate MAC address entered', +'duplicate name' => 'That name is already being used, please choose another.', +'dyn dns source choice' => 'Dynamic DNS provider(s) will receive an IP address for this IPFire from:', +'dynamic dns' => 'Dynamic DNS', +'dynamic dns client' => 'Dynamic DNS Client', +'e-mail address too long' => 'E-mail address is too long; it should not be longer than 40 characters.', +'eciadsl help' => 'To utilise the ECI ADSL modem you must upload a synch.bin file to your IPFire box. Please download the file from the ECIADSL website and then upload the file synch.bin using the form below.', +'eciadsl upload' => 'Upload ECI ADSL synch.bin file', +'edit' => 'Edit', +'edit a rule' => 'Edit an existing rule:', +'edit advanced settings when done' => 'Edit advanced settings when done.', +'edit an existing alias' => 'Edit an existing alias', +'edit an existing host' => 'Edit an existing host', +'edit an existing lease' => 'Edit an existing lease', +'edit device' => 'Edit device', +'edit hosts' => 'Edit Hosts', +'edit network' => 'Edit network', +'edit printer' => 'edit printer', +'edit service' => 'Edit service', +'edit share' => 'Edit share', +'editor' => 'Editor', +'eg' => 'e.g.:', +'email server can not be empty' => 'E-mail server can not be empty', +'emailreportlevel' => 'E-mailreportlevel', +'emerging rules' => 'Emergingthreats.net Community Rules', +'empty' => 'Questo campo può essere lasciato vuoto', +'empty profile' => 'empty', +'enable ignore filter' => 'Abilita ignorare filtro', +'enable javascript' => 'Enable javascript', +'enable wildcards' => 'Enable wildcards:', +'enabled' => 'abilitato:', +'enabled on' => 'abilitato su', +'enabledtitle' => 'abilitato', +'encapsulation' => 'Encapsulation', +'encrypted' => 'Encrypted', +'encryption' => 'Encryption:', +'end address' => 'Indirizzo finale:', +'enter ack class' => 'Enter the ACK- Class
and then press Save.', +'enter data' => 'Enter your settings
and then press Save.', +'entropy' => 'Entropy', +'entropy graphs' => 'Entropy Graphs', +'err bk 1' => 'Error creating archive', +'err bk 10 password' => 'Error with backup password', +'err bk 2 key' => 'Error creating key file', +'err bk 3 tar' => 'Error appending files to archive', +'err bk 4 gz' => 'Error compressing archive', +'err bk 5 encrypt' => 'Error encrypting archive', +'err rs 1' => 'Error restoring archive', +'err rs 6 decrypt' => 'Error decrypting archive', +'err rs 7 untartst' => 'Invalid decrypted archive', +'err rs 8 untar' => 'Error untarring archive', +'error config' => 'Could not open /var/ipfire/ovpn/config/ZERINA.ovpn !', +'error external access' => 'Could not open /var/ipfire/xtaccess/config (external acccess could not be granted)!', +'error messages' => 'Messaggi di errore', +'esp encryption' => 'ESP Encryption:', +'esp grouptype' => 'ESP Grouptype:', +'esp integrity' => 'ESP Integrity:', +'esp keylife' => 'ESP Keylife:', +'esp keylife should be between 1 and 24 hours' => 'ESP keylife should be between 1 and 24 hours.', +'every' => 'Ogni', +'exampel' => 'esempio', +'exclude logfiles' => 'Escludi File di log', +'excluding buffers and cache' => '-/+ buffers/cache', +'expected' => 'Expected', +'expertoptions' => 'Expert options', +'expires' => 'Scade', +'export' => 'Export', +'exportkey' => 'Export PSK', +'external access' => 'External Access', +'external access configuration' => 'External access configuration', +'external access rule added' => 'External access rule added; restarting access controller', +'external access rule changed' => 'External access rule changed; restarting access controller', +'external access rule removed' => ' External access rule removed; restarting access controller', +'external aliases configuration' => 'Configurazione alias esterni', +'extrahd' => 'ExtraHD', +'extrahd because there is already a device mounted' => ', because there is already a device mounted', +'extrahd cant umount' => 'Can\'t umount', +'extrahd detected drives' => 'detected drives', +'extrahd install or load driver' => 'If your device isn\'t listed here, you need to install or load the driver.
If you can see your device but no partitions you have to create them first.', +'extrahd maybe the device is in use' => '. Maybe the device is in use', +'extrahd to' => 'to', +'extrahd to root' => 'to root', +'extrahd unable to read' => 'Unable to read', +'extrahd unable to write' => 'Unable to write', +'extrahd you cant mount' => 'You can\'t mount', +'false classnumber' => 'The Class-Number does not match the interface.', +'false max bandwith' => 'Maximum bandwith is false.', +'false min bandwith' => 'Minimum bandwith is false.', +'february' => 'Febbraio', +'fetch ip from' => 'Guess the real public IP with help of an external server', +'filename' => 'Filename', +'filesystem full' => 'Filesystem full', +'fireinfo ipfire version' => 'IPFire version', +'fireinfo is disabled' => 'Fireinfo is disabled', +'fireinfo is enabled' => 'Fireinfo is enabled', +'fireinfo is submitted' => 'Your profile is submitted to the fireinfo service.', +'fireinfo is submitted button' => 'No, I do not want to send my profile anymore', +'fireinfo kernel version' => 'Kernel version', +'fireinfo not submitted' => 'Your profile is not submitted to the fireinfo service.', +'fireinfo not submitted button' => 'Yes, I want to send my profile', +'fireinfo pakfire version' => 'Pakfire version', +'fireinfo please enable' => 'Please enable the fireinfo service.', +'fireinfo settings' => 'Fireinfo settings', +'fireinfo system version' => 'Versione del Sistema', +'fireinfo why descr1' => 'It is very important for the development of IPFire that you enable this', +'fireinfo why descr2' => 'service. ', +'fireinfo why enable' => 'Why should I enable fireinfo?', +'fireinfo why read more' => 'Read more about the reasons.', +'fireinfo your profile id' => 'Your profile ID', +'firewall' => 'Firewall', +'firewall graphs' => 'Firewall Graphs', +'firewall hits' => 'Numero totale di visite per firewall', +'firewall hits per' => 'firewallhits per', +'firewall log' => 'Firewall log', +'firewall log viewer' => 'Firewall Log Viewer', +'firewall logs' => 'Firewall Logs', +'firewall logs country' => 'Fw-Loggraphs (Country)', +'firewall logs ip' => 'Fw-Loggraphs (IP)', +'firewall logs port' => 'Fw-Loggraphs (Port)', +'firewall rules' => 'Firewall Rules', +'firewallhits' => 'firewallhits', +'firmware' => 'Firmware', +'firmware upload' => 'Upload Firmware/Drivers', +'first' => 'First', +'fixed ip lease added' => 'Fixed IP lease added', +'fixed ip lease modified' => 'Fixed IP lease modified', +'fixed ip lease removed' => 'Fixed IP lease removed', +'flag' => 'Flag', +'force update' => 'Force update', +'force user' => 'force all new file to user', +'forward firewall' => 'Firewall', +'forwarding rule added' => 'Forwarding rule added; restarting forwarder', +'forwarding rule removed' => 'Forwarding rule removed; restarting forwarder', +'forwarding rule updated' => 'Forwarding rule updated; restarting forwarder', +'free' => 'Libero', +'free memory' => 'Memoria libera ', +'free swap' => 'Swap Libero', +'frequency' => 'Frequency', +'friday' => 'Venerdi', +'fritzdsl help' => 'To utilise one of Fritz!DSL fcdsl / fcdslsl / fcdsl2 / fcdslusb / fcdslslusb modem, you must upload a package to your IPFire box. Please download the tarball corresponding to your version from the IPFire website and then upload the entire fcdsl-(your_version).tgz using the form below.', +'fritzdsl upload' => 'Upload Fritz!DSL driver', +'from' => 'Da', +'from email adr' => 'From e-mail address', +'from email pw' => 'From e-mail password', +'from email server' => 'From Email server', +'from email user' => 'From e-mail user', +'from warn email bad' => 'From e-mail address is not valid', +'fw blue' => 'Firewall options for Blu interface', +'fw default drop' => 'Firewall policy', +'fw logging' => 'Log Firewall', +'fw settings' => 'Firewall settings', +'fw settings color' => 'Show colors in ruletable', +'fw settings dropdown' => 'Show all networks on rulecreation site', +'fw settings remark' => 'Show remarks in ruletable', +'fw settings ruletable' => 'Show empty ruletables', +'fwdfw ACCEPT' => 'ACCEPT', +'fwdfw DROP' => 'DROP', +'fwdfw MODE1' => 'Drop all packets', +'fwdfw MODE2' => 'Accept all packets', +'fwdfw REJECT' => 'REJECT', +'fwdfw action' => 'Action', +'fwdfw additional' => 'Additional settings', +'fwdfw addrule' => 'Add/Edit rule:', +'fwdfw all icmp' => 'All ICMP types', +'fwdfw change' => 'Update', +'fwdfw copy' => 'Copy', +'fwdfw delete' => 'Delete', +'fwdfw dnat' => 'Destination NAT (Port forwarding)', +'fwdfw dnat error' => 'You have to select a single host for DNAT. Groups or networks are not allowed.', +'fwdfw dnat extport' => 'The external port has to be empty when using Source NAT rules.', +'fwdfw dnat nochoice' => 'Please pick Source NAT or Destination NAT from the NAT section.', +'fwdfw dnat porterr' => 'You have to select a single port or portrange (tcp/udp) for NAT', +'fwdfw dnat porterr2' => 'Cannot use external port (NAT) when no destination port is defined.', +'fwdfw edit' => 'Edit', +'fwdfw err nosrc' => 'No source selected.', +'fwdfw err nosrcip' => 'Please provide a source IP address.', +'fwdfw err notgt' => 'No destination selected.', +'fwdfw err notgtip' => 'Please provide a destination IP address.', +'fwdfw err prot_port' => 'Source- or targetport are not allowed with selected protocol', +'fwdfw err prot_port1' => 'When using Source- or targetport you have to select TCP or UDP for protocol', +'fwdfw err remark' => 'Invalid characters in remark.', +'fwdfw err ruleexists' => 'This rule already exists.', +'fwdfw err same' => 'Source and destination are identical.', +'fwdfw err samesub' => 'Source and destination IP addresses are from the same subnet.', +'fwdfw err src_addr' => 'Invalid source MAC/IP address.', +'fwdfw err tgt_addr' => 'Invalid destination IP address.', +'fwdfw err tgt_grp' => 'The destination service group is empty', +'fwdfw err tgt_mac' => 'A MAC addresses cannot be used as destination.', +'fwdfw err tgt_port' => 'Invalid destination port.', +'fwdfw err time' => 'You have to select at least one day.', +'fwdfw external port nat' => 'External port (NAT)', +'fwdfw final_rule' => 'Last rule: ', +'fwdfw from' => 'Da:', +'fwdfw hint ip1' => 'The last generated rule may never match, because source and destination subnets may overlap.', +'fwdfw hint ip2' => 'Please double-check if this rule makes sense: ', +'fwdfw hint mac' => 'The destination group contains MAC addresses, which will be skipped during rule creation.', +'fwdfw iface' => 'Interface', +'fwdfw ipsec network' => 'IPsec networks:', +'fwdfw log' => 'Log', +'fwdfw log rule' => 'Log rule', +'fwdfw man port' => 'Port(s):', +'fwdfw many' => 'Many', +'fwdfw menu' => 'Firewall', +'fwdfw movedown' => 'Move down', +'fwdfw moveup' => 'Move up', +'fwdfw natport used' => 'The given port for NAPT is already in use by an other DNAT rule.', +'fwdfw newrule' => 'New rule', +'fwdfw p2p txt' => 'Grant/deny access to P2P networks.', +'fwdfw pol allow' => 'Allowed', +'fwdfw pol block' => 'Blocked', +'fwdfw pol text' => 'Sets the default firewall behaviour for connections from local networks. You may either allow all new connections or block them by default. Connections between the local networks are also blocked in the latter mode.', +'fwdfw pol text1' => 'Sets the default firewall behaviour for connections initiated by the firewall itself. Attention! You may lock yourself out.', +'fwdfw pol title' => 'Default firewall behaviour', +'fwdfw prot41' => 'IPv6 Encapsulation (Protocol 41)', +'fwdfw prot41 short' => 'IPv6 Encap', +'fwdfw red' => 'ROSSO', +'fwdfw reread' => 'Apply changes', +'fwdfw rule action' => 'Rule action:', +'fwdfw rule activate' => 'Activate rule', +'fwdfw rulepos' => 'Rule position', +'fwdfw rules' => 'Rules', +'fwdfw snat' => 'Source NAT', +'fwdfw source' => 'Source', +'fwdfw sourceip' => 'Source address (MAC/IP address or network):', +'fwdfw std network' => 'Standard networks:', +'fwdfw target' => 'Destinazione', +'fwdfw targetip' => 'Destination address (IP address or network):', +'fwdfw till' => 'Until:', +'fwdfw time' => 'Time Constraints', +'fwdfw timeframe' => 'Use time constraints', +'fwdfw toggle' => 'Activate or deactivate', +'fwdfw togglelog' => 'Activate or deactivate logging', +'fwdfw use nat' => 'Use Network Address Translation (NAT)', +'fwdfw use srcport' => 'Source port:', +'fwdfw use srv' => 'Destination port:', +'fwdfw useless rule' => 'This rule is useless.', +'fwdfw warn1' => 'This might lead to firewallrules which are applied to networks for which they are not intended to be.', +'fwdfw wd_fri' => 'Ven', +'fwdfw wd_mon' => 'Lun', +'fwdfw wd_sat' => 'Sab', +'fwdfw wd_sun' => 'Dom', +'fwdfw wd_thu' => 'Gio', +'fwdfw wd_tue' => 'Mar', +'fwdfw wd_wed' => 'Mer', +'fwdfw xt access' => 'Input', +'fwhost Custom Host' => 'Host', +'fwhost Custom Network' => 'RETE', +'fwhost IpSec Host' => 'IPsec host', +'fwhost IpSec Network' => 'IPsec network', +'fwhost OpenVPN N-2-N' => 'OpenVPN Net-to-Net', +'fwhost OpenVPN static host' => 'OpenVPN static host', +'fwhost OpenVPN static network' => 'OpenVPN static network', +'fwhost Standard Network' => 'Standard network', +'fwhost addgrp' => 'Add new network/host group', +'fwhost addgrpname' => 'Group name:', +'fwhost addhost' => 'Add new host', +'fwhost addnet' => 'Add new network', +'fwhost addservice' => 'Add service', +'fwhost addservicegrp' => 'Add new service group', +'fwhost any' => 'Any', +'fwhost attention' => 'ATTENTION', +'fwhost back' => 'Back', +'fwhost blue' => 'Blu', +'fwhost ccdhost' => 'OpenVPN clients:', +'fwhost ccdnet' => 'OpenVPN networks:', +'fwhost change' => 'Modify', +'fwhost changeremark' => 'You modified just the remark', +'fwhost cust addr' => 'Hosts', +'fwhost cust grp' => 'Network/Host Groups', +'fwhost cust net' => 'Networks', +'fwhost cust service' => 'Servizio', +'fwhost cust srvgrp' => 'Service Groups', +'fwhost deleted' => 'Deleted', +'fwhost empty' => 'No rules defined', +'fwhost err addr' => 'Invalid IP address or subnet', +'fwhost err addrgrp' => 'Please provide a group name', +'fwhost err empty' => 'Please fill in all input fields', +'fwhost err emptytable' => 'No entries in this group', +'fwhost err groupempty' => 'The selected group is empty', +'fwhost err grpexist' => 'A group with the same name already exists', +'fwhost err hostexist' => 'A host with the same name already exists', +'fwhost err hostorip' => 'Invalid name or IP address', +'fwhost err ip' => 'IP address invalid', +'fwhost err ipcheck' => 'This IP address is already in use', +'fwhost err ipmac' => 'IP/MAC address invalid', +'fwhost err ipwithsub' => 'Please provide only an IP address (without subnet mask)', +'fwhost err isccdhost' => 'This name is already used by an OpenVPN client connection', +'fwhost err isccdiphost' => 'This IP address is already used by an OpenVPN client connection', +'fwhost err isccdipnet' => 'This IP address is already used by an OpenVPN network connection', +'fwhost err isccdnet' => 'This name is already used by an OpenVPN network', +'fwhost err isingrp' => 'This entry already exists in the group', +'fwhost err mac' => 'Invalid MAC address', +'fwhost err maxservicetcp' => 'The maximal number of 15 TCP services has been reached in this group (port ranges count twice)', +'fwhost err maxserviceudp' => 'The maximal number of 15 UDP services has been reached in this group (port ranges count twice)', +'fwhost err name' => 'Invalid name. Allowed characters: Upper- and lowercase letters, digits, space and dash.', +'fwhost err name1' => 'Empty name.', +'fwhost err net' => 'Network/IP address already exists', +'fwhost err netexist' => 'A network with the same name already exists', +'fwhost err partofnet' => 'The network is a subnet of an already existing network.', +'fwhost err port' => 'Port is empty', +'fwhost err remark' => 'Invalid remark. Allowed characters: Upper- and lowercase letters, digits, space, dash, braces, semicolon, pipe and dot.', +'fwhost err srv exists' => 'A service with the same name already exists', +'fwhost err srvexist' => 'This service already exists in the group', +'fwhost err sub32' => 'Please add a single host, not a network.', +'fwhost green' => 'Verde', +'fwhost hint' => 'Note', +'fwhost hosts' => 'Firewall Hosts', +'fwhost icmptype' => 'ICMP type:', +'fwhost ip_mac' => 'IP/MAC address', +'fwhost ipadr' => 'Indirizzo IP:', +'fwhost ipsec host' => 'IPsec clients:', +'fwhost ipsec net' => 'IPsec networks:', +'fwhost menu' => 'Firewall Groups', +'fwhost netaddress' => 'Network address', +'fwhost newgrp' => 'Network/Host Groups', +'fwhost newhost' => 'Hosts', +'fwhost newnet' => 'Networks', +'fwhost newservice' => 'Servizio', +'fwhost newservicegrp' => 'Service Groups', +'fwhost orange' => 'Orange', +'fwhost ovpn_n2n' => 'OpenVPN Net-to-Net', +'fwhost port' => 'Port(s)', +'fwhost prot' => 'Protocolo', +'fwhost reread' => 'Firewall rules need to be updated.', +'fwhost reset' => 'Cancel', +'fwhost services' => 'Servizio:', +'fwhost srv_name' => 'Nome servizio', +'fwhost stdnet' => 'Standard networks:', +'fwhost type' => 'Type', +'fwhost used' => 'Used', +'fwhost welcome' => 'Over here, you can group single hosts, networks and services together, which will creating new rules more easy and faster.', +'fwhost wo subnet' => '(without subnet)', +'g.dtm' => 'TO BE REMOVED', +'g.lite' => 'TO BE REMOVED', +'gateway' => 'Gateway', +'gateway ip' => 'Gateway IP', +'gen dh' => 'Generate new Diffie-Hellman parameters', +'gen static key' => 'Generate a static key', +'generate' => 'Generate root/host zertifikate', +'generate a certificate' => 'Generate a certificate:', +'generate dh key' => 'Generate Diffie-Hellman parameters', +'generate iso' => 'Genera file ISO', +'generate root/host certificates' => 'Generate root/host certificates', +'generate tripwire keys and init' => 'generate tripwire keys and init', +'generatekeys' => 'Generate Keys', +'generatepolicy' => 'Generate new policy', +'generatereport' => 'Generate new report', +'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Generating the root and host certificates may take a long time. It can take up to several minutes on older hardware. Please be patient.', +'genkey' => 'Generate PSK', +'genre' => 'Genre', +'global settings' => 'Settaggio Globale', +'gpl i accept these terms and conditions' => 'I accept these terms and conditions', +'gpl license agreement' => 'License Agreement', +'gpl please read carefully the general public license and accept it below' => 'Please read carefully the General Public License and accept it below', +'gpl unofficial translation of the general public license v3' => 'Unofficial translation of the General Public License v3', +'graph' => 'Grafico', +'graph per' => 'per', +'green' => 'Verde', +'green interface' => 'Interface Verde', +'grouptype' => 'Grouptype:', +'guaranteed bandwith' => 'Guaranteed bandwith', +'guardian alertfile' => 'Alertfile', +'guardian configuration' => 'Guardian Configuration', +'guardian ignorefile' => 'Ignorefile', +'guardian interface' => 'Interface', +'guardian logfile' => 'Logfile', +'guardian timelimit' => 'Timelimit', +'guest ok' => 'allow guests to access', +'gui settings' => 'Settaggio GUI', +'gz with key' => 'Only an encrypted archive can be restored on this machine.', +'hangup' => 'Disconnect', +'hangup string' => 'Hangup:', +'harddisk temperature' => 'Temperatura Harddisk', +'harddisk temperature graphs' => 'Grafico HDD', +'hardware graphs' => 'Grafico Hardware', +'hardware support' => 'Supporto Hardware', +'hdd temperature in' => 'Temperatura Harddisk', +'help' => 'Help', +'high' => 'High', +'high memory usage' => 'High memory usage', +'hint' => 'Hint:', +'holdoff' => 'Holdoff time (in seconds)', +'host' => 'Host', +'host allow' => 'list with allowed hosts', +'host certificate' => 'Host Certificate', +'host configuration' => 'Host Configuration', +'host deny' => 'list with denied hosts', +'host ip' => 'Indirizzo IP dell\'Host', +'host to net vpn' => 'Host-to-Net Virtual Private Network (RoadWarrior)', +'hostname' => 'Hostname', +'hostname and domain already in use' => 'Hostname and domain already in use.', +'hostname cant be empty' => 'Hostname can\'t be empty.', +'hostname not set' => 'Hostname not set.', +'hosts config added' => 'Hosts config added', +'hosts config changed' => 'Hosts config changed', +'hour' => 'Ora', +'hour-graph' => 'Ora', +'hours' => 'Ore', +'hours2' => 'Ore', +'ibod for dual isdn only' => 'iBOD can only be used with Dual ISDN.', +'icmp selected but no type' => 'ICMP selected for protocol, but no ICMP type specified.', +'icmp type' => 'ICMP Type', +'id' => 'ID', +'idle' => 'Idle', +'idle timeout' => 'Idle timeout (mins; 0 to disable):', +'idle timeout not set' => 'Idle timeout not set.', +'ids log viewer' => 'IDS log viewer', +'ids logs' => 'IDS Logs', +'ids preprocessor' => 'IDS preprocessor', +'ids rules license' => 'To utilize Sourcefire VRT Certified Rules, you need to register on', +'ids rules license1' => '.', +'ids rules license2' => 'Acknowledge the license, activate your account by visiting the url you got via mail. Then go to', +'ids rules license3' => 'press the "Generate code"-button and copy the 40 character Oinkcode into the field below.', +'ids rules update' => 'Snort rules update', +'iface' => 'Iface', +'ignore filter' => 'Ignora filtro', +'ike encryption' => 'IKE Encryption:', +'ike grouptype' => 'IKE Grouptype:', +'ike integrity' => 'IKE Integrity:', +'ike lifetime' => 'IKE Lifetime:', +'ike lifetime should be between 1 and 8 hours' => 'IKE lifetime should be between 1 and 8 hours.', +'imei' => 'IMEI', +'import' => 'Import', +'importkey' => 'Import PSK', +'imsi' => 'IMSI', +'in' => 'In', +'inactive' => 'inactive', +'include logfiles' => 'Includi File di log', +'incoming' => 'incoming', +'incoming firewall access' => 'Incoming Firewall Access', +'incoming traffic in bytes per second' => 'Incoming Traffic', +'incorrect password' => 'Incorrect password', +'info' => 'Info', +'init string' => 'Init:', +'insert floppy' => 'To backup to floppy, insert a formatted floppy into the drive on IPFire and click backup to floppy to backup the system configuration. Please examine the results carefully to make sure the backup completed successfully. This can take a while to complete, so please be patient.

', +'insert removable device' => 'Insert a removable device', +'install' => 'Install', +'install new update' => 'Install new update:', +'installed' => 'Installed', +'installed updates' => 'Installed updates:', +'instant update' => 'Instant Update', +'integrity' => 'Integrity:', +'interface' => 'Interface', +'interfaces' => 'Interfaces', +'internet' => 'INTERNET', +'intrusion detection' => 'Intrusion Detection', +'intrusion detection system' => 'Intrusion Detection System', +'intrusion detection system log viewer' => 'Intrusion Detection System Log Viewer', +'intrusion detection system rules' => 'intrusion detection system rules', +'intrusion detection system2' => 'Intrusion Detection System:', +'invalid broadcast ip' => 'Invalid broadcast IP', +'invalid cache size' => 'Invalid cache size.', +'invalid characters found in pre-shared key' => 'Invalid characters found in pre-shared key.', +'invalid date entered' => 'Invalid date entered.', +'invalid default lease time' => 'Invalid default lease time.', +'invalid domain name' => 'Invalid domain name.', +'invalid downlink speed' => 'Invalid downlink speed.', +'invalid end address' => 'Invalid end address.', +'invalid fixed ip address' => 'Invalid fixed IP address', +'invalid fixed mac address' => 'Invalid fixed MAC address', +'invalid hostname' => 'Invalid hostname.', +'invalid input' => 'Invalid input', +'invalid input for authentication method' => 'Invalid input for authentication method.', +'invalid input for city' => 'Invalid input for city.', +'invalid input for country' => 'Invalid input for country.', +'invalid input for department' => 'Invalid input for department.', +'invalid input for dhcp dns' => 'Invalid input for DHCP DNS', +'invalid input for dhcp domain' => 'Invalid input for DHCP domain', +'invalid input for dhcp wins' => 'Invalid input for DHCP WINS', +'invalid input for dpd delay' => 'Invalid input for DPD delay', +'invalid input for dpd timeout' => 'Invalid input for DPD timeout', +'invalid input for e-mail address' => 'Invalid input for e-mail address.', +'invalid input for esp keylife' => 'Invalid input for ESP Keylife', +'invalid input for hostname' => 'Invalid input for hostname.', +'invalid input for ike lifetime' => 'Invalid input for IKE lifetime', +'invalid input for keepalive 1' => 'Invalid input for Keepalive ping', +'invalid input for keepalive 1:2' => 'Invalid input for Keepalive use at least a ratio of 1:2', +'invalid input for keepalive 2' => 'Invalid input for Keepalive ping-restart', +'invalid input for max clients' => 'Invalid input for Max Clients', +'invalid input for name' => 'Invalid input for user\'s full name or system hostname', +'invalid input for oink code' => 'Invalid input for Oink code', +'invalid input for organization' => 'Invalid input for organization', +'invalid input for remote host/ip' => 'Invalid input for remote host/ip.', +'invalid input for state or province' => 'Invalid input for state or province.', +'invalid ip' => 'Invalid IP Address', +'invalid keep time' => 'Keep time must be a valid number', +'invalid key' => 'Invalid key.', +'invalid loaded file' => 'Invalid loaded file', +'invalid local-remote id' => 'local & remote id must not be equal and begin with a "@" sign. These are leftid and rightid in strongswan terminology.', +'invalid logserver address' => 'Invalid syslogd server address', +'invalid mac address' => 'Invalid MAC address', +'invalid max lease time' => 'Invalid max lease time.', +'invalid maximum incoming size' => 'Invalid maximum incoming size.', +'invalid maximum object size' => 'Invalid maximum object size.', +'invalid maximum outgoing size' => 'Invalid maximum outgoing size.', +'invalid md5sum' => 'Invalid MD5Sum.', +'invalid minimum object size' => 'Invalid minimum object size.', +'invalid mtu input' => 'Invalid MTU', +'invalid netmask' => 'Invalid netmask', +'invalid port' => 'Invalid port. Must be a valid port number.', +'invalid port list' => 'Port list syntax is: port[,port]... where port is in /etc/services or number', +'invalid primary dns' => 'DNS primario Invalido', +'invalid primary ntp' => 'NTP server primario invalido', +'invalid secondary dns' => 'DNS secondario Invalido', +'invalid secondary ntp' => 'NTP server secondario invalido', +'invalid start address' => 'Indirizzo di partenza non valido.', +'invalid time entered' => 'Invalid time entered.', +'invalid time period' => 'Invalid time period', +'invalid uplink speed' => 'Invalid uplink speed.', +'invalid upstream proxy username or password setting' => 'Invalid upstream proxy username or password setting.', +'invalid users' => 'list with users denied to access', +'invalid vpi vpci' => 'Invalid VPI/VPCI settings', +'invalid wins address' => 'Invalid WINS server address.', +'invert' => 'Invert', +'ip address' => 'Indirizzo IP', +'ip address in use' => 'IP address already in use', +'ip address outside subnets' => 'IP Address outside subnets', +'ip alias added' => 'External IP alias added', +'ip alias changed' => 'External IP alias changed', +'ip alias removed' => 'External IP alias removed', +'ip info' => 'IP Information', +'ipfire has now rebooted' => 'IPFire si sta Riavviando', +'ipfire has now shutdown' => 'IPFire è in spegnimento.', +'ipfire side' => 'IPFire side:', +'ipfire side is invalid' => 'IPFire side is invalid.', +'ipfires hostname' => 'IPFire\'s Hostname', +'ipinfo' => 'IP info', +'ipsec' => 'IPsec', +'ipsec network' => 'IPsec network', +'ipsec no connections' => 'No active IPsec connections', +'iptable rules' => 'IPTable rules', +'iptmangles' => 'IPTable Mangles', +'iptnats' => 'IPTable Network Address Translation', +'ipts' => 'iptables', +'isdn' => 'ISDN', +'isdn settings' => 'Additional ISDN settings:', +'isdn1' => 'Single ISDN', +'isdn2' => 'Dual ISDN', +'january' => 'Gennaio', +'javascript menu error1' => 'If the drop down menus aren\'t working, disable javascript on the', +'javascript menu error2' => 'page.', +'july' => 'Luglio', +'june' => 'Giugno', +'kernel' => 'Kernel', +'kernel logging server' => 'Kernel Logging Server', +'kernel version' => 'Kernel version:', +'key stuff' => '2. Keys and Certificates', +'keyreset' => 'Reset Keys', +'keys' => 'keys', +'lan' => 'LAN', +'lang' => 'en', +'languagepurpose' => 'Selezionare la lingua che si desidera usare in IPFire:', +'last' => 'Last', +'last activity' => 'Last Activity', +'lateprompting' => 'Lateprompting', +'lease expires' => 'Lease expires', +'least preferred' => 'least preferred', +'legend' => 'Legenda', +'length' => 'Length', +'lifetime' => 'Lifetime:', +'line' => 'Line', +'linkq' => 'Link Quality', +'load printer' => 'Load Printer', +'loaded modules' => 'Loaded modules:', +'local hard disk' => 'Hard disk', +'local master' => 'Local Master', +'local ntp server specified but not enabled' => 'Local NTP server specified but not enabled', +'local subnet' => 'Local Subnet:', +'local subnet is invalid' => 'Local subnet is invalid.', +'local vpn hostname/ip' => 'Local VPN Hostname/IP', +'localkey' => 'Localkey', +'localkeyfile' => 'Localkeyfile', +'log' => 'Log', +'log enabled' => 'Abilito Log', +'log level' => 'Log Level', +'log lines per page' => 'Line per pagina', +'log server address' => 'Syslog server:', +'log settings' => 'Impostazioni di Log', +'log summaries' => 'Sommario Log', +'log summary' => 'Sommario Log', +'log var messages' => 'Impostazioni per /var/log/messages:', +'log view' => 'Log View', +'log viewer' => 'Log viewer', +'log viewing options' => 'Opzioni di visualizzazione del Log', +'log-options' => 'Logfile options', +'loged in at' => 'Logged in at', +'logging' => 'Logging', +'logging server' => 'Logging Server', +'loginlogout' => 'Login/Logout', +'logs' => 'Gestione Log', +'lookup failed' => 'Reverse lookup failed', +'loosedirectorychecking' => 'Loosedirectorychecking', +'low' => 'Low', +'ls_dhcpd' => 'DHCP Server:', +'ls_disk space' => 'Disk space:', +'ls_free/swan' => 'VPN:', +'ls_httpd' => 'HTTP Server:', +'ls_init' => 'Init:', +'ls_kernel' => 'Kernel and Firewall:', +'ls_modprobe' => 'Module loader:', +'ls_pam_unix' => 'Local user logins:', +'ls_sshd' => 'User per Login Remoto:', +'ls_syslogd' => 'Syslogd:', +'mac address' => 'MAC Address', +'mac address deleted' => 'Successfully deleted!', +'mac address deleted txt' => 'The MAC address has been successfully deleted, but changes will only take effect after reboot.', +'mac address done' => 'The MAC address settings are going to be saved.', +'mac address error not 00' => 'MAC addresse has to start with 00!', +'mac address error not valid' => 'MAC addresse not valid!', +'mac address header' => 'Indirizzo MAC address red0', +'mac address in use' => 'MAC address already in use', +'mac address menu' => 'Assegna MAC Address', +'mac address recon' => 'Trying to reconnect!', +'mac address saved' => 'Successfully saved!', +'mac address saved txt' => 'The MAC address has been successfully saved, but changes will only take effect after reboot or reconnection.', +'mac address title' => 'Assegna MAC Address', +'mac desc' => 'Qui si è in grado di cambiare l\'indirizzo MAC della scheda red0. L\'indirizzo deve essere immesso in formato esadecimale (0-9, af), una voce valida è
Esempio 00-01-02-0e-b8-d6 or 00:01:02:0e:b8:d6.', +'mac filter' => 'Filtro MAC', +'mac new' => 'Nuovo MAC address:', +'mac1 new' => 'Nuovo MAC address 1 (vdsl-inet):', +'mac2 new' => 'Nuovo MAC address 2 (vdsl-iptv):', +'magic packet send to:' => 'Magic packet send to:', +'mailmethod' => 'Mailmethod', +'mailprogramm' => 'Mailprogramm', +'main page' => 'Pagina Principale', +'manage ovpn' => '5. Tunnel Management:', +'manage printers' => 'manage printers', +'manage shares' => 'Manage Shares', +'manual' => 'Manual', +'manual control and status' => 'Manual control and status:', +'manually' => 'Manuale', +'map to guest' => 'Map to Guest', +'march' => 'Marzo', +'marked' => 'Marked', +'max bandwith' => 'Maximum bandwith', +'max incoming size' => 'Max incoming size (KB):', +'max lease time' => 'Tempo massimo lease (min):', +'max outgoing size' => 'Max outgoing size (KB):', +'max reliability' => 'Maximum reliability', +'max renewal time' => 'Maximum Renewal Time', +'max retries not set' => 'Max retries not set.', +'max size' => 'Max object size (KB):', +'max throughput' => 'Maximum throughput', +'maximal' => 'Maximal', +'maximum' => 'Maximum', +'maximum retries' => 'Maximum retries:', +'may' => 'Maggio', +'mbmon display' => 'Display', +'mbmon fan' => 'Fan Speed', +'mbmon fan in' => 'Fan speed in', +'mbmon graphs' => 'mbmon Graphs', +'mbmon label' => 'Label', +'mbmon settings' => 'mbmongraph settings', +'mbmon temp' => 'Temperatura', +'mbmon temp in' => 'Temperatura in', +'mbmon value' => 'Value', +'mbmon volt' => 'Tensione', +'meaning' => 'meaning', +'media' => 'Media', +'media information' => 'Informazioni Media', +'medium' => 'Medium', +'memory' => 'Memoria', +'memory information' => 'informazione Memoria', +'memory usage per' => 'Memory Usage per', +'messages logging' => 'Log settings for /var/log/messages', +'method' => 'Method:', +'min costs' => 'Minimum costs', +'min delay' => 'Minimum delay', +'min size' => 'Dimensione minima (KB):', +'minimal' => 'Minimal', +'minimum' => 'Minimum', +'minute' => 'Minuto', +'minutes' => 'Minuti', +'misc-options' => 'Miscellaneous options', +'missing dat' => 'Encrypted archive not found', +'missing gz' => 'Unencrypted archive not found', +'mode' => 'Mode', +'model' => 'Model', +'modem' => 'Modem', +'modem configuration' => 'Configurazione Modem', +'modem hardware details' => 'Modem Hardware', +'modem information' => 'Modem Informazione', +'modem network bit error rate' => 'Bit Error Rate', +'modem network information' => 'Network Information', +'modem network mode' => 'Network Mode', +'modem network operator' => 'Network Operator', +'modem network registration' => 'Network Registration', +'modem network signal quality' => 'Signal Quality', +'modem no connection' => 'No Connection', +'modem no connection message' => 'No connection to the modem could be established.', +'modem on com1' => 'Modem on COM1', +'modem on com2' => 'Modem on COM2', +'modem on com3' => 'Modem on COM3', +'modem on com4' => 'Modem on COM4', +'modem on com5' => 'Modem on COM5', +'modem settings have errors' => 'Modem settings have errors', +'modem sim information' => 'SIM Information', +'modem speaker on' => 'Modem speaker on:', +'modem status' => 'Modem Status', +'modify' => 'Modify', +'modulation' => 'Modulation', +'monday' => 'Lunedi', +'monitor interface' => 'Monitor Interface', +'month' => 'Mese', +'month-graph' => 'Mese', +'monthly firewallhits' => 'monthly firewallhits', +'monthly start day bad' => 'Monthly start day is not correct', +'monthly traffic bad' => 'Monthly volume is not correct', +'monthly volume' => 'Monthly volume', +'monthly volume start day' => 'First day of monthly period', +'monthly volume start day short' => 'Primo giorno', +'months' => 'months', +'more' => 'more', +'most preferred' => 'most preferred', +'mount' => 'Mount', +'mounted on' => 'Montato su', +'mpfire' => 'Media Player for IPFire', +'mpfire controls' => 'MPFire Control', +'mpfire playlist' => 'MPFire Playlist', +'mpfire scanning' => 'Scan for new files', +'mpfire search' => 'MPFire Search', +'mpfire songs' => 'MPFire songlist', +'mpfire webradio' => 'MPFire Webradio', +'mtu QoS' => 'This does not change the global MTU, it only sets MTU for QoS.', +'my new share' => 'My new share', +'name' => 'Nome', +'name is invalid' => 'Name is invalid', +'name must only contain characters' => 'Name must only contain characters.', +'name too long' => 'User\'s full name or system hostname is too long', +'nameserver' => 'Nameserver', +'nat-traversal' => 'Nat Traversal:', +'needreboot' => 'An update requires a restart', +'net' => 'Net', +'net address' => 'net address', +'net config' => 'Network configuration', +'net config type' => 'kind of network configuration', +'net config type help' => 'Verde is the local network, RED is the internet, Blu is WLAN, ORANGE is the DMZ.', +'net to net vpn' => 'Net-to-Net Virtual Private Network', +'net traffic newversion' => 'New Net-Traffic version is available:', +'net-traffic configuration' => 'Net-Traffic Configuration', +'netbios name' => 'Netbios Name', +'netmask' => 'Netmask', +'network' => 'RETE', +'network added' => 'Custom network added', +'network configuration' => 'Network Configuration', +'network internal' => 'Rete (interna)', +'network options' => 'Network options', +'network other' => 'Rete (altro)', +'network red' => 'Rete (Esterna)', +'network removed' => 'Custom network removed', +'network status information' => 'Informazioni e stato Rete', +'network time' => 'Use a network time server', +'network time from' => 'Impostare l\'ora da un server in rete', +'network traffic graphs' => 'Network traffic graphs', +'network traffic graphs external' => 'Net-Traffic grafici (Esterna)', +'network traffic graphs internal' => 'Net-Traffic grafici (interna)', +'network traffic graphs others' => 'Rete (altro)', +'network updated' => 'Custom Network updated', +'networks settings' => 'Firewall - Network settings', +'never' => 'Never', +'new optionsfw later' => 'Some options need a reboot to take effect', +'new optionsfw must boot' => 'You must reboot your IPFire', +'newer' => 'più recente', +'next' => 'next', +'no' => 'No', +'no alcatelusb firmware' => 'No Alcatel USB firmware. Please upload.', +'no cfg upload' => 'No data was uploaded', +'no dhcp lease' => 'No DHCP lease has been acquired', +'no eciadsl synch.bin file' => 'No ECI ADSL synch.bin file. Please upload.', +'no filter pass' => 'Enter the standard class for non-filtered packets.', +'no fritzdsl driver' => 'No Fritz!DSL driver. Please upload.', +'no hardware random number generator' => 'This system has no source for entropy.', +'no information available' => 'No information available.', +'no log selected' => 'No log selected', +'no modem selected' => 'No modem selected', +'no set selected' => 'No set was selected', +'no time limit' => 'unlimited time', +'none found' => 'none found', +'nonetworkname' => 'No Network Name entered', +'noservicename' => 'No Service Name entered', +'not a valid ca certificate' => 'Not a valid CA certificate.', +'not a valid dh key' => 'Not a valid Diffie-Hellman parameters file. Please use a length of 1024, 2048, 3072 or 4096 bits and the PKCS#3 format.', +'not enough disk space' => 'Not enough disk space', +'not present' => 'Not present', +'not running' => 'not running', +'not set' => 'not set', +'notes' => 'Notes', +'notice' => 'Notice', +'november' => 'Novembre', +'ntp common settings' => 'Impostazioni Comuni', +'ntp configuration' => 'NTP Configuration', +'ntp must be enabled to have clients' => 'NTP must be enabled to have clients.', +'ntp server' => 'NTP Server', +'ntp sync' => 'Sincronizzazione', +'ntp syncro disabled' => 'Sincronizzazione NTP disabilitata', +'ntp syncro enabled' => 'Sincronizzazione NTP abilitata', +'ntpd restarted' => 'Restart ntpd', +'number' => 'Number:', +'o-no' => 'Inactiv', +'o-yes' => 'Activ', +'october' => 'Ottobre', +'off' => 'off', +'ok' => 'OK', +'older' => 'più vecchio', +'on' => 'on', +'online help en' => 'Online help (in english)', +'only digits allowed in holdoff field' => 'Only digits allowed in holdoff field', +'only digits allowed in max retries field' => 'Only digits allowed in max retries field.', +'only digits allowed in the idle timeout' => 'Only digits allowed in the idle timeout.', +'only red' => 'Only RED', +'open to all' => 'Override external access to ALL', +'openssl produced an error' => 'OpenSSL produced an error', +'openvpn client' => 'OpenVPN client', +'openvpn default' => 'Default', +'openvpn destination port used' => 'The destination port is already used by another OpenVPN server.', +'openvpn disabled' => 'DISABLED', +'openvpn enabled' => 'ENABLED', +'openvpn fragment allowed with udp' => 'Using fragment is only allowed when using the UDP protocol.', +'openvpn log' => 'OpenVPN Log', +'openvpn mssfix allowed with udp' => 'Using "mssfix" is only allowed when using the UDP protocol.', +'openvpn network' => 'OpenVPN networks', +'openvpn prefix local subnet' => 'Using the prefix notation is not supported for the local subnet. Please enter a subnet mask like 255.255.255.0.', +'openvpn prefix openvpn subnet' => 'Using the prefix notation is not supported for the OpenVPN subnet. Please enter a subnet mask like 255.255.255.0.', +'openvpn prefix remote subnet' => 'Using the prefix notation is not supported for the remote subnet. Please enter a subnet mask like 255.255.255.0.', +'openvpn server' => 'OpenVPN server', +'openvpn subnet is used' => 'The given subnet is used by another OpenVPN server.', +'optional at cmd' => 'optional AT command', +'optional data' => '3. Optional Settings:', +'options' => 'Options', +'options fw' => 'Firewall Options', +'optionsfw portlist hint' => 'The list of ports has to be comma separated (e.g. 137,138). You can specify up to a maximum of 15 ports per protocol.', +'optionsfw warning' => 'Modifying these options implies restart of firewall', +'or' => 'or', +'orange' => 'ORANGE', +'organization cant be empty' => 'Organization can\'t be empty.', +'organization name' => 'Organization Name', +'organization too long' => 'Organization is too long; it should not be longer than 60 characters.', +'original' => 'Original', +'os level' => 'OS Level', +'other' => 'Other', +'other countries' => 'Other countries', +'other login script' => 'Other login script', +'otherip' => 'other IP', +'otherport' => 'other Port', +'our donors' => 'Our donors', +'out' => 'Out', +'outgoing' => 'outgoing', +'outgoing firewall' => 'Outgoing Firewall', +'outgoing firewall access' => 'Outgoing Firewall Access', +'outgoing firewall add ip group' => 'Add IP Address Group', +'outgoing firewall add mac group' => 'Add MAC Address Group', +'outgoing firewall edit ip group' => 'Edit IP Address Group', +'outgoing firewall edit mac group' => 'Edit MAC Address Group', +'outgoing firewall group error' => 'A group with the same name exists.', +'outgoing firewall groups' => 'Firewall Groups', +'outgoing firewall ip groups' => 'Outgoing Firewall IP Address Groups', +'outgoing firewall mac groups' => 'Outgoing Firewall MAC Address Groups', +'outgoing firewall mode0' => 'Using this mode, all clients are able to access the internet without any restrictions.', +'outgoing firewall mode1' => 'Using this mode, only connections based on the defined rules are allowed.', +'outgoing firewall mode2' => 'Using this mode, all connections are allowed despited off the defined ones.', +'outgoing firewall outgoing firewall reserved groupname' => 'Please use another group name, this name is reserved.', +'outgoing firewall p2p allow' => 'Using the P2P protocol is allowed', +'outgoing firewall p2p deny' => 'Using the P2P protocol is forbidden', +'outgoing firewall p2p description 1' => 'The button', +'outgoing firewall p2p description 2' => 'means that the p2p protocol is allowed or', +'outgoing firewall p2p description 3' => 'that the p2p protocol is denied.', +'outgoing firewall reset' => 'Reset all', +'outgoing firewall view group' => 'View group', +'outgoing firewall warning' => 'Not selecting source ip or mac ignores them', +'outgoing traffic in bytes per second' => 'Outgoing Traffic', +'override mtu' => 'Override default MTU', +'ovpn' => 'OpenVPN', +'ovpn con stat' => 'OpenVPN Connection Statistics', +'ovpn config' => 'OVPN-Config', +'ovpn crypt options' => 'Cryptographic options', +'ovpn device' => 'OpenVPN device:', +'ovpn dh' => 'Diffie-Hellman parameters length', +'ovpn dh new key' => 'Generate new Diffie-Hellman parameters', +'ovpn dh parameters' => 'Diffie-Hellman parameters options', +'ovpn dh upload' => 'Upload new Diffie-Hellman parameters', +'ovpn dl' => 'OVPN-Config Download', +'ovpn engines' => 'Crypto engine', +'ovpn errmsg green already pushed' => 'Route for Verde network is always set', +'ovpn errmsg invalid ip or mask' => 'Invalid network-address or subnetmask', +'ovpn generating the root and host certificates' => 'Generating the root and host certifictae can take a long time.', +'ovpn ha' => 'Hash algorithm', +'ovpn hmac' => 'HMAC options', +'ovpn log' => 'OVPN-Log', +'ovpn mgmt in root range' => 'A port number of 1024 or higher is required.', +'ovpn mtu-disc' => 'Path MTU Discovery', +'ovpn mtu-disc and mtu not 1500' => 'Path MTU Discovery requires a MTU of 1500.', +'ovpn mtu-disc maybe' => 'Optionally', +'ovpn mtu-disc no' => 'Never', +'ovpn mtu-disc off' => 'Disabled', +'ovpn mtu-disc with mssfix or fragment' => 'Path MTU Discovery cannot be used with mssfix or fragment.', +'ovpn mtu-disc yes' => 'Forced', +'ovpn no connections' => 'No active OpenVPN connections', +'ovpn on blue' => 'OpenVPN on Blu', +'ovpn on orange' => 'OpenVPN on ORANGE', +'ovpn on red' => 'OpenVPN on RED', +'ovpn port in root range' => 'A port number of 1024 or higher is required.', +'ovpn reneg sec' => 'Session key lifetime:', +'ovpn routes push' => 'Routes (one per line) e.g. 192.168.10.0/255.255.255.0 192.168.20.0/24', +'ovpn routes push options' => 'Route push options', +'ovpn server status' => 'Current OpenVPN server status:', +'ovpn subnet' => 'OpenVPN subnet (e.g. 10.0.10.0/255.255.255.0)', +'ovpn subnet is invalid' => 'OpenVPN subnet is invalid.', +'ovpn subnet overlap' => 'OpenVPN Subnet overlaps with : ', +'ovpn_fastio' => 'Fast-IO', +'ovpn_mssfix' => 'MSSFIX Size', +'ovpn_mtudisc' => 'MTU-Discovery', +'ovpn_processprio' => 'Process priority', +'ovpn_processprioD' => 'Deeply', +'ovpn_processprioED' => 'Extremely deeply', +'ovpn_processprioEH' => 'Extremely high', +'ovpn_processprioEN' => 'More highly than normal', +'ovpn_processprioH' => 'High', +'ovpn_processprioLN' => 'More deeply than normal', +'ovpn_processprioN' => 'Normal', +'ovpn_processprioVD' => 'Very deeply', +'ovpn_processprioVH' => 'Very high', +'ovpnstatus log' => 'OVPN-Status-Log', +'ovpnsys log' => 'OVPN-System-Log', +'p2p block' => 'P2P networks', +'p2p block save notice' => 'Please reload the firewall ruleset in order to apply your changes.', +'package failed to install' => 'Package failed to install.', +'pagerefresh' => 'Page is beeing refreshed, please wait.', +'pakfire accept all' => 'Do you want to install all packages?', +'pakfire ago' => 'ago.', +'pakfire available addons' => 'Addons disponibili:', +'pakfire configuration' => 'Configurazione Pakfire', +'pakfire core update auto' => 'Install core and addon updates automatically:', +'pakfire core update level' => 'Core-Update-Level', +'pakfire health check' => 'Controllare se il mirror è raggiungibile (ping):', +'pakfire install description' => 'Si prega di scegliere uno o più elementi dalla lista qui sotto e
fai clic sul segno più per installare.', +'pakfire install package' => 'You want to install the following packages: ', +'pakfire installed addons' => 'Addons installati:', +'pakfire last core list update' => 'Last core list update made', +'pakfire last package update' => 'Last packages list update made', +'pakfire last serverlist update' => 'Last server list update made', +'pakfire last update' => 'Last update made', +'pakfire possible dependency' => ' There may be depending packages, here is a list of packages that need to be installed.', +'pakfire register' => 'Registrati sul pakfire-server:', +'pakfire system state' => 'Stato del Sistema', +'pakfire uninstall description' => 'Si prega di scegliere uno o più elementi dalla lista qui sotto e
fare clic sul meno per disinstallare..', +'pakfire uninstall package' => 'You want to uninstall the following packages: ', +'pakfire update daily' => 'Ricerca gli aggiornamenti una volta al giorno:', +'pakfire updates' => 'Available Update:', +'pakfire working' => 'Pakfire is working ... Please wait until all operations have completed successfully.', +'pap or chap' => 'PAP or CHAP', +'parentclass' => 'Parentclass', +'parentclass add' => 'Add parentclass', +'password' => 'Password:', +'password contains illegal characters' => 'Password contains illegal characters.', +'password crypting key' => 'Password crypting the key', +'password not set' => 'Password not set.', +'password too short' => 'Password is too short.', +'passwords do not match' => 'Passwords do not match.', +'passwords must be at least 6 characters in length' => 'Passwords must be at least 6 characters in length', +'path to directory' => 'path to share', +'pc' => 'Workstation', +'pc add' => 'Add workstation', +'pdc options' => 'PDC options', +'percentage' => 'percentuale', +'persistent' => 'Persistent', +'pfs yes no' => 'Perfect Forward Secrecy (PFS)', +'phase1 group' => 'Phase1 Group', +'phonebook entry' => 'Phonebook entry:', +'ping disabled' => 'Disable ping response', +'pkcs12 file password' => 'PKCS12 File Password', +'play' => 'Play', +'polfile' => 'Polfile', +'policy' => 'Policy', +'port' => 'Port', +'port forwarding configuration' => 'Port forwarding configuration', +'ports' => 'Ports', +'portscans' => 'portscancs', +'pots' => 'Analog classic line', +'ppp setup' => 'PPP setup', +'pppoe' => 'PPPoE', +'pppoe settings' => 'Additional PPPoE settings:', +'pptp settings' => 'Additional PPTP settings:', +'pre-shared key is too short' => 'Pre-shared key is too short.', +'prefered master' => 'Prefered Master', +'present' => 'Present', +'prev' => 'previous', +'primary dns' => 'DNS Primario:', +'primary ntp server' => 'NTP server Primario', +'primary wins server address' => 'WINS server primario', +'printcap name' => 'Printercap name', +'printer' => 'Printer', +'printername' => 'Printername', +'printing' => 'Printing', +'printing options' => 'printing options', +'priority' => 'Priority', +'processes' => 'Processo', +'profile' => 'Profile', +'profile deleted' => 'Profile deleted: ', +'profile has errors' => 'Profile has errors', +'profile made current' => 'Profile made current: ', +'profile name' => 'Profile name:', +'profile name not given' => 'Profile name not given.', +'profile saved' => 'Profile saved: ', +'profiles' => 'Profiles:', +'proto' => 'Proto', +'protocol' => 'Protocolo', +'proxy' => 'Proxy', +'proxy access graphs' => 'Proxy access graphs', +'proxy admin password' => 'Cache administrator password', +'proxy cachemgr' => 'Attiva cachemanager', +'proxy errmsg filedescriptors' => 'Wrong amount of filedescriptors', +'proxy filedescriptors' => 'Quantita filedescriptors', +'proxy log viewer' => 'Proxy log viewer', +'proxy logs' => 'Proxy Log', +'proxy no proxy extend' => 'or specify a list of not proxied destination', +'proxy no proxy local' => 'Disallow local proxying on Blu/Verde networks', +'proxy port' => 'Porta Proxy', +'proxy reconfigure' => 'Save and Reload', +'proxy reports' => 'Report del Proxy', +'proxy reports daily' => 'Daily reports', +'proxy reports monthly' => 'Monthly reports', +'proxy reports today' => 'Oggi', +'proxy reports weekly' => 'Weekly reports', +'psk' => 'PSK', +'pulse' => 'Pulse', +'pulse dial' => 'Pulse dial:', +'qos add subclass' => 'Add subclass', +'qos enter bandwidths' => 'You will need to enter your downstream and upstream bandwidth!', +'qos graphs' => 'Qos Graphs', +'qos warning' => 'The rule must be saved, otherwise it will be discarded!', +'quick control' => 'Quick Control', +'quick playlist' => 'Quick Playlist', +'ram' => 'RAM', +'random number generator daemon' => 'Random Number Generator Daemon', +'read bytes' => 'Read Bytes', +'read list' => 'list with readonly hosts', +'real address' => 'Real Address', +'reboot' => 'Riavvia', +'reboot ask' => 'Riavvia?', +'reboot question' => 'Extra query for restart and shutdown', +'reboot schedule' => 'Schedule IPFire reboots', +'reboot sure' => 'Are you sure that you want to reboot?', +'rebooting' => 'Rebooting', +'rebooting ipfire' => 'Rebooting IPFire', +'reconnect' => 'Reconnect', +'reconnection' => 'Reconnection', +'red' => 'Internet', +'red1' => 'ROSSO', +'references' => 'References', +'refresh' => 'Refresh', +'refresh index page while connected' => 'Aggiorna la pagina index.cgi mentre si é collegati', +'refresh update list' => 'Refresh update list', +'registered user rules' => 'Sourcefire VRT rules for registered users', +'released' => 'Released', +'reload' => 'reload', +'remark' => 'Commento', +'remark title' => 'Commento:', +'remote access' => 'Remote access', +'remote announce' => 'Remote Announce', +'remote browse sync' => 'Remote Browse Sync', +'remote host/ip' => 'Remote host/IP', +'remote logging' => 'Log remoto', +'remote subnet' => 'Remote subnet:', +'remote subnet is invalid' => 'Remote subnet is invalid.', +'removable device advice' => 'Plug in a device, refresh, select and mount before usage. Umount before removal.', +'remove' => 'Remove', +'remove ca certificate' => 'Remove CA certificate', +'remove x509' => 'Remove x509', +'repeat' => 'Repeat', +'reportfile' => 'Reportfile', +'reportlevel' => 'Reportlevel', +'request' => 'Request', +'requested data' => '1. Connection Settings:', +'reserved dst port' => 'Destination port is reserved for IPFire use only:', +'reserved src port' => 'Source port is reserved for IPFire use only:', +'reset' => 'Reset', +'reset shares' => 'Reset share', +'resetglobals' => 'Reset global settings', +'resetpolicy' => 'Reset policy to default', +'resetshares' => 'Reset shares?', +'resetting the vpn configuration will remove the root ca, the host certificate and all certificate based connections' => 'Resetting the VPN configuration will remove the root CA, the host certificate and all certificate based connections', +'restart' => 'Restart', +'restart ovpn server' => 'Restart OpenVPN server', +'restore' => 'Ripristinare', +'restore defaults' => 'Ripristina defaults', +'restore hardware settings' => 'Restore hardware settings', +'restore settings' => 'Reset Settings', +'reverse sort' => 'Ordina in ordine cronologico inverso', +'root' => 'Root', +'root certificate' => 'Root certificate', +'root path' => 'Root path', +'root user password' => 'Root password', +'route subnet is invalid' => 'Additional push route subnet is invalid', +'router ip' => 'Router IP address:', +'routing table entries' => 'Instradamento delle voci di tabella', +'rsvd dst port overlap' => 'Destination Port Range overlaps a port reserved for IPFire:', +'rsvd src port overlap' => 'Source Port Range overlaps a port reserved for IPFire:', +'rules already up to date' => 'Rules already up to date', +'running' => 'AVVIATO', +'safe removal of umounted device' => 'You can safely remove the unmounted device', +'samba' => 'Samba', +'samba status' => 'Samba Status', +'saturday' => 'Sabato', +'save' => 'Salva', +'save config' => 'save settings', +'save error' => 'Unable to save configuration archive file', +'save settings' => 'Save settings', +'save-adv-options' => 'Save advanced options', +'script name' => 'Script name:', +'secondary dns' => 'DNS Secondario:', +'secondary ntp server' => 'NTP server secondario', +'secondary wins server address' => 'WINS server secondario', +'seconds' => 'Secondi', +'section' => 'Sezione', +'secure shell server' => 'Secure Shell Server', +'security' => 'Sicurezza', +'security options' => 'Opzioni sicurezza', +'select' => 'selezionare', +'select dest net' => 'Select a destination net.', +'select media' => 'Select media
(only FAT supported for removable media)', +'select source net' => 'Select a source net. If you have no ORAGNE or Blu net configured, you need no DMZ Pinholes.', +'selecttraffic' => 'Select utilization-overview:', +'send cr' => 'ISP requires Carriage Return:', +'send email notification' => 'Enabled, send e-mail notification', +'send test mail' => 'Send Teste-mail', +'september' => 'Settembre', +'serial' => 'Serial', +'server reserved' => 'The connection name server is reserved and not allowed', +'server restart' => 'You are not able to save any changes while the OpenVPN server is running.', +'server string' => 'Server String', +'service' => 'Service', +'service added' => 'Custom network service added', +'service name' => 'Service name:', +'service removed' => 'Custom network service removed', +'service updated' => 'Custom network service updated', +'servicename' => 'Service Name', +'services' => 'Servizio', +'services settings' => 'Firewall-Impostazioni Servizi', +'set' => 'set', +'set time now' => 'Set time now', +'set time now help' => 'Per accodare un evento di sincronizzazione in qualsiasi momento (anche durante l\'utilizzo di un programma di ripetizione), premere il pulsante Imposta ora ora. Si prega di notare che potrebbe essere necessario attendere per cinque minuti, o più, prima che si verifichi un evento di sincronizzazione.', +'settings' => 'Impostazioni', +'shaping add options' => 'Add service', +'shaping list options' => 'Traffic shaping services', +'shared' => 'shared', +'sharename' => 'Sharename', +'shares' => 'Shares', +'show ajax speedmeter in footer' => 'Mostra la velocita tramita Ajax', +'show areas' => 'show areas', +'show ca certificate' => 'Show CA certificate', +'show certificate' => 'Show file', +'show crl' => 'Show certificate revocation list', +'show dh' => 'Show Diffie-Hellman parameters', +'show host certificate' => 'Show host certificate', +'show last x lines' => 'Show last x lines', +'show lines' => 'Show lines', +'show root certificate' => 'Show root certificate', +'show share options' => 'Show shares options', +'show tls-auth key' => 'Show tls-auth key', +'shuffle' => 'Shuffle', +'shutdown' => 'Spegni', +'shutdown ask' => 'Spegni?', +'shutdown control' => 'Sistema di Controllo per Riavvio', +'shutdown sure' => 'Are you sure that you want to shutdown?', +'shutdown2' => 'Spegni:', +'shutting down' => 'Shutting down', +'shutting down ipfire' => 'Shutting down IPFire', +'since' => 'since', +'sitekey' => 'Sitekey', +'sitekeyfile' => 'Sitekeyfile', +'size' => 'grandezza', +'smart information' => 'Informazione S.M.A.R.T.', +'smartwarn1' => 'Device:', +'smartwarn2' => 'reports S.M.A.R.T. error', +'smbreload' => 'Reload samba', +'smbrestart' => 'Restart samba', +'smbstart' => 'Start samba', +'smbstop' => 'Stop samba', +'smtphost' => 'SMTP host', +'smtpport' => 'SMTP port', +'snat new source ip address' => 'New source IP address', +'snort hits' => 'Totale numero di regole antintrusione attivate ​​per', +'snort working' => 'Snort is working ... Please wait until all operations have completed successfully.', +'socket options' => 'Socket options', +'software version' => 'Versione software ', +'sort ascending' => 'Sort ascending', +'sort descending' => 'Sort descending', +'sound' => 'Suono', +'source' => 'Source', +'source ip' => 'Sorgente IP', +'source ip and port' => 'IP Sorgente: Porta', +'source ip bad' => 'Not a valid IP address or a network address.', +'source ip country' => 'Source IP Country', +'source ip in use' => 'Source IP in use:', +'source ip or net' => 'Source IP or Net', +'source net' => 'Source Net', +'source network' => 'Source IP, or network (blank for "ALL"):', +'source port' => 'Source port', +'source port in use' => 'Source port in use:', +'source port numbers' => 'Source port must be a valid port number or port range.', +'source port overlaps' => 'Source port range overlaps an existing port range.', +'speaker off' => 'Speaker off:', +'speaker on' => 'Speaker on:', +'squid extension methods' => 'Your extension_methods list', +'squid extension methods invalid' => 'Your \'extension_methods\' list can only contain uppercase words of letters and digits, separated with a space. ', +'squid fix cache' => 'Repair cache', +'src port' => 'Src Port', +'srcprt range overlaps' => 'Source port range overlaps an already defined port.', +'srcprt within existing' => 'Source port is within an already defined port range.', +'ssdmz pinholes' => 'DMZ Pinholes', +'ssh' => 'SSH', +'ssh access' => 'Acesso SSH', +'ssh access tip' => 'IPFire SSH is not using default port 222!', +'ssh fingerprint' => 'Fingerprint', +'ssh host keys' => 'SSH Host Keys', +'ssh is disabled' => 'SSH is disabled. Stopping.', +'ssh is enabled' => 'SSH is enabled. Restarting.', +'ssh key' => 'Key', +'ssh key size' => 'Size (bits)', +'ssh keys' => 'Chiave basata Autenticazione pubblica', +'ssh no auth' => 'You have not allowed any authentication methods; this will stop you logging in', +'ssh passwords' => 'Consenti autenticazione basata su password', +'ssh port' => 'SSH porta TCP/IP 22 (default é 222)', +'ssh portfw' => 'Consenti inoltro TCP', +'ssh tempstart15' => 'Stop SSH dopo 15 minuti', +'ssh tempstart30' => 'Stop SSH dopo 30 minuti', +'ssh1 disabled' => 'SSHv1 is disabled, a version 2 client will be required.', +'ssh1 enabled' => 'SSHv1 is enabled, old clients will be supported.', +'ssh1 support' => 'Support SSH protocol version 1 (required only for old clients)', +'ssnetwork status' => 'Network Status', +'sspasswords' => 'Passwords', +'ssport forwarding' => 'Port Forwarding', +'ssproxy graphs' => 'Proxy Graphs', +'sssystem status' => 'Stato del sistema', +'sstraffic' => 'Traffico di rete', +'sstraffic graphs' => 'Traffic Graphs', +'standard login script' => 'Standard login script', +'start' => 'Start', +'start address' => 'Indirizzo di partenza:', +'start ovpn server' => 'Start OpenVPN Server', +'state or province' => 'State or Province', +'static ip' => 'Static IP', +'static routes' => 'Percorsi statici', +'status' => 'Stato', +'status information' => 'Informazioni e Stato', +'status ovpn' => 'OpenVPN', +'std classes' => 'Standardclasses', +'stop' => 'Stop', +'stop ovpn server' => 'Stop OpenVPN Server', +'stopped' => 'FERMO', +'subject' => 'Subject', +'subject test' => 'Teste-mail', +'subject warn' => 'Warning - warnlevel reached', +'subnet' => 'Subnet', +'subnet is invalid' => 'Netmask is invalid', +'subscripted user rules' => 'Sourcefire VRT rules with subscription', +'successfully refreshed updates list' => 'Successfully refreshed updates list.', +'summaries kept' => 'Tenere il sommaro per', +'sunday' => 'Domenica', +'support donation' => 'Support the IPFire project with your donation', +'swap' => 'Swap', +'swap usage per' => 'Swap usage per', +'system' => 'Sistema', +'system graphs' => 'Grafico sistema', +'system has hwrng' => 'This system has got a hardware random number generator.', +'system has rdrand' => 'This system has got support for Intel(R) RDRAND.', +'system information' => 'Informazione Sistema', +'system log viewer' => 'System Log Viewer', +'system logs' => 'Log di Sistema', +'system status information' => 'Informazioni e stato del sistema', +'ta key' => 'TLS-Authentification-Key', +'telephone not set' => 'Telephone not set.', +'template' => 'Preset', +'template warning' => 'You have two options to set up Qos. The First, you press the save button and generate the classes and rules on your own. The second, you press the preset button and classes and rules will be set up by a template.', +'teovpn_fragment' => 'Fragmentsize', +'test' => 'test', +'test email could not be sent' => 'Could not sent Testemail', +'test email was sent' => 'Testemail was send successfully', +'the following update was successfully installed' => 'The following update was successfully installed', +'the statistics were last updated at' => 'The statistics were last updated at', +'theme' => 'Teme Grafico', +'there are updates' => 'There are updates available for your system. Please go to the "updates" section for more information.', +'there are updates available' => 'There are updates available for your system. It is strongly urged that you install them as soon as possible.', +'there was no file upload' => 'There was no file upload.', +'this feature has been sponsored by' => 'This feature has been sponsored by', +'this field may be blank' => 'Questo campo può essere vuoto.', +'this is not a valid archive' => 'This is not a valid archive.', +'this is not an authorised update' => 'This is not an authorised update.', +'this months volume' => 'This months volume', +'this update is already installed' => 'This update is already installed.', +'this weeks volume' => 'This weeks volume', +'thursday' => 'Giovedi', +'time' => 'Ora', +'time date manually reset' => 'Time/Date manually reset.', +'time server' => 'Ora Server', +'timeout must be a number' => 'Timeout must be a number.', +'title' => 'Title', +'to' => 'To', +'to email adr' => 'To e-mail address', +'to install an update' => 'To install an update please upload the .tgz.gpg file below:', +'to warn email bad' => 'To e-mail address is not valid', +'toggle' => 'pause/resume', +'toggle enable disable' => 'Enable or disable', +'tone' => 'Tone', +'tone dial' => 'Tone dial:', +'too long 80 char max' => ' is too long, maximum allowed is 80 characters', +'tor' => 'Tor', +'tor 0 = disabled' => '0 = disabled', +'tor accounting' => 'Accounting', +'tor accounting bytes' => 'Traffic (read/written)', +'tor accounting bytes left' => 'left', +'tor accounting interval' => 'Interval (UTC)', +'tor accounting limit' => 'Accounting limit (MB)', +'tor accounting period' => 'Accounting period', +'tor accounting period daily' => 'giornaliero', +'tor accounting period monthly' => 'Mensile', +'tor accounting period weekly' => 'weekly', +'tor acls' => 'Access Control', +'tor allowed subnets' => 'Allowed subnets (one per line)', +'tor bandwidth burst' => 'Max. burst', +'tor bandwidth rate' => 'Max. rate', +'tor bandwidth settings' => 'Bandwidth Settings', +'tor bandwidth unlimited' => 'unlimited', +'tor bridge enabled' => 'Enable Tor bridge', +'tor common settings' => 'Impostazioni Comuni', +'tor configuration' => 'Tor Configuration', +'tor connected relays' => 'Connected relays', +'tor contact info' => 'Contact Info', +'tor daemon' => 'Daemon', +'tor directory port' => 'Directory port', +'tor enabled' => 'Enable Tor', +'tor errmsg invalid accounting limit' => 'Invalid accounting limit', +'tor errmsg invalid directory port' => 'Invalid directory port', +'tor errmsg invalid ip or mask' => 'Invalid IP subnet', +'tor errmsg invalid node id' => 'Invalid node ID', +'tor errmsg invalid relay address' => 'Invalid relay address', +'tor errmsg invalid relay name' => 'Invalid relay nickname', +'tor errmsg invalid relay port' => 'Invalid relay port', +'tor errmsg invalid socks port' => 'Invalid SOCKS port', +'tor exit country' => 'Exit country', +'tor exit country any' => 'Any country', +'tor exit nodes' => 'Exit Nodes', +'tor relay address' => 'Relay address', +'tor relay configuration' => 'Tor Relay Configuration', +'tor relay enabled' => 'Enable Tor Relay', +'tor relay external address' => 'Relay external address', +'tor relay fingerprint' => 'Relay fingerprint', +'tor relay mode' => 'Relay mode', +'tor relay mode bridge' => 'Bridge', +'tor relay mode exit' => 'Exit-Node', +'tor relay mode private bridge' => 'Private bridge', +'tor relay mode relay' => 'Relay only', +'tor relay nickname' => 'Relay nickname', +'tor relay port' => 'Relay port', +'tor service' => 'Tor Service', +'tor socks port' => 'SOCKS port', +'tor stats' => 'Statistics', +'tor traffic limit hard' => 'Traffic limit has been reached.', +'tor traffic limit soft' => 'Traffic limit almost reached. Not accepting any new connections.', +'tor traffic read written' => 'Total traffic (read/written)', +'tor use exit nodes' => 'Use only these exit nodes (one per line)', +'total connection time' => 'Total connection time', +'total hits for log section' => 'Total hits for log section', +'traffic back' => 'Back', +'traffic calc time' => 'Time of calculation', +'traffic calc time bad' => 'Calculation time is not correct', +'traffic info messages' => 'Info messages', +'traffic monitor' => 'Traffic Monitor', +'traffic on' => 'Traffic on', +'traffic shaping' => 'Traffic Shaping', +'traffic shaping settings' => 'Traffic Shaping Settings', +'traffic warn level bad' => 'Warnlevel is not correct', +'trafficblue' => 'WLAN', +'trafficdate' => 'Date', +'trafficfrom' => 'Da', +'trafficgreen' => 'Internal net', +'trafficin' => 'Input', +'trafficorange' => 'DMZ', +'trafficout' => 'Output', +'trafficred' => 'Internet', +'traffics' => 'Panoramica-Utilizzo', +'trafficsum' => 'Totals', +'trafficto' => 'To', +'transfer limits' => 'Transfer limits', +'transparent on' => 'Transparente on', +'tripwire' => 'Tripwire', +'tripwire cronjob' => 'tripwire cronjob', +'tripwire functions' => 'tripwire functions', +'tripwire reports' => 'tripwire reports', +'tripwireoperating' => 'The process was started. This may take serverall minutes, please wait the window will automaticly refresh after the process has finished.', +'tripwirewarningdatabase' => 'WARNING - Your database will be updated with the data of the last report. Please ensure that no unauthorized changes are reported. Therefor the local-key is needed.', +'tripwirewarningkeys' => 'WARNING - This will erase your current keys, config, and database and generate them new.', +'tripwirewarningpolicy' => 'WARNING - Your policy will be rebuild, after that your database will be reinitalised. Therefor the site-key and the local-key are neeeded.', +'tuesday' => 'Martedi', +'type' => 'Type', +'umount' => 'Umount', +'umount removable media before to unplug' => 'Umount removable media before unplugging the device', +'unable to alter profiles while red is active' => 'Unable to alter profiles while RED is active.', +'unable to contact' => 'Unable to contact', +'unencrypted' => 'Unencrypted', +'uninstall' => 'Uninstall', +'unix charset' => 'UNIX Charset', +'unix group' => ' UNIX usergroup', +'unix password sync' => 'Unix Password Sync', +'unix shell' => 'UNIX Shell', +'unknown' => 'UNKNOWN', +'unnamed' => 'Unnamed', +'update' => 'Update', +'update accelerator' => 'Update Accelerator', +'update time' => 'Aggiornamento ora:', +'update transcript' => 'Update transcript', +'updatedatabase' => 'Update Database with last report', +'updates' => 'Updates', +'updates installed' => 'Ruleset update from', +'updates is old1' => 'Your update file is ', +'updates is old2' => 'days old. We recommend you update it on the System>Updates page.', +'updxlrtr 3 months' => 'three months', +'updxlrtr 6 months' => 'six months', +'updxlrtr all files' => 'all files ...', +'updxlrtr cache dir' => 'Cache directory', +'updxlrtr cache maintenance' => 'Cache maintenance', +'updxlrtr cache size' => 'Cache size (bytes)', +'updxlrtr cache statistics' => 'Cache statistics', +'updxlrtr cancel download' => 'Cancel download', +'updxlrtr children' => 'Number of accelerator processes', +'updxlrtr common settings' => 'Impostazioni Comuni', +'updxlrtr condition download' => 'Download', +'updxlrtr condition nosource' => 'No source', +'updxlrtr condition ok' => 'Up to date', +'updxlrtr condition outdated' => 'Out of date', +'updxlrtr condition suspended' => 'Suspended', +'updxlrtr condition unknown' => 'Unknown', +'updxlrtr configuration' => 'Update accelerator configuration', +'updxlrtr current downloads' => 'Files being downloaded into the local cache', +'updxlrtr current files' => 'Current files in local cache', +'updxlrtr daily' => 'giornaliero', +'updxlrtr data from cache' => 'Data from cache (bytes)', +'updxlrtr disk usage' => 'Uso del disco', +'updxlrtr efficiency index' => 'Cache efficiency index', +'updxlrtr empty repository' => 'Local cache is empty', +'updxlrtr enable autocheck' => 'Enable automatic source checkup', +'updxlrtr enable log' => 'Abilita log', +'updxlrtr filename' => 'Name', +'updxlrtr files' => 'Files', +'updxlrtr filesize' => 'Size', +'updxlrtr full autosync' => 'Replace outdated files during checkup', +'updxlrtr invalid disk usage' => 'Invalid value for max. disk usage', +'updxlrtr invalid download rate' => 'Invalid value for max. download rate', +'updxlrtr invalid num of children' => 'Invalid number of accelerator processes', +'updxlrtr last access' => 'Last cache access', +'updxlrtr last checkup' => 'Last source checkup', +'updxlrtr low download priority' => 'Priorità della CPU per i download', +'updxlrtr maintenance' => 'Maintenance', +'updxlrtr marked as' => 'marked as', +'updxlrtr max disk usage' => 'Max. disk usage', +'updxlrtr max download rate' => 'Max. external download rate (kBit/s)', +'updxlrtr month' => 'one month', +'updxlrtr monthly' => 'Mensile', +'updxlrtr not accessed' => 'not accessed since', +'updxlrtr not enabled' => 'Update Accelerator is not enabled on the web proxy page', +'updxlrtr other' => 'Other', +'updxlrtr passive mode' => 'Enable passive mode', +'updxlrtr pending downloads' => 'Pending downloads', +'updxlrtr performance options' => 'Performance options', +'updxlrtr progress' => 'Progress', +'updxlrtr purge' => 'Purge', +'updxlrtr remove file' => 'Remove from cache', +'updxlrtr save and restart' => 'Save and Restart', +'updxlrtr source' => 'Source', +'updxlrtr source checkup' => 'Source checkup', +'updxlrtr source checkup schedule' => 'Source checkup schedule', +'updxlrtr sources' => 'Sources', +'updxlrtr standard view' => 'Standard view', +'updxlrtr statistics' => 'Statistics', +'updxlrtr statistics by source' => 'Statistics by source', +'updxlrtr summary' => 'Summary', +'updxlrtr total cache size' => 'Total cache size (bytes)', +'updxlrtr total data from cache' => 'Total data delivered from cache (bytes)', +'updxlrtr total files' => 'Total files in cache', +'updxlrtr unknown' => 'Unknown', +'updxlrtr update accelerator' => 'Update Accelerator', +'updxlrtr update information' => 'There is an updated version available for download. Visit http://update-accelerator.advproxy.net for more information.', +'updxlrtr update notification' => 'Update notification!', +'updxlrtr used by' => 'Used by', +'updxlrtr web proxy service required' => 'Web proxy service must be enabled to use Update Accelerator', +'updxlrtr week' => 'one week', +'updxlrtr weekly' => 'weekly', +'updxlrtr year' => 'one year', +'upgrade' => 'upgrade', +'uplink' => 'Uplink', +'uplink speed' => 'Uplink speed (kbit/sec)', +'uplink std class' => 'uplink standard class', +'upload' => 'Upload', +'upload a certificate' => 'Upload a certificate:', +'upload a certificate request' => 'Upload a certificate request:', +'upload ca certificate' => 'Upload CA certificate', +'upload dh key' => 'Upload Diffie-Hellman parameters', +'upload fcdsl.o' => 'TO BE REMOVED', +'upload file' => 'Upload file', +'upload new ruleset' => 'Upload new ruleset', +'upload p12 file' => 'Upload PKCS12 file', +'upload static key' => 'Upload a static key', +'upload successful' => 'Upload successful.', +'upload synch.bin' => 'Upload synch.bin', +'upload update file' => 'Upload update file:', +'upstream password' => 'Upstream password:', +'upstream proxy host:port' => 'Upstream proxy (host:port)', +'upstream username' => 'Upstream username:', +'uptime' => 'Uptime', +'uptime and users' => 'Uptime and users:', +'uptime load average' => 'Load average', +'url filter' => 'Filtro URL', +'urlfilter access' => 'Accesso', +'urlfilter activity detection' => 'Activity detection', +'urlfilter add new time constraint rule' => 'Aggiungere una regola con il vincolo del tempo', +'urlfilter add new user quota rule' => 'Add new user quota rule', +'urlfilter add rule' => 'Add', +'urlfilter advanced settings' => 'impostazioni avanzate', +'urlfilter allow' => 'Allow', +'urlfilter allow access' => 'Allow access', +'urlfilter allowed domains' => 'Domini ammessi (uno per riga)', +'urlfilter allowed urls' => 'URL ammessi (uno per riga)', +'urlfilter assigned quota users' => 'Assigned users (one per line)', +'urlfilter assigned users' => 'Assigned users', +'urlfilter automatic blacklist update' => 'Aggiornamento automatico blacklist', +'urlfilter automatic update schedule' => 'Pianificazione dell\'aggiornamento automatico', +'urlfilter back to main page' => 'Torna alla pagina principale', +'urlfilter background image' => 'urlfilter background image', +'urlfilter background text' => 'To use a custom background image for the block page upload the .jpg file below', +'urlfilter backup' => 'Crea file backup', +'urlfilter backup error' => 'Unable to create backup file', +'urlfilter backup settings' => 'Backup del filtro URL', +'urlfilter banned clients' => 'Indirizzi IP Banned', +'urlfilter blacklist age 1' => 'Ultimo aggiornamento blacklist eseguito ', +'urlfilter blacklist age 2' => 'giorni fa', +'urlfilter blacklist category name' => 'Blacklist category name', +'urlfilter blacklist editor' => 'Editor di Blacklist', +'urlfilter blacklist editor info' => 'Crea e modifica la blacklist personaliata', +'urlfilter blacklist name' => 'Blacklist name', +'urlfilter blacklist update' => 'Aggiornamento Blacklist', +'urlfilter block' => 'Block', +'urlfilter block access' => 'Block access', +'urlfilter block all' => 'Blocca tutti gli URL non esplicitamente autorizzati', +'urlfilter block archives' => 'Archivi e file compressi bloccati', +'urlfilter block audio-video' => 'File audio/video Bloccati', +'urlfilter block categories' => 'Categorie Bloccate', +'urlfilter block executables' => 'File eseguibili Bloccati', +'urlfilter block ip' => 'Bloccare i siti a cui si accede da esso tramite indirizzo IP', +'urlfilter block settings' => 'Impostazioni della pagina Blocco', +'urlfilter blocked domains' => 'Domini bloccati (uno per riga)', +'urlfilter blocked expressions' => 'Espressioni bloccati (espressioni regolari)', +'urlfilter blocked urls' => 'URL bloccati (uno per riga)', +'urlfilter category' => 'Category', +'urlfilter category all' => 'any', +'urlfilter category data error' => 'Blacklist is empty', +'urlfilter category log' => 'Dividere log per categorie', +'urlfilter category name error' => 'Blacklist category name required', +'urlfilter client' => 'Client', +'urlfilter configuration' => 'Configurazione filttri per URL', +'urlfilter constraint definition' => 'Impostazione', +'urlfilter constraint outside' => 'outside', +'urlfilter constraint within' => 'within', +'urlfilter copy rule' => 'Copy', +'urlfilter current files' => 'Current files in local repository', +'urlfilter custom blacklist' => 'Blacklist personalizzata', +'urlfilter custom expression list' => 'Espressione personalizzata', +'urlfilter custom url' => 'Sorgente personalizzato, URL', +'urlfilter custom url required' => 'Custom source URL required', +'urlfilter custom whitelist' => 'Whitelist personalizzata', +'urlfilter daily' => 'giornaliero', +'urlfilter disabled' => 'disabled', +'urlfilter domains' => 'Domains (one per line)', +'urlfilter dont restart urlfilter' => 'Do not restart URL filter', +'urlfilter dst' => 'Destinazione', +'urlfilter dst error' => 'There must be at least one category selected', +'urlfilter edit domains urls expressions' => 'Edit domains, URLs and expressions', +'urlfilter edit time constraint rule' => 'Edit an existing time constraint rule', +'urlfilter edit user quota rule' => 'Edit an existing user quota rule', +'urlfilter empty ads' => 'Blocca "ADS" con finestra vuota', +'urlfilter empty repository' => 'Local file repository is empty', +'urlfilter enable automatic blacklist update' => 'Attiva aggiornamento automatico', +'urlfilter enable custom blacklist' => 'Abilito blacklist Personalizata', +'urlfilter enable custom expression list' => 'Abilito Espressione Personalizata', +'urlfilter enable custom whitelist' => 'Abilito whitelist Personalizata', +'urlfilter enable expression lists' => 'Abilita liste di espressione', +'urlfilter enable full backup' => 'Inserire blacklist completa', +'urlfilter enable jpeg' => 'Enable background image', +'urlfilter enable log' => 'Abilita log', +'urlfilter enable rewrite rules' => 'Attiva redirezione di file locale', +'urlfilter enabled' => 'Enabled:', +'urlfilter example' => 'Esempio: www.domain.com', +'urlfilter example ads' => 'Esempio: www.domain.com/ads/', +'urlfilter export blacklist' => 'Export blacklist', +'urlfilter export error' => 'Unable to create export file', +'urlfilter expressions' => 'Expressions (one per line)', +'urlfilter file ext block' => 'Blocco estenzione file', +'urlfilter filename' => 'Name', +'urlfilter filesize' => 'Size', +'urlfilter filter settings' => 'Impostazioni del filtro URL', +'urlfilter fri' => 'F', +'urlfilter friday' => 'Ven', +'urlfilter from' => 'Da', +'urlfilter hourly' => 'hourly', +'urlfilter import blacklist' => 'Import blacklist', +'urlfilter import text' => 'To import a previously saved blacklist editor file upload the .tar.gz file below', +'urlfilter install blacklist' => 'Install blacklist', +'urlfilter install information' => 'The new blacklist will be automatically compiled to prebuilt databases. Depending on the size of the blacklist, this may take several minutes.', +'urlfilter invalid content' => 'File is not a squidGuard compatible blacklist', +'urlfilter invalid import file' => 'File is not a valid URL filter blacklist editor file', +'urlfilter invalid ip or mask error' => 'Invalid IP address or network mask', +'urlfilter invalid restore file' => 'File is not a valid URL filter backup file', +'urlfilter invalid user error' => 'Invalid username', +'urlfilter load blacklist' => 'Load blacklist', +'urlfilter local file redirection' => 'Redirezione di file locale', +'urlfilter log' => 'urlfilter log', +'urlfilter log summary' => 'Numero totale di URL filtrati per', +'urlfilter log viewer' => 'URL filter log viewer', +'urlfilter logs' => 'LOG del filtro URL', +'urlfilter maintenance' => 'Manutenzione del filtro URL', +'urlfilter manage local file repository' => 'Gestire file repository locale', +'urlfilter manage repository' => 'Manager repository', +'urlfilter minutes' => 'minutes', +'urlfilter mode allow' => 'allow', +'urlfilter mode block' => 'block', +'urlfilter mon' => 'M', +'urlfilter monday' => 'Lun', +'urlfilter monthly' => 'Mensile', +'urlfilter msg text 1' => 'riga di messaggio 1', +'urlfilter msg text 2' => 'riga di messaggio 2', +'urlfilter msg text 3' => 'riga di messaggio 3', +'urlfilter network access control' => 'Controllo di accesso basato sulla rete', +'urlfilter no categories' => 'No categories available', +'urlfilter not enabled' => 'URL filter is not enabled on the Web proxy page', +'urlfilter quota restart message' => 'Note: The counters will be reset for all users when restarting the URL filter', +'urlfilter quota time error' => 'Invalid value for time quota', +'urlfilter quota user error' => 'At least one username is required', +'urlfilter redirect template' => 'Reindirizza modello di pagina', +'urlfilter redirectpage' => 'Reindirizza a questo URL', +'urlfilter remove file' => 'Remove file from repository', +'urlfilter renewal' => 'Renewal', +'urlfilter renewal period' => 'Renewal period', +'urlfilter repository information' => 'La richieste di questi file verranno reindirizzati dalla fonte originale al file locale.', +'urlfilter reset' => 'Reset', +'urlfilter restart' => 'Restart Filtro URL', +'urlfilter restart message' => 'The URL filter must be restarted to activate the changed rules', +'urlfilter restart notification' => 'Activate changed rules', +'urlfilter restore' => 'Import backup file', +'urlfilter restore results' => 'Restore results', +'urlfilter restore settings' => 'Ripristina configurazione filtro URL', +'urlfilter restore success' => 'URL filter configuration has been restored. The URL filter must be restarted to activate the new settings.', +'urlfilter restore text' => 'Per ripristinare una configurazione precedentemente salvata caricare il file di backup tar.gz.', +'urlfilter safesearch' => 'Attiva SafeSearch', +'urlfilter sat' => 'S', +'urlfilter saturday' => 'Sab', +'urlfilter save and restart' => 'Save and Restart', +'urlfilter save schedule' => 'Salva e aggiorna configurazione', +'urlfilter select blacklist' => 'Select existing blacklist', +'urlfilter select multi' => 'Press ctrl key to select multiple categories', +'urlfilter select source' => 'Selezionare la sorgente del download', +'urlfilter set time constraints' => 'Impostare limiti di tempo', +'urlfilter set user quota' => 'Impostare quota utente', +'urlfilter show category' => 'Visualizza categoria sulla pagina di blocco', +'urlfilter show dnserror' => 'Utilizzare "errore DNS" per bloccare gli URL', +'urlfilter show ip' => 'Mostra IP sulla pagina di blocco', +'urlfilter show url' => 'Mostra URL nella pagina di blocco', +'urlfilter source' => 'Source host(s) or network(s)', +'urlfilter src' => 'Source', +'urlfilter src error' => 'Source cannot be empty', +'urlfilter sun' => 'S', +'urlfilter sunday' => 'Dom', +'urlfilter tar error' => 'Could not extract files from tar archive', +'urlfilter thu' => 'T', +'urlfilter thursday' => 'Gio', +'urlfilter time' => 'Ora', +'urlfilter time quota' => 'Time quota', +'urlfilter time space' => 'Time space', +'urlfilter timebased access control' => 'Controllo degli accessi in base al tempo', +'urlfilter timespace error' => 'Error in time space declaration', +'urlfilter to' => 'To', +'urlfilter tue' => 'T', +'urlfilter tuesday' => 'Mar', +'urlfilter unfiltered clients' => 'Gli indirizzi IP non filtrati', +'urlfilter update information' => 'There is an updated version available for download. Visit http://www.urlfilter.net for more information.', +'urlfilter update notification' => 'Update notification!', +'urlfilter update now' => 'Aggiorna ora', +'urlfilter update results' => 'Blacklist update results', +'urlfilter update rule' => 'Update', +'urlfilter upload background' => 'Upload image', +'urlfilter upload blacklist' => 'Upload blacklist', +'urlfilter upload file' => 'Upload file', +'urlfilter upload file information 1' => 'Note', +'urlfilter upload file information 2' => 'Il filtro URL deve essere riavviato per attivare le modifiche al repository.', +'urlfilter upload file text' => 'Per aggiungere un file al repository locale caricare il file qui sotto', +'urlfilter upload information' => 'Il nuova database di Blacklist verrà compilato automaticamente. A seconda delle dimensioni del database, potrebbe richiedere alcuni minuti. Si prega di attendere che finisca prima di riavviare il filtro URL.', +'urlfilter upload success' => 'Blacklist upload successfully completed.', +'urlfilter upload text' => 'Per installare una blacklist aggiornata caricare il file tar.gz qui sotto.', +'urlfilter url filter' => 'Filtro URL', +'urlfilter urlfilter blacklist editor' => 'URL filter blacklist editor', +'urlfilter urls' => 'URLs (one per line)', +'urlfilter user time quota' => 'Time quota (in minutes)', +'urlfilter username' => 'Username', +'urlfilter username log' => 'Registro username', +'urlfilter web proxy service required' => 'Web proxy service must be enabled to use URL filter', +'urlfilter wed' => 'W', +'urlfilter wednesday' => 'Mer', +'urlfilter weekday error' => 'There must be at least one day selected', +'urlfilter weekly' => 'settimanale', +'urlfilter whitelist always allowed' => 'Consentire whitelist personalizzate per i clienti vietati', +'urlfilter wrong filetype' => 'File has not the extension .tar.gz', +'use' => 'Use', +'use a pre-shared key' => 'Use a pre-shared key:', +'use dov' => 'Use data over voice (DOV):', +'use ibod' => 'Use Bandwidth on Demand (iBOD):', +'use ipfire red ip' => 'The classical RED IP used by IPFire during connection', +'use only proposed settings' => 'Use only proposed settings.', +'used' => 'Usato', +'used memory' => 'Memoria Usata ', +'used swap' => 'Swap Usato', +'user' => 'User', +'user log' => 'user log', +'user proxy logs' => 'user proxy log', +'username' => 'Username:', +'username not set' => 'Username not set.', +'users department' => 'User\'s department', +'users email' => 'User\'s E-mail address', +'users fullname or system hostname' => 'User\'s full name or system hostname', +'valid root certificate already exists' => 'A valid root certificate already exists.', +'valid till' => 'Valid till', +'vci number' => 'VCI number:', +'vendor' => 'Vendor', +'view log' => 'view log', +'virtual address' => 'Virtual Address', +'virtual private networking' => 'Virtual Private Networking', +'visible in browselist' => 'visible in browselist', +'visit us at' => 'Visit us at', +'voldown10' => 'Decrease volume by 10', +'voldown5' => 'Decrease volume by 5', +'volup10' => 'Increase volume by 10', +'volup5' => 'Increase volume by 5', +'vpi number' => 'VPI number:', +'vpn' => 'VPN', +'vpn aggrmode' => 'IKE aggressive mode allowed. Avoid if possible (preshared key is transmitted in clear text)!', +'vpn altname syntax' => 'SubjectAltName is a comma separated list of e-mail, dns, uri, rid and ip objects.
email:an email address. Syntax email:copy takes the email field from the cert to be used.
DNS:a valid domain name.
URI:any valid uri.
RID:registered object identifier.
IP:an IP address.
Note:charset is limited and case is significant.
Example:
e-mail:ipfire@foo.org,email:copy,DNS:www.ipfire.org,IP:127.0.0.1,URI:http://url/to/something', +'vpn auth-dn' => 'Peer is identified by either IPV4_ADDR, FQDN, USER_FQDN or DER_ASN1_DN string in remote ID field', +'vpn configuration main' => 'VPN Configuration', +'vpn delayed start' => 'Ritardo prima di avviare la VPN (secondi)', +'vpn delayed start help' => 'Se necessario, questo ritardo può essere utilizzata per consentire gli aggiornamenti dinamici DNS per propagare correttamente. 60 secondi è un valore comune quando RED è un IP dinamico.', +'vpn incompatible use of defaultroute' => 'hostname=%defaultroute not allowed', +'vpn keyexchange' => 'Keyexchange', +'vpn local id' => 'Local ID', +'vpn missing remote id' => 'You must specify a correct Distinguished Name (DN) for this authentication.', +'vpn mtu invalid' => 'MTU must be a numeric value!', +'vpn no full pki' => 'missing private key to generate cert', +'vpn on blue' => 'VPN on Blu', +'vpn on green' => 'VPN on Verde', +'vpn on orange' => 'VPN on Arancio', +'vpn payload compression' => 'Negotiate payload compression', +'vpn red name' => 'IP pubblico o il nome di dominio completo per l\'interfaccia RED o <%defaultroute>', +'vpn remote id' => 'Remote ID', +'vpn subjectaltname' => 'Subject Alt Name', +'vpn vhost' => 'Roadwarrior virtual IP (sometimes called Inner-IP)', +'vpn watch' => 'Restart net-to-net vpn when remote peer IP changes (dyndns).', +'waiting to synchronize clock' => 'Waiting to synchronize clock', +'warn when traffic reaches' => 'Warn when traffic reaches x %', +'warning messages' => 'Warning messages', +'was deleted' => 'was deleted', +'web hits' => 'Numero totale di siti web che soddisfano i criteri selezionati per', +'web proxy' => 'Proxy Web', +'web proxy configuration' => 'Web proxy configuration', +'web server' => 'Web Server', +'webradio playlist' => 'Webradio Playlist', +'website' => 'Website', +'wednesday' => 'Mercoledi', +'week' => 'Settimana', +'week-graph' => 'Settimana', +'weekly firewallhits' => 'weekly firewallhits', +'weeks' => 'Settimane', +'wildcards' => 'Wildcards', +'wins server' => 'Wins Server', +'wins support' => 'Wins Support', +'wireless' => 'Wireless', +'wireless config added' => 'Wireless config added', +'wireless config changed' => 'Wireless config changed', +'wireless configuration' => 'Configuratione Wireless', +'wlan client' => 'Wireless client', +'wlan client advanced settings' => 'impostazioni avanzate Wireless client', +'wlan client and' => 'and', +'wlan client bssid' => 'BSSID', +'wlan client ccmp' => 'CCMP', +'wlan client configuration' => 'Wireless Client Configuration', +'wlan client disconnected' => 'Disconnesso', +'wlan client duplicate ssid' => 'Duplicate SSID', +'wlan client edit entry' => 'Edit wireless client configuration', +'wlan client encryption' => 'Encryption', +'wlan client encryption none' => 'None', +'wlan client encryption wep' => 'WEP', +'wlan client encryption wpa' => 'WPA', +'wlan client encryption wpa2' => 'WPA2', +'wlan client group cipher' => 'Group cipher', +'wlan client group key algorithm' => 'GKA', +'wlan client invalid key length' => 'Invalid key length.', +'wlan client new entry' => 'Crea nuova configuratione wireless client', +'wlan client new network' => 'Nuovo network', +'wlan client pairwise cipher' => 'Pairwise cipher', +'wlan client pairwise key algorithm' => 'PKA', +'wlan client pairwise key group key' => 'Pairwise key/group key', +'wlan client psk' => 'Pre-shared key', +'wlan client ssid' => 'SSID', +'wlan client tkip' => 'TKIP', +'wlan client wpa mode' => 'WPA mode', +'wlan client wpa mode all' => 'Auto', +'wlan client wpa mode ccmp ccmp' => 'CCMP-CCMP', +'wlan client wpa mode ccmp tkip' => 'CCMP-TKIP', +'wlan client wpa mode tkip tkip' => 'TKIP-TKIP', +'wlan clients' => 'Wireless clients', +'wlanap access point' => 'Access Point', +'wlanap channel' => 'Channel', +'wlanap country' => 'Country Code', +'wlanap debugging' => 'Debugging', +'wlanap del interface' => 'Rimuovi interfaccia selezionata?', +'wlanap encryption' => 'Encryption', +'wlanap informations' => 'Informationi', +'wlanap interface' => 'Selezione interfaccia', +'wlanap invalid wpa' => 'Invalid length in WPA Passphrase. Deve contenere dai 6 ai 63 caratteri.', +'wlanap link dhcp' => 'Configuratione Wireless Lan DHCP', +'wlanap link wireless' => 'Activate Wireless Lan clients', +'wlanap no interface' => 'Selected interface is not a Wirless Lan card!', +'wlanap none' => 'none', +'wlanap notifications' => 'Notifications', +'wlanap select interface' => 'Please select the Wireless Lan interface.', +'wlanap verbose' => 'Verbose', +'wlanap warnings' => 'Warnings', +'wlanap wlan card' => 'WLan Card', +'wlanap wlan services' => 'Servizio WLan', +'wlanap wlan settings' => 'Configurazione WLan', +'wlanap wlan status' => 'Stato WLan', +'wol wakeup' => 'WakeUp', +'workgroup' => 'Workgroup', +'written bytes' => 'Writen Bytes', +'xtaccess all error' => 'You cannot set an external access to ALL, that is done in the port forwarding record.', +'xtaccess bad transfert' => 'If you specify a port destination range, the source range must be identical !', +'year' => 'Anno', +'year-graph' => 'Anno', +'yearly firewallhits' => 'yearly firewallhits', +'yes' => 'Si', +'you can only define one roadwarrior connection when using pre-shared key authentication' => 'You can only define one Roadwarrior connection when using pre-shared key authentication.
Either you already have a Roadwarrior connection with pre-shared key authentication, or you\'re trying to add one now.', +'your department' => 'Your department', +'your e-mail' => 'Your e-mail address', +); + + +#EOF + + diff --git a/langs/list b/langs/list index 552ca87e7..ed59c86b4 100644 --- a/langs/list +++ b/langs/list @@ -6,3 +6,4 @@ pl:Polski:Polish ru:Русский:Russian nl:Nederlands:Dutch tr:Türkçe:Turkish +it:Italiano:Italian From 584601c70eccaeccbd9b1025b045439868c419b7 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 28 Oct 2014 02:04:05 +0100 Subject: [PATCH 179/297] Update some stuff for the Italian translation --- config/rootfiles/common/configroot | 1 + langs/it/cgi-bin/it.pl | 7 ++----- tools/make-functions | 2 ++ 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/rootfiles/common/configroot b/config/rootfiles/common/configroot index 8e5aff828..eaf1af6ed 100644 --- a/config/rootfiles/common/configroot +++ b/config/rootfiles/common/configroot @@ -80,6 +80,7 @@ var/ipfire/langs #var/ipfire/langs/en.pl #var/ipfire/langs/es.pl #var/ipfire/langs/fr.pl +#var/ipfire/langs/it.pl #var/ipfire/langs/list #var/ipfire/langs/nl.pl #var/ipfire/langs/pl.pl diff --git a/langs/it/cgi-bin/it.pl b/langs/it/cgi-bin/it.pl index a283c3b1c..0b5e7868c 100644 --- a/langs/it/cgi-bin/it.pl +++ b/langs/it/cgi-bin/it.pl @@ -1,6 +1,6 @@ - -%tr = ( +%tr = ( %tr, + 'Act as' => 'Lavora come:', 'Add Level7 rule' => 'Aggiungo una regola al Level7', 'Add Port Rule' => 'Aggiungo regola porta', @@ -2677,7 +2677,4 @@ 'your e-mail' => 'Your e-mail address', ); - #EOF - - diff --git a/tools/make-functions b/tools/make-functions index 5a557a67b..356d7a617 100644 --- a/tools/make-functions +++ b/tools/make-functions @@ -726,6 +726,7 @@ update_langs() { $BASEDIR/tools/sort_strings.pl ru $BASEDIR/tools/sort_strings.pl nl $BASEDIR/tools/sort_strings.pl tr + $BASEDIR/tools/sort_strings.pl it $BASEDIR/tools/check_strings.pl en > $BASEDIR/doc/language_issues.en $BASEDIR/tools/check_strings.pl de > $BASEDIR/doc/language_issues.de $BASEDIR/tools/check_strings.pl fr > $BASEDIR/doc/language_issues.fr @@ -734,6 +735,7 @@ update_langs() { $BASEDIR/tools/check_strings.pl ru > $BASEDIR/doc/language_issues.ru $BASEDIR/tools/check_strings.pl nl > $BASEDIR/doc/language_issues.nl $BASEDIR/tools/check_strings.pl tr > $BASEDIR/doc/language_issues.tr + $BASEDIR/tools/check_strings.pl it > $BASEDIR/doc/language_issues.it $BASEDIR/tools/check_langs.sh > $BASEDIR/doc/language_missings beautify message DONE } From 99154ed19de35327b2fc27cb7e1c08e88d7527e7 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 30 Oct 2014 17:49:43 +0100 Subject: [PATCH 180/297] squidclamav: Fix an error when parsing the client IP address --- lfs/squidclamav | 3 ++- ...idclamav-5.11-source-address-parsing-issue.patch | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 src/patches/squidclamav-5.11-source-address-parsing-issue.patch diff --git a/lfs/squidclamav b/lfs/squidclamav index 697b59ab0..4a7918ce0 100644 --- a/lfs/squidclamav +++ b/lfs/squidclamav @@ -32,7 +32,7 @@ DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = squidclamav -PAK_VER = 19 +PAK_VER = 20 DEPS = "clamav" @@ -79,6 +79,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/squidclamav-5.11-dont_use_ipv6.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/squidclamav-5.11-squid-helper-protocol.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/squidclamav-5.11-source-address-parsing-issue.patch cd $(DIR_APP) && ./configure --prefix=/usr cd $(DIR_APP) && make install install -v -m 664 $(DIR_CONF)/squidclamav/squidclamav.conf /etc/squidclamav.conf diff --git a/src/patches/squidclamav-5.11-source-address-parsing-issue.patch b/src/patches/squidclamav-5.11-source-address-parsing-issue.patch new file mode 100644 index 000000000..4031c733d --- /dev/null +++ b/src/patches/squidclamav-5.11-source-address-parsing-issue.patch @@ -0,0 +1,13 @@ +--- squidclamav-5.11/src/pattern.c~ 2014-10-29 13:08:05.658143495 +0000 ++++ squidclamav-5.11/src/pattern.c 2014-10-29 13:08:20.964642365 +0000 +@@ -151,10 +151,6 @@ + return 1; + } + +- /* extract source ipaddress and source fqdn */ +- if (parseSourceAddress(in_buff.src_address, "/") != 0) { +- } +- + if (debug != 0) + logit(log_file, "DEBUG Parsed request: %s %s/%s %s %s\n", in_buff.url, in_buff.ipaddress, in_buff.fqdn, in_buff.ident, in_buff.method); + From 940c90d098b927d93fe32720031aaaad0ed30a4d Mon Sep 17 00:00:00 2001 From: Erik Kapfer Date: Thu, 30 Oct 2014 16:42:47 +0100 Subject: [PATCH 181/297] New Addon: tmux --- config/rootfiles/packages/tmux | 2 + lfs/tmux | 87 ++++++++++++++++++++++++++++++++++ make.sh | 1 + 3 files changed, 90 insertions(+) create mode 100644 config/rootfiles/packages/tmux create mode 100644 lfs/tmux diff --git a/config/rootfiles/packages/tmux b/config/rootfiles/packages/tmux new file mode 100644 index 000000000..9e0fd0249 --- /dev/null +++ b/config/rootfiles/packages/tmux @@ -0,0 +1,2 @@ +usr/bin/tmux +#usr/share/man/man1/tmux.1 diff --git a/lfs/tmux b/lfs/tmux new file mode 100644 index 000000000..ec4cc20b7 --- /dev/null +++ b/lfs/tmux @@ -0,0 +1,87 @@ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2014 IPFire Team # +# # +# 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 3 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, see . # +# # +############################################################################### + +############################################################################### +# Definitions +############################################################################### + +include Config + +VER = 1.9a + +THISAPP = tmux-$(VER) +DL_FILE = $(THISAPP).tar.gz +DL_FROM = $(URL_IPFIRE) +DIR_APP = $(DIR_SRC)/$(THISAPP) +TARGET = $(DIR_INFO)/$(THISAPP) +PROG = tmux +PAK_VER = 1 + +DEPS = "" + +############################################################################### +# Top-level Rules +############################################################################### + +objects = $(DL_FILE) + +$(DL_FILE) = $(DL_FROM)/$(DL_FILE) + +$(DL_FILE)_MD5 = b07601711f96f1d260b390513b509a2d + +install : $(TARGET) + +check : $(patsubst %,$(DIR_CHK)/%,$(objects)) + +download :$(patsubst %,$(DIR_DL)/%,$(objects)) + +md5 : $(subst %,%_MD5,$(objects)) + +dist: + @$(PAK) + +############################################################################### +# Downloading, checking, md5sum +############################################################################### + +$(patsubst %,$(DIR_CHK)/%,$(objects)) : + @$(CHECK) + +$(patsubst %,$(DIR_DL)/%,$(objects)) : + @$(LOAD) + +$(subst %,%_MD5,$(objects)) : + @$(MD5) + +############################################################################### +# Installation Details +############################################################################### + +$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) + @$(PREBUILD) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && ./configure \ + --prefix=/usr + + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install + + @rm -rf $(DIR_APP) + @$(POSTBUILD) diff --git a/make.sh b/make.sh index bbbaffd2e..b54499d33 100755 --- a/make.sh +++ b/make.sh @@ -817,6 +817,7 @@ buildipfire() { ipfiremake perl-PDF-API2 ipfiremake squid-accounting ipfiremake pigz + ipfiremake tmux } buildinstaller() { From 7b6d7c6938e0fee73bb9774ce3a9b6b1c4c83e12 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 30 Oct 2014 23:18:31 +0100 Subject: [PATCH 182/297] installer: Create locale archive to save space in the initrd --- src/installer/dracut-module/module-setup.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/installer/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh index 187b12eb1..0173e95b6 100755 --- a/src/installer/dracut-module/module-setup.sh +++ b/src/installer/dracut-module/module-setup.sh @@ -54,11 +54,10 @@ install() { inst /usr/share/hwdata/pci.ids /usr/share/hwdata/usb.ids # Locales - for locale in de en es fr nl pl ru tr; do - for file in $(find /usr/lib/locale/${locale}*); do - inst "${file}" - done - done + mkdir -p "${initdir}/usr/lib/locale" + localedef --quiet --prefix="${initdir}" --add-to-archive /usr/lib/locale/en_US + localedef --quiet --prefix="${initdir}" --add-to-archive /usr/lib/locale/en_US.utf8 + for file in /usr/share/locale/*/LC_MESSAGES/installer.mo; do inst "${file}" done From f18d70385a178206aa8d3f078bd53f38f5aa98eb Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 1 Nov 2014 17:18:43 +0100 Subject: [PATCH 183/297] glibc: rootfile update (i586) --- config/rootfiles/common/i586/glibc | 1 + 1 file changed, 1 insertion(+) diff --git a/config/rootfiles/common/i586/glibc b/config/rootfiles/common/i586/glibc index 31fe5fdaa..d34a8f598 100644 --- a/config/rootfiles/common/i586/glibc +++ b/config/rootfiles/common/i586/glibc @@ -7058,6 +7058,7 @@ usr/lib/locale #usr/share/i18n/locales/eu_ES@euro #usr/share/i18n/locales/fa_IR #usr/share/i18n/locales/fi_FI +#usr/share/i18n/locales/fi_FI.orig #usr/share/i18n/locales/fi_FI@euro #usr/share/i18n/locales/fil_PH #usr/share/i18n/locales/fo_FO From bf65f292ddec09c83fe7e8e3cb8e182a3093dfa4 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 1 Nov 2014 17:19:09 +0100 Subject: [PATCH 184/297] kernel: rootfile update (i586). --- config/rootfiles/common/i586/linux | 167 +++++++++++++++++--- config/rootfiles/common/i586/linux-headers | 19 +++ config/rootfiles/packages/linux-pae | 169 ++++++++++++++++++--- 3 files changed, 305 insertions(+), 50 deletions(-) diff --git a/config/rootfiles/common/i586/linux b/config/rootfiles/common/i586/linux index 65b09baed..aec585728 100644 --- a/config/rootfiles/common/i586/linux +++ b/config/rootfiles/common/i586/linux @@ -16,7 +16,9 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/arch/x86/crypto/serpent-sse2-i586.ko #lib/modules/KVER-ipfire/kernel/arch/x86/crypto/twofish-i586.ko #lib/modules/KVER-ipfire/kernel/arch/x86/kernel -#lib/modules/KVER-ipfire/kernel/arch/x86/kernel/microcode.ko +#lib/modules/KVER-ipfire/kernel/arch/x86/kernel/cpu +#lib/modules/KVER-ipfire/kernel/arch/x86/kernel/cpu/microcode +#lib/modules/KVER-ipfire/kernel/arch/x86/kernel/cpu/microcode/microcode.ko #lib/modules/KVER-ipfire/kernel/arch/x86/kernel/test_nx.ko #lib/modules/KVER-ipfire/kernel/arch/x86/kvm #lib/modules/KVER-ipfire/kernel/arch/x86/kvm/kvm-amd.ko @@ -61,6 +63,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/crypto/gcm.ko #lib/modules/KVER-ipfire/kernel/crypto/ghash-generic.ko #lib/modules/KVER-ipfire/kernel/crypto/khazad.ko +#lib/modules/KVER-ipfire/kernel/crypto/lz4.ko +#lib/modules/KVER-ipfire/kernel/crypto/lz4hc.ko #lib/modules/KVER-ipfire/kernel/crypto/lzo.ko #lib/modules/KVER-ipfire/kernel/crypto/md4.ko #lib/modules/KVER-ipfire/kernel/crypto/michael_mic.ko @@ -87,7 +91,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/crypto/zlib.ko #lib/modules/KVER-ipfire/kernel/drivers #lib/modules/KVER-ipfire/kernel/drivers/acpi -#lib/modules/KVER-ipfire/kernel/drivers/acpi/acpi_i2c.ko +#lib/modules/KVER-ipfire/kernel/drivers/acpi/acpi_extlog.ko #lib/modules/KVER-ipfire/kernel/drivers/acpi/acpi_ipmi.ko #lib/modules/KVER-ipfire/kernel/drivers/acpi/acpi_pad.ko #lib/modules/KVER-ipfire/kernel/drivers/acpi/custom_method.ko @@ -154,6 +158,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_nv.ko #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_promise.ko #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_qstor.ko +#lib/modules/KVER-ipfire/kernel/drivers/ata/sata_rcar.ko #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_sil.ko #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_sil24.ko #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_sis.ko @@ -186,7 +191,6 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/block #lib/modules/KVER-ipfire/kernel/drivers/block/DAC960.ko #lib/modules/KVER-ipfire/kernel/drivers/block/cciss.ko -#lib/modules/KVER-ipfire/kernel/drivers/block/cpqarray.ko #lib/modules/KVER-ipfire/kernel/drivers/block/cryptoloop.ko #lib/modules/KVER-ipfire/kernel/drivers/block/floppy.ko #lib/modules/KVER-ipfire/kernel/drivers/block/mtip32xx @@ -251,7 +255,6 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/gx-suspmod.ko #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/longhaul.ko #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/longrun.ko -#lib/modules/KVER-ipfire/kernel/drivers/cpufreq/mperf.ko #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/p4-clockmod.ko #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/pcc-cpufreq.ko #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/powernow-k6.ko @@ -261,6 +264,9 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/speedstep-lib.ko #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/speedstep-smi.ko #lib/modules/KVER-ipfire/kernel/drivers/crypto +#lib/modules/KVER-ipfire/kernel/drivers/crypto/ccp +#lib/modules/KVER-ipfire/kernel/drivers/crypto/ccp/ccp-crypto.ko +#lib/modules/KVER-ipfire/kernel/drivers/crypto/ccp/ccp.ko #lib/modules/KVER-ipfire/kernel/drivers/crypto/geode-aes.ko #lib/modules/KVER-ipfire/kernel/drivers/crypto/hifn_795x.ko #lib/modules/KVER-ipfire/kernel/drivers/crypto/padlock-aes.ko @@ -268,7 +274,10 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/dca #lib/modules/KVER-ipfire/kernel/drivers/dca/dca.ko #lib/modules/KVER-ipfire/kernel/drivers/dma -#lib/modules/KVER-ipfire/kernel/drivers/dma/dw_dmac.ko +#lib/modules/KVER-ipfire/kernel/drivers/dma/dw +#lib/modules/KVER-ipfire/kernel/drivers/dma/dw/dw_dmac.ko +#lib/modules/KVER-ipfire/kernel/drivers/dma/dw/dw_dmac_core.ko +#lib/modules/KVER-ipfire/kernel/drivers/dma/dw/dw_dmac_pci.ko #lib/modules/KVER-ipfire/kernel/drivers/dma/ioat #lib/modules/KVER-ipfire/kernel/drivers/dma/ioat/ioatdma.ko #lib/modules/KVER-ipfire/kernel/drivers/dma/pch_dma.ko @@ -306,6 +315,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/ast #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/ast/ast.ko +#lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/bochs +#lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/bochs/bochs-drm.ko #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/cirrus #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/cirrus/cirrus.ko #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/drm.ko @@ -366,6 +377,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat-kovaplus.ko #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat-lua.ko #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat-pyra.ko +#lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat-ryos.ko #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat-savu.ko #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat.ko #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-saitek.ko @@ -426,9 +438,11 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/hwmon/fam15h_power.ko #lib/modules/KVER-ipfire/kernel/drivers/hwmon/fschmd.ko #lib/modules/KVER-ipfire/kernel/drivers/hwmon/g760a.ko +#lib/modules/KVER-ipfire/kernel/drivers/hwmon/g762.ko #lib/modules/KVER-ipfire/kernel/drivers/hwmon/gl518sm.ko #lib/modules/KVER-ipfire/kernel/drivers/hwmon/gl520sm.ko #lib/modules/KVER-ipfire/kernel/drivers/hwmon/hih6130.ko +#lib/modules/KVER-ipfire/kernel/drivers/hwmon/htu21.ko #lib/modules/KVER-ipfire/kernel/drivers/hwmon/hwmon-vid.ko #lib/modules/KVER-ipfire/kernel/drivers/hwmon/i5k_amb.ko #lib/modules/KVER-ipfire/kernel/drivers/hwmon/ibmaem.ko @@ -532,6 +546,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-parport.ko #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-pca-platform.ko #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-piix4.ko +#lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-robotfuzz-osif.ko #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-scmi.ko #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-simtec.ko #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-sis5595.ko @@ -544,7 +559,13 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/scx200_acb.ko #lib/modules/KVER-ipfire/kernel/drivers/i2c/i2c-core.ko #lib/modules/KVER-ipfire/kernel/drivers/i2c/i2c-dev.ko +#lib/modules/KVER-ipfire/kernel/drivers/i2c/i2c-mux.ko #lib/modules/KVER-ipfire/kernel/drivers/i2c/i2c-smbus.ko +#lib/modules/KVER-ipfire/kernel/drivers/i2c/muxes +#lib/modules/KVER-ipfire/kernel/drivers/i2c/muxes/i2c-mux-gpio.ko +#lib/modules/KVER-ipfire/kernel/drivers/i2c/muxes/i2c-mux-pca9541.ko +#lib/modules/KVER-ipfire/kernel/drivers/i2c/muxes/i2c-mux-pca954x.ko +#lib/modules/KVER-ipfire/kernel/drivers/i2c/muxes/i2c-mux-pinctrl.ko #lib/modules/KVER-ipfire/kernel/drivers/iio #lib/modules/KVER-ipfire/kernel/drivers/iio/common #lib/modules/KVER-ipfire/kernel/drivers/iio/common/hid-sensors @@ -564,6 +585,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/input/misc/ati_remote2.ko #lib/modules/KVER-ipfire/kernel/drivers/input/misc/atlas_btns.ko #lib/modules/KVER-ipfire/kernel/drivers/input/misc/cm109.ko +#lib/modules/KVER-ipfire/kernel/drivers/input/misc/ideapad_slidebar.ko #lib/modules/KVER-ipfire/kernel/drivers/input/misc/keyspan_remote.ko #lib/modules/KVER-ipfire/kernel/drivers/input/misc/pcspkr.ko #lib/modules/KVER-ipfire/kernel/drivers/input/misc/powermate.ko @@ -583,6 +605,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/input/serio #lib/modules/KVER-ipfire/kernel/drivers/input/serio/altera_ps2.ko #lib/modules/KVER-ipfire/kernel/drivers/input/serio/arc_ps2.ko +#lib/modules/KVER-ipfire/kernel/drivers/input/serio/hyperv-keyboard.ko #lib/modules/KVER-ipfire/kernel/drivers/input/serio/serio_raw.ko #lib/modules/KVER-ipfire/kernel/drivers/input/sparse-keymap.ko #lib/modules/KVER-ipfire/kernel/drivers/isdn @@ -653,11 +676,13 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lp5523.ko #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lp5562.ko #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lp55xx-common.ko +#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lp8501.ko #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lt3593.ko #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-ot200.ko #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca9532.ko #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca955x.ko -#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca9633.ko +#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca963x.ko +#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca9685.ko #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-ss4200.ko #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-tca6507.ko #lib/modules/KVER-ipfire/kernel/drivers/leds/trigger @@ -674,7 +699,6 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/md/bcache #lib/modules/KVER-ipfire/kernel/drivers/md/bcache/bcache.ko #lib/modules/KVER-ipfire/kernel/drivers/md/dm-bio-prison.ko -#lib/modules/KVER-ipfire/kernel/drivers/md/dm-bufio.ko #lib/modules/KVER-ipfire/kernel/drivers/md/dm-cache-cleaner.ko #lib/modules/KVER-ipfire/kernel/drivers/md/dm-cache-mq.ko #lib/modules/KVER-ipfire/kernel/drivers/md/dm-cache.ko @@ -685,6 +709,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/md/dm-raid.ko #lib/modules/KVER-ipfire/kernel/drivers/md/dm-round-robin.ko #lib/modules/KVER-ipfire/kernel/drivers/md/dm-service-time.ko +#lib/modules/KVER-ipfire/kernel/drivers/md/dm-switch.ko #lib/modules/KVER-ipfire/kernel/drivers/md/dm-verity.ko #lib/modules/KVER-ipfire/kernel/drivers/md/faulty.ko #lib/modules/KVER-ipfire/kernel/drivers/md/linear.ko @@ -725,6 +750,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cx24110.ko #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cx24113.ko #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cx24116.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cx24117.ko #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cx24123.ko #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cxd2820r.ko #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/dib0070.ko @@ -739,6 +765,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/drxk.ko #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/ds3000.ko #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/dvb-pll.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/dvbsky_m88ds3103.ko #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/ec100.ko #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/isl6405.ko #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/isl6421.ko @@ -822,6 +849,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/mt9v011.ko #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/ov7670.ko #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/saa6588.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/i2c/saa6752hs.ko #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/saa7110.ko #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/saa7115.ko #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/saa7127.ko @@ -902,7 +930,6 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/pci/pt1 #lib/modules/KVER-ipfire/kernel/drivers/media/pci/pt1/earth-pt1.ko #lib/modules/KVER-ipfire/kernel/drivers/media/pci/saa7134 -#lib/modules/KVER-ipfire/kernel/drivers/media/pci/saa7134/saa6752hs.ko #lib/modules/KVER-ipfire/kernel/drivers/media/pci/saa7134/saa7134-alsa.ko #lib/modules/KVER-ipfire/kernel/drivers/media/pci/saa7134/saa7134-dvb.ko #lib/modules/KVER-ipfire/kernel/drivers/media/pci/saa7134/saa7134-empress.ko @@ -933,12 +960,16 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/platform/marvell-ccic/cafe_ccic.ko #lib/modules/KVER-ipfire/kernel/drivers/media/platform/sh_veu.ko #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera +#lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/rcar_vin.ko #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.ko #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/sh_mobile_csi2.ko #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/soc_camera.ko #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/soc_camera_platform.ko #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/soc_mediabus.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/soc_scale_crop.ko #lib/modules/KVER-ipfire/kernel/drivers/media/platform/timblogiw.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/platform/vsp1 +#lib/modules/KVER-ipfire/kernel/drivers/media/platform/vsp1/vsp1.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc #lib/modules/KVER-ipfire/kernel/drivers/media/rc/ati_remote.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/ene_ir.ko @@ -979,6 +1010,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-budget-ci-old.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-cinergy-1400.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-cinergy.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-delock-61959.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-dib0700-nec.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-dib0700-rc5.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-digitalnow-tinytwin.ko @@ -1041,6 +1073,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-reddo.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-snapstream-firefly.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-streamzap.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-su3000.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-tbs-nec.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-technisat-usb2.ko #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-terratec-cinergy-xs.ko @@ -1073,6 +1106,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/fc0012.ko #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/fc0013.ko #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/fc2580.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/tuners/m88ts2022.ko #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/max2165.ko #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/mc44s803.ko #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/mt2060.ko @@ -1156,6 +1190,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/usb/em28xx/em28xx-alsa.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/em28xx/em28xx-dvb.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/em28xx/em28xx-rc.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/usb/em28xx/em28xx-v4l.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/em28xx/em28xx.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gl860 @@ -1195,6 +1230,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_sq905c.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_sq930x.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_stk014.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_stk1135.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_stv0680.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_sunplus.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_t613.ko @@ -1218,8 +1254,6 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/usb/s2255/s2255drv.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/siano #lib/modules/KVER-ipfire/kernel/drivers/media/usb/siano/smsusb.ko -#lib/modules/KVER-ipfire/kernel/drivers/media/usb/sn9c102 -#lib/modules/KVER-ipfire/kernel/drivers/media/usb/sn9c102/sn9c102.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/stk1160 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/stk1160/stk1160.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/stkwebcam @@ -1235,6 +1269,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/usb/ttusb-dec #lib/modules/KVER-ipfire/kernel/drivers/media/usb/ttusb-dec/ttusb_dec.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/ttusb-dec/ttusbdecfe.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/usb/usbtv +#lib/modules/KVER-ipfire/kernel/drivers/media/usb/usbtv/usbtv.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/usbvision #lib/modules/KVER-ipfire/kernel/drivers/media/usb/usbvision/usbvision.ko #lib/modules/KVER-ipfire/kernel/drivers/media/usb/uvc @@ -1244,7 +1280,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/tuner.ko #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/v4l2-common.ko -#lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/v4l2-int-device.ko +#lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/v4l2-dv-timings.ko #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/v4l2-mem2mem.ko #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/videobuf-core.ko #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/videobuf-dma-contig.ko @@ -1259,6 +1295,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/memstick #lib/modules/KVER-ipfire/kernel/drivers/memstick/core #lib/modules/KVER-ipfire/kernel/drivers/memstick/core/memstick.ko +#lib/modules/KVER-ipfire/kernel/drivers/memstick/core/ms_block.ko #lib/modules/KVER-ipfire/kernel/drivers/memstick/core/mspro_block.ko #lib/modules/KVER-ipfire/kernel/drivers/memstick/host #lib/modules/KVER-ipfire/kernel/drivers/memstick/host/jmb38x_ms.ko @@ -1442,6 +1479,10 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/e1000/e1000.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/e1000e #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/i40e +#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/i40e/i40e.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/i40evf +#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/i40evf/i40evf.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/igb #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/igb/igb.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/igbvf @@ -1495,6 +1536,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/realtek/8139too.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/realtek/atp.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/realtek/r8169.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/renesas +#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/renesas/sh_eth.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/sfc #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/sfc/sfc.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/silan @@ -1506,6 +1549,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/smsc/epic100.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/smsc/smc9194.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/smsc/smc91c92_cs.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/smsc/smsc911x.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/smsc/smsc9420.ko #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/stmicro #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/stmicro/stmmac @@ -1536,6 +1580,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/mdio.ko #lib/modules/KVER-ipfire/kernel/drivers/net/mii.ko #lib/modules/KVER-ipfire/kernel/drivers/net/netconsole.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/nlmon.ko #lib/modules/KVER-ipfire/kernel/drivers/net/phy #lib/modules/KVER-ipfire/kernel/drivers/net/phy/amd.ko #lib/modules/KVER-ipfire/kernel/drivers/net/phy/at803x.ko @@ -1582,6 +1627,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/usb/dm9601.ko #lib/modules/KVER-ipfire/kernel/drivers/net/usb/gl620a.ko #lib/modules/KVER-ipfire/kernel/drivers/net/usb/hso.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/usb/huawei_cdc_ncm.ko #lib/modules/KVER-ipfire/kernel/drivers/net/usb/int51x1.ko #lib/modules/KVER-ipfire/kernel/drivers/net/usb/ipheth.ko #lib/modules/KVER-ipfire/kernel/drivers/net/usb/kalmia.ko @@ -1598,6 +1644,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/usb/sierra_net.ko #lib/modules/KVER-ipfire/kernel/drivers/net/usb/smsc75xx.ko #lib/modules/KVER-ipfire/kernel/drivers/net/usb/smsc95xx.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/usb/sr9700.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/usb/sr9800.ko #lib/modules/KVER-ipfire/kernel/drivers/net/usb/usbnet.ko #lib/modules/KVER-ipfire/kernel/drivers/net/usb/zaurus.ko #lib/modules/KVER-ipfire/kernel/drivers/net/veth.ko @@ -1614,6 +1662,9 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ar5523 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ar5523/ar5523.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath10k +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath5k #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath5k/ath5k.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath9k @@ -1623,6 +1674,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/carl9170 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/carl9170/carl9170.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/wcn36xx +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/wcn36xx/wcn36xx.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/wil6210 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/wil6210/wil6210.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/atmel.ko @@ -1639,6 +1692,9 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmsmac/brcmsmac.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmutil #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/cw1200 +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/cw1200/cw1200_core.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/cw1200/cw1200_wlan_sdio.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/hostap #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/hostap/hostap.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/hostap/hostap_cs.ko @@ -1693,6 +1749,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2500pci.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2500usb.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2800lib.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2800mmio.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2800pci.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2800usb.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2x00lib.ko @@ -1721,6 +1778,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtl8192se/rtl8192se.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtl8723ae #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtl8723ae/rtl8723ae.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtl_pci.ko +#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtl_usb.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ti #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ti/wl1251 @@ -1766,7 +1825,6 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/asus-laptop.ko #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/asus-nb-wmi.ko #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/asus-wmi.ko -#lib/modules/KVER-ipfire/kernel/drivers/platform/x86/chromeos_laptop.ko #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/classmate-laptop.ko #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/compal-laptop.ko #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/dell-laptop.ko @@ -1779,6 +1837,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/hp-wmi.ko #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/hp_accel.ko #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/ideapad-laptop.ko +#lib/modules/KVER-ipfire/kernel/drivers/platform/x86/intel-rst.ko #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/intel_ips.ko #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/intel_oaktrail.ko #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/msi-laptop.ko @@ -1818,12 +1877,15 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-fm3130.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-hid-sensor-time.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-isl12022.ko +#lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-isl12057.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-isl1208.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-m41t80.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-m48t35.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-m48t59.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-max6900.ko +#lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-moxart.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-msm6242.ko +#lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-pcf2127.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-pcf8523.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-pcf8563.ko #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-pcf8583.ko @@ -1884,6 +1946,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/scsi/dpt_i2o.ko #lib/modules/KVER-ipfire/kernel/drivers/scsi/dtc.ko #lib/modules/KVER-ipfire/kernel/drivers/scsi/eata.ko +#lib/modules/KVER-ipfire/kernel/drivers/scsi/esas2r +#lib/modules/KVER-ipfire/kernel/drivers/scsi/esas2r/esas2r.ko #lib/modules/KVER-ipfire/kernel/drivers/scsi/fcoe #lib/modules/KVER-ipfire/kernel/drivers/scsi/fcoe/fcoe.ko #lib/modules/KVER-ipfire/kernel/drivers/scsi/fcoe/libfcoe.ko @@ -1980,6 +2044,9 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/staging/echo/echo.ko #lib/modules/KVER-ipfire/kernel/drivers/staging/et131x #lib/modules/KVER-ipfire/kernel/drivers/staging/et131x/et131x.ko +#lib/modules/KVER-ipfire/kernel/drivers/staging/gdm724x +#lib/modules/KVER-ipfire/kernel/drivers/staging/gdm724x/gdmtty.ko +#lib/modules/KVER-ipfire/kernel/drivers/staging/gdm724x/gdmulte.ko #lib/modules/KVER-ipfire/kernel/drivers/staging/rts5139 #lib/modules/KVER-ipfire/kernel/drivers/staging/rts5139/rts5139.ko #lib/modules/KVER-ipfire/kernel/drivers/staging/slicoss @@ -1989,7 +2056,9 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/staging/usbip/usbip-host.ko #lib/modules/KVER-ipfire/kernel/drivers/staging/usbip/vhci-hcd.ko #lib/modules/KVER-ipfire/kernel/drivers/thermal +#lib/modules/KVER-ipfire/kernel/drivers/thermal/int3403_thermal.ko #lib/modules/KVER-ipfire/kernel/drivers/thermal/intel_powerclamp.ko +#lib/modules/KVER-ipfire/kernel/drivers/thermal/x86_pkg_temp_thermal.ko #lib/modules/KVER-ipfire/kernel/drivers/tty #lib/modules/KVER-ipfire/kernel/drivers/tty/cyclades.ko #lib/modules/KVER-ipfire/kernel/drivers/tty/n_gsm.ko @@ -2001,6 +2070,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/8250 #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/8250/8250_dw.ko #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/arc_uart.ko +#lib/modules/KVER-ipfire/kernel/drivers/tty/serial/fsl_lpuart.ko #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/jsm #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/jsm/jsm.ko #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/rp2.ko @@ -2021,17 +2091,16 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/usb/atm/usbatm.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/atm/xusbatm.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea -#lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea/ci13xxx_msm.ko -#lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea/ci13xxx_pci.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea/ci_hdrc.ko +#lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea/ci_hdrc_msm.ko +#lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea/ci_hdrc_pci.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/class #lib/modules/KVER-ipfire/kernel/drivers/usb/class/cdc-acm.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/class/cdc-wdm.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/class/usblp.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/class/usbtmc.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3 -#lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3-exynos.ko -#lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3-omap.ko +#lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3-keystone.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3-pci.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/host @@ -2047,6 +2116,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/usb/image/microtek.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/misc #lib/modules/KVER-ipfire/kernel/drivers/usb/misc/adutux.ko +#lib/modules/KVER-ipfire/kernel/drivers/usb/misc/ehset.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/misc/emi26.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/misc/emi62.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/misc/ezusb.ko @@ -2062,6 +2132,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/usb/misc/yurex.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/mon #lib/modules/KVER-ipfire/kernel/drivers/usb/mon/usbmon.ko +#lib/modules/KVER-ipfire/kernel/drivers/usb/phy +#lib/modules/KVER-ipfire/kernel/drivers/usb/phy/phy-fsm-usb.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/aircable.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/ark3116.ko @@ -2072,7 +2144,6 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/digi_acceleport.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/f81232.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/ftdi_sio.ko -#lib/modules/KVER-ipfire/kernel/drivers/usb/serial/funsoft.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/io_edgeport.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/io_ti.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/ipaq.ko @@ -2084,17 +2155,17 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/mct_u232.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/mos7720.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/mos7840.ko -#lib/modules/KVER-ipfire/kernel/drivers/usb/serial/moto_modem.ko +#lib/modules/KVER-ipfire/kernel/drivers/usb/serial/mxuport.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/option.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/oti6858.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/pl2303.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/qcaux.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/qcserial.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/quatech2.ko -#lib/modules/KVER-ipfire/kernel/drivers/usb/serial/siemens_mpi.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/sierra.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/spcp8x5.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/ssu100.ko +#lib/modules/KVER-ipfire/kernel/drivers/usb/serial/usb-serial-simple.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/usb_wwan.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/usbserial.ko #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/visor.ko @@ -2129,6 +2200,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/uwb/whc-rc.ko #lib/modules/KVER-ipfire/kernel/drivers/uwb/whci.ko #lib/modules/KVER-ipfire/kernel/drivers/vhost +#lib/modules/KVER-ipfire/kernel/drivers/vhost/vhost.ko #lib/modules/KVER-ipfire/kernel/drivers/vhost/vhost_net.ko #lib/modules/KVER-ipfire/kernel/drivers/vhost/vringh.ko #lib/modules/KVER-ipfire/kernel/drivers/video @@ -2162,6 +2234,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/video/matrox/matroxfb_base.ko #lib/modules/KVER-ipfire/kernel/drivers/video/matrox/matroxfb_misc.ko #lib/modules/KVER-ipfire/kernel/drivers/video/neofb.ko +#lib/modules/KVER-ipfire/kernel/drivers/video/ocfb.ko #lib/modules/KVER-ipfire/kernel/drivers/video/output.ko #lib/modules/KVER-ipfire/kernel/drivers/video/pm2fb.ko #lib/modules/KVER-ipfire/kernel/drivers/video/pm3fb.ko @@ -2214,6 +2287,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/watchdog/alim1535_wdt.ko #lib/modules/KVER-ipfire/kernel/drivers/watchdog/alim7101_wdt.ko #lib/modules/KVER-ipfire/kernel/drivers/watchdog/cpu5wdt.ko +#lib/modules/KVER-ipfire/kernel/drivers/watchdog/dw_wdt.ko #lib/modules/KVER-ipfire/kernel/drivers/watchdog/eurotechwdt.ko #lib/modules/KVER-ipfire/kernel/drivers/watchdog/f71808e_wdt.ko #lib/modules/KVER-ipfire/kernel/drivers/watchdog/geodewdt.ko @@ -2227,6 +2301,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/drivers/watchdog/it8712f_wdt.ko #lib/modules/KVER-ipfire/kernel/drivers/watchdog/it87_wdt.ko #lib/modules/KVER-ipfire/kernel/drivers/watchdog/machzwd.ko +#lib/modules/KVER-ipfire/kernel/drivers/watchdog/mena21_wdt.ko #lib/modules/KVER-ipfire/kernel/drivers/watchdog/nv_tco.ko #lib/modules/KVER-ipfire/kernel/drivers/watchdog/pc87413_wdt.ko #lib/modules/KVER-ipfire/kernel/drivers/watchdog/pcwd_pci.ko @@ -2358,6 +2433,9 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/lib/crc7.ko #lib/modules/KVER-ipfire/kernel/lib/crc8.ko #lib/modules/KVER-ipfire/kernel/lib/libcrc32c.ko +#lib/modules/KVER-ipfire/kernel/lib/lz4 +#lib/modules/KVER-ipfire/kernel/lib/lz4/lz4_compress.ko +#lib/modules/KVER-ipfire/kernel/lib/lz4/lz4hc_compress.ko #lib/modules/KVER-ipfire/kernel/lib/mpi #lib/modules/KVER-ipfire/kernel/lib/mpi/mpi.ko #lib/modules/KVER-ipfire/kernel/lib/oid_registry.ko @@ -2367,8 +2445,6 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/lib/ts_bm.ko #lib/modules/KVER-ipfire/kernel/lib/ts_fsm.ko #lib/modules/KVER-ipfire/kernel/lib/ts_kmp.ko -#lib/modules/KVER-ipfire/kernel/lib/zlib_deflate -#lib/modules/KVER-ipfire/kernel/lib/zlib_deflate/zlib_deflate.ko #lib/modules/KVER-ipfire/kernel/net #lib/modules/KVER-ipfire/kernel/net/802 #lib/modules/KVER-ipfire/kernel/net/802/garp.ko @@ -2414,8 +2490,13 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/bridge/netfilter/ebtable_filter.ko #lib/modules/KVER-ipfire/kernel/net/bridge/netfilter/ebtable_nat.ko #lib/modules/KVER-ipfire/kernel/net/bridge/netfilter/ebtables.ko +#lib/modules/KVER-ipfire/kernel/net/bridge/netfilter/nf_tables_bridge.ko #lib/modules/KVER-ipfire/kernel/net/core #lib/modules/KVER-ipfire/kernel/net/core/netprio_cgroup.ko +#lib/modules/KVER-ipfire/kernel/net/hsr +#lib/modules/KVER-ipfire/kernel/net/hsr/hsr.ko +#lib/modules/KVER-ipfire/kernel/net/ieee802154 +#lib/modules/KVER-ipfire/kernel/net/ieee802154/6lowpan_iphc.ko #lib/modules/KVER-ipfire/kernel/net/ipv4 #lib/modules/KVER-ipfire/kernel/net/ipv4/ah4.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/esp4.ko @@ -2434,6 +2515,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_ECN.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_MASQUERADE.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_REJECT.ko +#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_SYNPROXY.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_ah.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_ipp2p.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_rpfilter.ko @@ -2447,6 +2529,11 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nf_nat_pptp.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nf_nat_proto_gre.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nf_nat_snmp_basic.ko +#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nf_tables_arp.ko +#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nf_tables_ipv4.ko +#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nft_chain_nat_ipv4.ko +#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nft_chain_route_ipv4.ko +#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nft_reject_ipv4.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/tcp_bic.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/tcp_diag.ko #lib/modules/KVER-ipfire/kernel/net/ipv4/tcp_highspeed.ko @@ -2470,12 +2557,14 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/ipv6/esp6.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/ip6_gre.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/ip6_tunnel.ko +#lib/modules/KVER-ipfire/kernel/net/ipv6/ip6_vti.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/ipcomp6.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/mip6.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_MASQUERADE.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_NPT.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_REJECT.ko +#lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_SYNPROXY.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_ah.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_eui64.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_frag.ko @@ -2490,6 +2579,10 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6table_raw.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6table_security.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/nf_nat_ipv6.ko +#lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/nf_tables_ipv6.ko +#lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/nft_chain_nat_ipv6.ko +#lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/nft_chain_route_ipv6.ko +#lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/nft_reject_ipv6.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/sit.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/tunnel6.ko #lib/modules/KVER-ipfire/kernel/net/ipv6/xfrm6_mode_beet.ko @@ -2520,7 +2613,9 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_ipportnet.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_net.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_netiface.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_netnet.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_netport.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_netportnet.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_list_set.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/ipvs #lib/modules/KVER-ipfire/kernel/net/netfilter/ipvs/ip_vs.ko @@ -2561,13 +2656,28 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/netfilter/nf_nat_proto_udplite.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/nf_nat_sip.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/nf_nat_tftp.ko -#lib/modules/KVER-ipfire/kernel/net/netfilter/nf_tproxy_core.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nf_synproxy_core.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nf_tables.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nf_tables_inet.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink_acct.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink_cthelper.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink_cttimeout.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink_log.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink_queue.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_compat.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_counter.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_ct.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_exthdr.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_hash.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_limit.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_log.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_meta.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_nat.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_queue.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_rbtree.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_reject.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_reject_inet.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_AUDIT.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_CHECKSUM.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_CLASSIFY.ko @@ -2593,6 +2703,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_TRACE.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_addrtype.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_bpf.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_cgroup.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_cluster.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_comment.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_connbytes.ko @@ -2609,7 +2720,9 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_hashlimit.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_helper.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_hl.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_ipcomp.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_iprange.ko +#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_l2tp.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_layer7.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_length.ko #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_limit.ko @@ -2654,6 +2767,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/sched/act_simple.ko #lib/modules/KVER-ipfire/kernel/net/sched/act_skbedit.ko #lib/modules/KVER-ipfire/kernel/net/sched/cls_basic.ko +#lib/modules/KVER-ipfire/kernel/net/sched/cls_bpf.ko #lib/modules/KVER-ipfire/kernel/net/sched/cls_cgroup.ko #lib/modules/KVER-ipfire/kernel/net/sched/cls_flow.ko #lib/modules/KVER-ipfire/kernel/net/sched/cls_fw.ko @@ -2674,9 +2788,11 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/net/sched/sch_codel.ko #lib/modules/KVER-ipfire/kernel/net/sched/sch_drr.ko #lib/modules/KVER-ipfire/kernel/net/sched/sch_dsmark.ko +#lib/modules/KVER-ipfire/kernel/net/sched/sch_fq.ko #lib/modules/KVER-ipfire/kernel/net/sched/sch_fq_codel.ko #lib/modules/KVER-ipfire/kernel/net/sched/sch_gred.ko #lib/modules/KVER-ipfire/kernel/net/sched/sch_hfsc.ko +#lib/modules/KVER-ipfire/kernel/net/sched/sch_hhf.ko #lib/modules/KVER-ipfire/kernel/net/sched/sch_htb.ko #lib/modules/KVER-ipfire/kernel/net/sched/sch_ingress.ko #lib/modules/KVER-ipfire/kernel/net/sched/sch_mqprio.ko @@ -2729,7 +2845,6 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/sound/core/seq/snd-seq.ko #lib/modules/KVER-ipfire/kernel/sound/core/snd-hrtimer.ko #lib/modules/KVER-ipfire/kernel/sound/core/snd-hwdep.ko -#lib/modules/KVER-ipfire/kernel/sound/core/snd-page-alloc.ko #lib/modules/KVER-ipfire/kernel/sound/core/snd-pcm.ko #lib/modules/KVER-ipfire/kernel/sound/core/snd-rawmidi.ko #lib/modules/KVER-ipfire/kernel/sound/core/snd-timer.ko @@ -2756,6 +2871,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/sound/drivers/vx #lib/modules/KVER-ipfire/kernel/sound/drivers/vx/snd-vx-lib.ko #lib/modules/KVER-ipfire/kernel/sound/firewire +#lib/modules/KVER-ipfire/kernel/sound/firewire/snd-dice.ko #lib/modules/KVER-ipfire/kernel/sound/firewire/snd-firewire-lib.ko #lib/modules/KVER-ipfire/kernel/sound/firewire/snd-firewire-speakers.ko #lib/modules/KVER-ipfire/kernel/sound/i2c @@ -2764,7 +2880,6 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/sound/i2c/other/snd-ak4114.ko #lib/modules/KVER-ipfire/kernel/sound/i2c/other/snd-ak4xxx-adda.ko #lib/modules/KVER-ipfire/kernel/sound/i2c/other/snd-pt2258.ko -#lib/modules/KVER-ipfire/kernel/sound/i2c/other/snd-tea575x-tuner.ko #lib/modules/KVER-ipfire/kernel/sound/i2c/snd-cs8427.ko #lib/modules/KVER-ipfire/kernel/sound/i2c/snd-i2c.ko #lib/modules/KVER-ipfire/kernel/sound/i2c/snd-tea6330t.ko @@ -2866,6 +2981,7 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-cirrus.ko #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-cmedia.ko #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-conexant.ko +#lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-generic.ko #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-hdmi.ko #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-idt.ko #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-realtek.ko @@ -2938,6 +3054,8 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/kernel/sound/usb/6fire/snd-usb-6fire.ko #lib/modules/KVER-ipfire/kernel/sound/usb/caiaq #lib/modules/KVER-ipfire/kernel/sound/usb/caiaq/snd-usb-caiaq.ko +#lib/modules/KVER-ipfire/kernel/sound/usb/hiface +#lib/modules/KVER-ipfire/kernel/sound/usb/hiface/snd-usb-hiface.ko #lib/modules/KVER-ipfire/kernel/sound/usb/misc #lib/modules/KVER-ipfire/kernel/sound/usb/misc/snd-ua101.ko #lib/modules/KVER-ipfire/kernel/sound/usb/snd-usb-audio.ko @@ -2958,4 +3076,3 @@ lib/modules/KVER-ipfire #lib/modules/KVER-ipfire/modules.symbols.bin #lib/modules/KVER-ipfire/source sbin/gen_init_cpio -boot/initramfs-KVER-ipfire.img diff --git a/config/rootfiles/common/i586/linux-headers b/config/rootfiles/common/i586/linux-headers index deaa97f40..804a61043 100644 --- a/config/rootfiles/common/i586/linux-headers +++ b/config/rootfiles/common/i586/linux-headers @@ -105,6 +105,7 @@ #usr/include/drm/i810_drm.h #usr/include/drm/i915_drm.h #usr/include/drm/mga_drm.h +#usr/include/drm/msm_drm.h #usr/include/drm/nouveau_drm.h #usr/include/drm/qxl_drm.h #usr/include/drm/r128_drm.h @@ -150,6 +151,7 @@ #usr/include/linux/ax25.h #usr/include/linux/b1lli.h #usr/include/linux/baycom.h +#usr/include/linux/bcm933xx_hcs.h #usr/include/linux/bfs_fs.h #usr/include/linux/binfmts.h #usr/include/linux/blkpg.h @@ -332,6 +334,7 @@ #usr/include/linux/kvm.h #usr/include/linux/kvm_para.h #usr/include/linux/l2tp.h +#usr/include/linux/libc-compat.h #usr/include/linux/limits.h #usr/include/linux/llc.h #usr/include/linux/loop.h @@ -345,6 +348,8 @@ #usr/include/linux/mei.h #usr/include/linux/mempolicy.h #usr/include/linux/meye.h +#usr/include/linux/mic_common.h +#usr/include/linux/mic_ioctl.h #usr/include/linux/mii.h #usr/include/linux/minix_fs.h #usr/include/linux/mman.h @@ -382,6 +387,8 @@ #usr/include/linux/netfilter/nf_conntrack_tcp.h #usr/include/linux/netfilter/nf_conntrack_tuple_common.h #usr/include/linux/netfilter/nf_nat.h +#usr/include/linux/netfilter/nf_tables.h +#usr/include/linux/netfilter/nf_tables_compat.h #usr/include/linux/netfilter/nfnetlink.h #usr/include/linux/netfilter/nfnetlink_acct.h #usr/include/linux/netfilter/nfnetlink_compat.h @@ -398,6 +405,7 @@ #usr/include/linux/netfilter/xt_CONNSECMARK.h #usr/include/linux/netfilter/xt_CT.h #usr/include/linux/netfilter/xt_DSCP.h +#usr/include/linux/netfilter/xt_HMARK.h #usr/include/linux/netfilter/xt_IDLETIMER.h #usr/include/linux/netfilter/xt_LED.h #usr/include/linux/netfilter/xt_LOG.h @@ -412,6 +420,7 @@ #usr/include/linux/netfilter/xt_TPROXY.h #usr/include/linux/netfilter/xt_addrtype.h #usr/include/linux/netfilter/xt_bpf.h +#usr/include/linux/netfilter/xt_cgroup.h #usr/include/linux/netfilter/xt_cluster.h #usr/include/linux/netfilter/xt_comment.h #usr/include/linux/netfilter/xt_connbytes.h @@ -427,8 +436,10 @@ #usr/include/linux/netfilter/xt_esp.h #usr/include/linux/netfilter/xt_hashlimit.h #usr/include/linux/netfilter/xt_helper.h +#usr/include/linux/netfilter/xt_ipcomp.h #usr/include/linux/netfilter/xt_iprange.h #usr/include/linux/netfilter/xt_ipvs.h +#usr/include/linux/netfilter/xt_l2tp.h #usr/include/linux/netfilter/xt_layer7.h #usr/include/linux/netfilter/xt_length.h #usr/include/linux/netfilter/xt_limit.h @@ -445,6 +456,7 @@ #usr/include/linux/netfilter/xt_rateest.h #usr/include/linux/netfilter/xt_realm.h #usr/include/linux/netfilter/xt_recent.h +#usr/include/linux/netfilter/xt_rpfilter.h #usr/include/linux/netfilter/xt_sctp.h #usr/include/linux/netfilter/xt_set.h #usr/include/linux/netfilter/xt_socket.h @@ -527,6 +539,7 @@ #usr/include/linux/nfsd/stats.h #usr/include/linux/nl80211.h #usr/include/linux/nubus.h +#usr/include/linux/nvme.h #usr/include/linux/nvram.h #usr/include/linux/omap3isp.h #usr/include/linux/omapfb.h @@ -618,6 +631,7 @@ #usr/include/linux/taskstats.h #usr/include/linux/tc_act #usr/include/linux/tc_act/tc_csum.h +#usr/include/linux/tc_act/tc_defact.h #usr/include/linux/tc_act/tc_gact.h #usr/include/linux/tc_act/tc_ipt.h #usr/include/linux/tc_act/tc_mirred.h @@ -700,6 +714,8 @@ #usr/include/linux/x25.h #usr/include/linux/xattr.h #usr/include/linux/xfrm.h +#usr/include/linux/zorro.h +#usr/include/linux/zorro_ids.h #usr/include/mtd #usr/include/mtd/inftl-user.h #usr/include/mtd/mtd-abi.h @@ -729,6 +745,7 @@ #usr/include/sound/compress_offload.h #usr/include/sound/compress_params.h #usr/include/sound/emu10k1.h +#usr/include/sound/firewire.h #usr/include/sound/hdsp.h #usr/include/sound/hdspm.h #usr/include/sound/sb16_csp.h @@ -740,4 +757,6 @@ #usr/include/video/uvesafb.h #usr/include/xen #usr/include/xen/evtchn.h +#usr/include/xen/gntalloc.h +#usr/include/xen/gntdev.h #usr/include/xen/privcmd.h diff --git a/config/rootfiles/packages/linux-pae b/config/rootfiles/packages/linux-pae index 31178d0d7..19f458ca6 100644 --- a/config/rootfiles/packages/linux-pae +++ b/config/rootfiles/packages/linux-pae @@ -14,7 +14,9 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/arch/x86/crypto/serpent-sse2-i586.ko #lib/modules/KVER-ipfire-pae/kernel/arch/x86/crypto/twofish-i586.ko #lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel -#lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/microcode.ko +#lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/cpu +#lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/cpu/microcode +#lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/cpu/microcode/microcode.ko #lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/test_nx.ko #lib/modules/KVER-ipfire-pae/kernel/arch/x86/kvm #lib/modules/KVER-ipfire-pae/kernel/arch/x86/kvm/kvm-amd.ko @@ -57,6 +59,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/crypto/gcm.ko #lib/modules/KVER-ipfire-pae/kernel/crypto/ghash-generic.ko #lib/modules/KVER-ipfire-pae/kernel/crypto/khazad.ko +#lib/modules/KVER-ipfire-pae/kernel/crypto/lz4.ko +#lib/modules/KVER-ipfire-pae/kernel/crypto/lz4hc.ko #lib/modules/KVER-ipfire-pae/kernel/crypto/lzo.ko #lib/modules/KVER-ipfire-pae/kernel/crypto/md4.ko #lib/modules/KVER-ipfire-pae/kernel/crypto/michael_mic.ko @@ -83,7 +87,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/crypto/zlib.ko #lib/modules/KVER-ipfire-pae/kernel/drivers #lib/modules/KVER-ipfire-pae/kernel/drivers/acpi -#lib/modules/KVER-ipfire-pae/kernel/drivers/acpi/acpi_i2c.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/acpi/acpi_extlog.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/acpi/acpi_ipmi.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/acpi/acpi_pad.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/acpi/custom_method.ko @@ -150,6 +154,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_nv.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_promise.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_qstor.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_rcar.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_sil.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_sil24.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_sis.ko @@ -182,7 +187,6 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/block #lib/modules/KVER-ipfire-pae/kernel/drivers/block/DAC960.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/block/cciss.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/block/cpqarray.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/block/cryptoloop.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/block/floppy.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/block/mtip32xx @@ -249,7 +253,6 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/gx-suspmod.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/longhaul.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/longrun.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/mperf.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/p4-clockmod.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/pcc-cpufreq.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/powernow-k6.ko @@ -259,13 +262,19 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/speedstep-lib.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/speedstep-smi.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/crypto +#lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/ccp +#lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/ccp/ccp-crypto.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/ccp/ccp.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/geode-aes.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/padlock-aes.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/padlock-sha.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/dca #lib/modules/KVER-ipfire-pae/kernel/drivers/dca/dca.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/dma -#lib/modules/KVER-ipfire-pae/kernel/drivers/dma/dw_dmac.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/dma/dw +#lib/modules/KVER-ipfire-pae/kernel/drivers/dma/dw/dw_dmac.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/dma/dw/dw_dmac_core.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/dma/dw/dw_dmac_pci.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/dma/ioat #lib/modules/KVER-ipfire-pae/kernel/drivers/dma/ioat/ioatdma.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/dma/pch_dma.ko @@ -294,14 +303,18 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/firmware/edd.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/firmware/iscsi_ibft.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/gpio +#lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-f7188x.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-ich.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-sch.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-sch311x.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-ts5500.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-viperboard.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/ast #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/ast/ast.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/bochs +#lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/bochs/bochs-drm.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/cirrus #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/cirrus/cirrus.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/drm.ko @@ -362,6 +375,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat-kovaplus.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat-lua.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat-pyra.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat-ryos.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat-savu.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-saitek.ko @@ -422,9 +436,11 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/fam15h_power.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/fschmd.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/g760a.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/g762.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/gl518sm.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/gl520sm.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/hih6130.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/htu21.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/hwmon-vid.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/i5k_amb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/ibmaem.ko @@ -528,6 +544,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-parport.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-pca-platform.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-piix4.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-robotfuzz-osif.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-scmi.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-simtec.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-sis5595.ko @@ -540,7 +557,13 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/scx200_acb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/i2c-core.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/i2c-dev.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/i2c-mux.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/i2c-smbus.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/muxes +#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/muxes/i2c-mux-gpio.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/muxes/i2c-mux-pca9541.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/muxes/i2c-mux-pca954x.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/muxes/i2c-mux-pinctrl.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/iio #lib/modules/KVER-ipfire-pae/kernel/drivers/iio/common #lib/modules/KVER-ipfire-pae/kernel/drivers/iio/common/hid-sensors @@ -560,6 +583,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/ati_remote2.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/atlas_btns.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/cm109.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/ideapad_slidebar.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/keyspan_remote.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/pcspkr.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/powermate.ko @@ -579,6 +603,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/input/serio #lib/modules/KVER-ipfire-pae/kernel/drivers/input/serio/altera_ps2.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/input/serio/arc_ps2.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/input/serio/hyperv-keyboard.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/input/serio/serio_raw.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/input/sparse-keymap.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/isdn @@ -649,11 +674,13 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lp5523.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lp5562.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lp55xx-common.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lp8501.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lt3593.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-ot200.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca9532.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca955x.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca9633.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca963x.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca9685.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-ss4200.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-tca6507.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/trigger @@ -670,7 +697,6 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/md/bcache #lib/modules/KVER-ipfire-pae/kernel/drivers/md/bcache/bcache.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-bio-prison.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-bufio.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-cache-cleaner.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-cache-mq.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-cache.ko @@ -681,6 +707,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-raid.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-round-robin.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-service-time.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-switch.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-verity.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/md/faulty.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/md/linear.ko @@ -721,6 +748,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cx24110.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cx24113.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cx24116.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cx24117.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cx24123.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cxd2820r.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/dib0070.ko @@ -735,6 +763,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/drxk.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/ds3000.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/dvb-pll.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/dvbsky_m88ds3103.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/ec100.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/isl6405.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/isl6421.ko @@ -818,6 +847,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/mt9v011.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/ov7670.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/saa6588.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/saa6752hs.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/saa7110.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/saa7115.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/saa7127.ko @@ -898,7 +928,6 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/pt1 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/pt1/earth-pt1.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/saa7134 -#lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/saa7134/saa6752hs.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/saa7134/saa7134-alsa.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/saa7134/saa7134-dvb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/saa7134/saa7134-empress.ko @@ -929,12 +958,16 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/marvell-ccic/cafe_ccic.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/sh_veu.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/rcar_vin.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/sh_mobile_csi2.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/soc_camera.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/soc_camera_platform.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/soc_mediabus.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/soc_scale_crop.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/timblogiw.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/vsp1 +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/vsp1/vsp1.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/ati_remote.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/ene_ir.ko @@ -975,6 +1008,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-budget-ci-old.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-cinergy-1400.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-cinergy.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-delock-61959.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-dib0700-nec.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-dib0700-rc5.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-digitalnow-tinytwin.ko @@ -1037,6 +1071,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-reddo.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-snapstream-firefly.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-streamzap.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-su3000.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-tbs-nec.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-technisat-usb2.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-terratec-cinergy-xs.ko @@ -1069,6 +1104,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/fc0012.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/fc0013.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/fc2580.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/m88ts2022.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/max2165.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/mc44s803.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/mt2060.ko @@ -1152,6 +1188,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/em28xx/em28xx-alsa.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/em28xx/em28xx-dvb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/em28xx/em28xx-rc.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/em28xx/em28xx-v4l.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/em28xx/em28xx.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gl860 @@ -1191,6 +1228,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_sq905c.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_sq930x.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_stk014.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_stk1135.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_stv0680.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_sunplus.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_t613.ko @@ -1214,8 +1252,6 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/s2255/s2255drv.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/siano #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/siano/smsusb.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/sn9c102 -#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/sn9c102/sn9c102.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/stk1160 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/stk1160/stk1160.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/stkwebcam @@ -1231,6 +1267,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/ttusb-dec #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/ttusb-dec/ttusb_dec.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/ttusb-dec/ttusbdecfe.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/usbtv +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/usbtv/usbtv.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/usbvision #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/usbvision/usbvision.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/uvc @@ -1240,7 +1278,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/tuner.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/v4l2-common.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/v4l2-int-device.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/v4l2-dv-timings.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/v4l2-mem2mem.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/videobuf-core.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/videobuf-dma-contig.ko @@ -1255,6 +1293,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/core #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/core/memstick.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/core/ms_block.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/core/mspro_block.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/host #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/host/jmb38x_ms.ko @@ -1438,6 +1477,10 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/e1000/e1000.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/e1000e #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/i40e +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/i40e/i40e.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/i40evf +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/i40evf/i40evf.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/igb #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/igb/igb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/igbvf @@ -1491,6 +1534,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/realtek/8139too.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/realtek/atp.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/realtek/r8169.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/renesas +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/renesas/sh_eth.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/sfc #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/sfc/sfc.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/silan @@ -1502,6 +1547,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/smsc/epic100.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/smsc/smc9194.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/smsc/smc91c92_cs.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/smsc/smsc911x.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/smsc/smsc9420.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/stmicro #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/stmicro/stmmac @@ -1532,6 +1578,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/mdio.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/mii.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/netconsole.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/nlmon.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/phy #lib/modules/KVER-ipfire-pae/kernel/drivers/net/phy/amd.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/phy/at803x.ko @@ -1578,6 +1625,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/dm9601.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/gl620a.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/hso.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/huawei_cdc_ncm.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/int51x1.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/ipheth.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/kalmia.ko @@ -1594,6 +1642,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/sierra_net.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/smsc75xx.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/smsc95xx.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/sr9700.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/sr9800.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/usbnet.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/zaurus.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/veth.ko @@ -1610,6 +1660,9 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ar5523 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ar5523/ar5523.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath10k +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath5k #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath5k/ath5k.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath9k @@ -1619,6 +1672,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/carl9170 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/carl9170/carl9170.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/wcn36xx +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/wcn36xx/wcn36xx.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/wil6210 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/wil6210/wil6210.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/atmel.ko @@ -1635,6 +1690,9 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmsmac/brcmsmac.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmutil #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/cw1200 +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/cw1200/cw1200_core.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/cw1200/cw1200_wlan_sdio.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/hostap #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/hostap/hostap.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/hostap/hostap_cs.ko @@ -1689,6 +1747,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2500pci.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2500usb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2800lib.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2800mmio.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2800pci.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2800usb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2x00lib.ko @@ -1717,6 +1776,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtl8192se/rtl8192se.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtl8723ae #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtl8723ae/rtl8723ae.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtl_pci.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtl_usb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ti #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ti/wl1251 @@ -1766,7 +1827,6 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/asus-laptop.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/asus-nb-wmi.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/asus-wmi.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/chromeos_laptop.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/classmate-laptop.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/compal-laptop.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/dell-laptop.ko @@ -1779,6 +1839,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/hp-wmi.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/hp_accel.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/ideapad-laptop.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/intel-rst.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/intel_ips.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/intel_oaktrail.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/msi-laptop.ko @@ -1818,12 +1879,15 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-fm3130.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-hid-sensor-time.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-isl12022.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-isl12057.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-isl1208.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-m41t80.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-m48t35.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-m48t59.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-max6900.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-moxart.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-msm6242.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-pcf2127.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-pcf8523.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-pcf8563.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-pcf8583.ko @@ -1884,6 +1948,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/dpt_i2o.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/dtc.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/eata.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/esas2r +#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/esas2r/esas2r.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/fcoe #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/fcoe/fcoe.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/fcoe/libfcoe.ko @@ -1980,6 +2046,9 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/echo/echo.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/et131x #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/et131x/et131x.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/staging/gdm724x +#lib/modules/KVER-ipfire-pae/kernel/drivers/staging/gdm724x/gdmtty.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/staging/gdm724x/gdmulte.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/rts5139 #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/rts5139/rts5139.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/slicoss @@ -1989,7 +2058,9 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/usbip/usbip-host.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/usbip/vhci-hcd.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/thermal +#lib/modules/KVER-ipfire-pae/kernel/drivers/thermal/int3403_thermal.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/thermal/intel_powerclamp.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/thermal/x86_pkg_temp_thermal.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/tty #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/cyclades.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/n_gsm.ko @@ -2001,6 +2072,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/8250 #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/8250/8250_dw.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/arc_uart.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/fsl_lpuart.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/jsm #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/jsm/jsm.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/rp2.ko @@ -2021,23 +2093,23 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/atm/usbatm.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/atm/xusbatm.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea -#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea/ci13xxx_msm.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea/ci13xxx_pci.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea/ci_hdrc.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea/ci_hdrc_msm.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea/ci_hdrc_pci.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/class #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/class/cdc-acm.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/class/cdc-wdm.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/class/usblp.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/class/usbtmc.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3 -#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3-exynos.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3-omap.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3-keystone.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3-pci.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/bcma-hcd.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/hwa-hc.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/isp1362-hcd.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/ohci-pci.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/sl811-hcd.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/ssb-hcd.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/whci @@ -2047,6 +2119,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/image/microtek.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/adutux.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/ehset.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/emi26.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/emi62.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/ezusb.ko @@ -2062,6 +2135,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/yurex.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/mon #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/mon/usbmon.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/phy +#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/phy/phy-fsm-usb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/aircable.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/ark3116.ko @@ -2072,7 +2147,6 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/digi_acceleport.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/f81232.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/ftdi_sio.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/funsoft.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/io_edgeport.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/io_ti.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/ipaq.ko @@ -2084,17 +2158,17 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/mct_u232.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/mos7720.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/mos7840.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/moto_modem.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/mxuport.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/option.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/oti6858.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/pl2303.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/qcaux.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/qcserial.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/quatech2.ko -#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/siemens_mpi.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/sierra.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/spcp8x5.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/ssu100.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/usb-serial-simple.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/usb_wwan.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/usbserial.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/visor.ko @@ -2129,6 +2203,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/uwb/whc-rc.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/uwb/whci.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/vhost +#lib/modules/KVER-ipfire-pae/kernel/drivers/vhost/vhost.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/vhost/vhost_net.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/vhost/vringh.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/video @@ -2162,6 +2237,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/video/matrox/matroxfb_base.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/video/matrox/matroxfb_misc.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/video/neofb.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/video/ocfb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/video/output.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/video/pm2fb.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/video/pm3fb.ko @@ -2215,6 +2291,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/alim1535_wdt.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/alim7101_wdt.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/cpu5wdt.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/dw_wdt.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/eurotechwdt.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/f71808e_wdt.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/geodewdt.ko @@ -2228,6 +2305,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/it8712f_wdt.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/it87_wdt.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/machzwd.ko +#lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/mena21_wdt.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/nv_tco.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/pc87413_wdt.ko #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/pcwd_pci.ko @@ -2370,6 +2448,9 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/lib/crc7.ko #lib/modules/KVER-ipfire-pae/kernel/lib/crc8.ko #lib/modules/KVER-ipfire-pae/kernel/lib/libcrc32c.ko +#lib/modules/KVER-ipfire-pae/kernel/lib/lz4 +#lib/modules/KVER-ipfire-pae/kernel/lib/lz4/lz4_compress.ko +#lib/modules/KVER-ipfire-pae/kernel/lib/lz4/lz4hc_compress.ko #lib/modules/KVER-ipfire-pae/kernel/lib/mpi #lib/modules/KVER-ipfire-pae/kernel/lib/mpi/mpi.ko #lib/modules/KVER-ipfire-pae/kernel/lib/oid_registry.ko @@ -2379,8 +2460,6 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/lib/ts_bm.ko #lib/modules/KVER-ipfire-pae/kernel/lib/ts_fsm.ko #lib/modules/KVER-ipfire-pae/kernel/lib/ts_kmp.ko -#lib/modules/KVER-ipfire-pae/kernel/lib/zlib_deflate -#lib/modules/KVER-ipfire-pae/kernel/lib/zlib_deflate/zlib_deflate.ko #lib/modules/KVER-ipfire-pae/kernel/net #lib/modules/KVER-ipfire-pae/kernel/net/802 #lib/modules/KVER-ipfire-pae/kernel/net/802/garp.ko @@ -2426,8 +2505,13 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/bridge/netfilter/ebtable_filter.ko #lib/modules/KVER-ipfire-pae/kernel/net/bridge/netfilter/ebtable_nat.ko #lib/modules/KVER-ipfire-pae/kernel/net/bridge/netfilter/ebtables.ko +#lib/modules/KVER-ipfire-pae/kernel/net/bridge/netfilter/nf_tables_bridge.ko #lib/modules/KVER-ipfire-pae/kernel/net/core #lib/modules/KVER-ipfire-pae/kernel/net/core/netprio_cgroup.ko +#lib/modules/KVER-ipfire-pae/kernel/net/hsr +#lib/modules/KVER-ipfire-pae/kernel/net/hsr/hsr.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ieee802154 +#lib/modules/KVER-ipfire-pae/kernel/net/ieee802154/6lowpan_iphc.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/ah4.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/esp4.ko @@ -2446,6 +2530,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_ECN.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_MASQUERADE.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_REJECT.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_SYNPROXY.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_ah.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_ipp2p.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_rpfilter.ko @@ -2459,6 +2544,11 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nf_nat_pptp.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nf_nat_proto_gre.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nf_nat_snmp_basic.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nf_tables_arp.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nf_tables_ipv4.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nft_chain_nat_ipv4.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nft_chain_route_ipv4.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nft_reject_ipv4.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/tcp_bic.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/tcp_diag.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/tcp_highspeed.ko @@ -2482,12 +2572,14 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/esp6.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/ip6_gre.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/ip6_tunnel.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/ip6_vti.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/ipcomp6.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/mip6.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_MASQUERADE.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_NPT.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_REJECT.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_SYNPROXY.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_ah.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_eui64.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_frag.ko @@ -2502,6 +2594,10 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6table_raw.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6table_security.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/nf_nat_ipv6.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/nf_tables_ipv6.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/nft_chain_nat_ipv6.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/nft_chain_route_ipv6.ko +#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/nft_reject_ipv6.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/sit.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/tunnel6.ko #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/xfrm6_mode_beet.ko @@ -2532,7 +2628,9 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_ipportnet.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_net.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_netiface.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_netnet.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_netport.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_netportnet.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_list_set.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipvs #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipvs/ip_vs.ko @@ -2573,13 +2671,26 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_nat_proto_udplite.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_nat_sip.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_nat_tftp.ko -#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_tproxy_core.ko -#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_synproxy_core.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_tables_inet.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink_acct.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink_cthelper.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink_cttimeout.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink_log.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink_queue.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_compat.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_counter.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_ct.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_exthdr.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_hash.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_limit.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_log.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_meta.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_nat.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_queue.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_rbtree.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_reject.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_reject_inet.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_AUDIT.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_CHECKSUM.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_CLASSIFY.ko @@ -2605,6 +2716,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_TRACE.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_addrtype.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_bpf.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_cgroup.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_cluster.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_comment.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_connbytes.ko @@ -2621,7 +2733,10 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_hashlimit.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_helper.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_hl.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_ipcomp.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_iprange.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_ipvs.ko +#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_l2tp.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_layer7.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_length.ko #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_limit.ko @@ -2666,6 +2781,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/sched/act_simple.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/act_skbedit.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/cls_basic.ko +#lib/modules/KVER-ipfire-pae/kernel/net/sched/cls_bpf.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/cls_cgroup.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/cls_flow.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/cls_fw.ko @@ -2686,9 +2802,11 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_codel.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_drr.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_dsmark.ko +#lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_fq.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_fq_codel.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_gred.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_hfsc.ko +#lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_hhf.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_htb.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_ingress.ko #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_mqprio.ko @@ -2741,7 +2859,6 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/sound/core/seq/snd-seq.ko #lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-hrtimer.ko #lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-hwdep.ko -#lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-page-alloc.ko #lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-pcm.ko #lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-rawmidi.ko #lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-timer.ko @@ -2776,7 +2893,6 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/other/snd-ak4114.ko #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/other/snd-ak4xxx-adda.ko #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/other/snd-pt2258.ko -#lib/modules/KVER-ipfire-pae/kernel/sound/i2c/other/snd-tea575x-tuner.ko #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/snd-cs8427.ko #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/snd-i2c.ko #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/snd-tea6330t.ko @@ -2878,6 +2994,7 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-cirrus.ko #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-cmedia.ko #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-conexant.ko +#lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-generic.ko #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-hdmi.ko #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-idt.ko #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-realtek.ko @@ -2950,6 +3067,8 @@ lib/modules/KVER-ipfire-pae #lib/modules/KVER-ipfire-pae/kernel/sound/usb/6fire/snd-usb-6fire.ko #lib/modules/KVER-ipfire-pae/kernel/sound/usb/caiaq #lib/modules/KVER-ipfire-pae/kernel/sound/usb/caiaq/snd-usb-caiaq.ko +#lib/modules/KVER-ipfire-pae/kernel/sound/usb/hiface +#lib/modules/KVER-ipfire-pae/kernel/sound/usb/hiface/snd-usb-hiface.ko #lib/modules/KVER-ipfire-pae/kernel/sound/usb/misc #lib/modules/KVER-ipfire-pae/kernel/sound/usb/misc/snd-ua101.ko #lib/modules/KVER-ipfire-pae/kernel/sound/usb/snd-usb-audio.ko From 9b35b114a0300b014f0a4f8e9325801868568931 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 1 Nov 2014 17:23:40 +0100 Subject: [PATCH 185/297] flash-images: distro image is not compressed on arm. --- lfs/flash-images | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lfs/flash-images b/lfs/flash-images index aeaace26e..f660d5cee 100644 --- a/lfs/flash-images +++ b/lfs/flash-images @@ -127,8 +127,11 @@ ifeq "$(MACHINE_TYPE)" "arm" endif # Install IPFire +ifneq "$(MACHINE_TYPE)" "arm" tar -x --lzma -C $(MNThdd)/ -f /install/cdrom/distro.img - +else + tar -x -C $(MNThdd)/ -f /install/cdrom/distro.img +endif echo "LANGUAGE=en" >> $(MNThdd)/var/ipfire/main/settings echo "HOSTNAME=$(SNAME)" >> $(MNThdd)/var/ipfire/main/settings echo "THEME=ipfire" >> $(MNThdd)/var/ipfire/main/settings From 932a34e57e3fb433ce86ab71359a26ebeb4d6410 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 1 Nov 2014 17:26:09 +0100 Subject: [PATCH 186/297] kernel: patches and preliminary 3.14 config for arm. --- .../kernel.config.armv5tel-ipfire-kirkwood | 728 ++++-- .../kernel.config.armv5tel-ipfire-multi | 837 +++++-- .../kernel/kernel.config.armv5tel-ipfire-rpi | 2090 +++++++---------- lfs/linux | 85 +- 4 files changed, 2076 insertions(+), 1664 deletions(-) diff --git a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood index 9bc1d43af..67d0d04e2 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood +++ b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 3.10.27-ipfire-kirkwood Kernel Configuration +# Linux/arm 3.14.22 Kernel Configuration # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -10,8 +10,10 @@ CONFIG_HAVE_LATENCYTOP_SUPPORT=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_ARCH_HAS_CPUFREQ=y CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y CONFIG_NEED_DMA_MAP_STATE=y CONFIG_VECTORS_BASE=0xffff0000 CONFIG_ARM_PATCH_PHYS_VIRT=y @@ -26,16 +28,19 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" +# CONFIG_COMPILE_TEST is not set CONFIG_LOCALVERSION="" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_LZMA=y CONFIG_HAVE_KERNEL_XZ=y CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_LZ4=y # CONFIG_KERNEL_GZIP is not set # CONFIG_KERNEL_LZMA is not set CONFIG_KERNEL_XZ=y # CONFIG_KERNEL_LZO is not set +# CONFIG_KERNEL_LZ4 is not set CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SWAP=y CONFIG_SYSVIPC=y @@ -47,19 +52,17 @@ CONFIG_AUDIT=y CONFIG_AUDITSYSCALL=y CONFIG_AUDIT_WATCH=y CONFIG_AUDIT_TREE=y -CONFIG_AUDIT_LOGINUID_IMMUTABLE=y -CONFIG_HAVE_GENERIC_HARDIRQS=y # # IRQ subsystem # -CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_HARDIRQS_SW_RESEND=y CONFIG_GENERIC_IRQ_CHIP=y CONFIG_IRQ_DOMAIN=y # CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_IRQ_FORCED_THREADING=y CONFIG_KTIME_SCALAR=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y @@ -78,6 +81,7 @@ CONFIG_HIGH_RES_TIMERS=y # CPU/Task time and stats accounting # CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set # CONFIG_IRQ_TIME_ACCOUNTING is not set CONFIG_BSD_PROCESS_ACCT=y # CONFIG_BSD_PROCESS_ACCT_V3 is not set @@ -95,6 +99,7 @@ CONFIG_TINY_RCU=y # CONFIG_TREE_RCU_TRACE is not set # CONFIG_IKCONFIG is not set CONFIG_LOG_BUF_SHIFT=18 +CONFIG_GENERIC_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_FREEZER=y @@ -114,6 +119,7 @@ CONFIG_BLK_CGROUP=y CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y +CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_SCHED_AUTOGROUP=y @@ -126,11 +132,11 @@ CONFIG_RD_BZIP2=y CONFIG_RD_LZMA=y CONFIG_RD_XZ=y CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_HAVE_UID16=y -CONFIG_HOTPLUG=y CONFIG_EXPERT=y CONFIG_UID16=y # CONFIG_SYSCTL_SYSCALL is not set @@ -163,12 +169,14 @@ CONFIG_SLUB_DEBUG=y # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLOB is not set +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set # CONFIG_PROFILING is not set CONFIG_TRACEPOINTS=y CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set CONFIG_JUMP_LABEL=y # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +CONFIG_ARCH_USE_BUILTIN_BSWAP=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y @@ -179,11 +187,19 @@ CONFIG_GENERIC_IDLE_POLL_SETUP=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_CLK=y CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_HAVE_ARCH_JUMP_LABEL=y CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y +CONFIG_HAVE_CC_STACKPROTECTOR=y +CONFIG_CC_STACKPROTECTOR=y +# CONFIG_CC_STACKPROTECTOR_NONE is not set +CONFIG_CC_STACKPROTECTOR_REGULAR=y +# CONFIG_CC_STACKPROTECTOR_STRONG is not set CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_REL=y @@ -203,7 +219,7 @@ CONFIG_MODULES=y # CONFIG_MODULE_FORCE_LOAD is not set CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_FORCE_UNLOAD is not set -# CONFIG_MODVERSIONS is not set +CONFIG_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_MODULE_SIG is not set CONFIG_STOP_MACHINE=y @@ -213,12 +229,14 @@ CONFIG_BLK_DEV_BSG=y CONFIG_BLK_DEV_BSGLIB=y CONFIG_BLK_DEV_INTEGRITY=y CONFIG_BLK_DEV_THROTTLING=y +# CONFIG_BLK_CMDLINE_PARSER is not set # # Partition Types # CONFIG_PARTITION_ADVANCED=y # CONFIG_ACORN_PARTITION is not set +# CONFIG_AIX_PARTITION is not set # CONFIG_OSF_PARTITION is not set # CONFIG_AMIGA_PARTITION is not set # CONFIG_ATARI_PARTITION is not set @@ -236,6 +254,7 @@ CONFIG_LDM_PARTITION=y # CONFIG_KARMA_PARTITION is not set CONFIG_EFI_PARTITION=y # CONFIG_SYSV68_PARTITION is not set +# CONFIG_CMDLINE_PARTITION is not set # # IO Schedulers @@ -254,6 +273,7 @@ CONFIG_INLINE_READ_UNLOCK=y CONFIG_INLINE_READ_UNLOCK_IRQ=y CONFIG_INLINE_WRITE_UNLOCK=y CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_FREEZER=y # @@ -284,8 +304,8 @@ CONFIG_ARCH_KIRKWOOD=y # CONFIG_ARCH_W90X900 is not set # CONFIG_ARCH_LPC32XX is not set # CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_MSM is not set -# CONFIG_ARCH_SHMOBILE is not set +# CONFIG_ARCH_MSM_NODT is not set +# CONFIG_ARCH_SHMOBILE_LEGACY is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_S3C24XX is not set @@ -294,8 +314,6 @@ CONFIG_ARCH_KIRKWOOD=y # CONFIG_ARCH_S5PC100 is not set # CONFIG_ARCH_S5PV210 is not set # CONFIG_ARCH_EXYNOS is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_U300 is not set # CONFIG_ARCH_DAVINCI is not set # CONFIG_ARCH_OMAP1 is not set # CONFIG_GPIO_PCA953X is not set @@ -304,26 +322,17 @@ CONFIG_KEYBOARD_GPIO_POLLED=y # # Marvell Kirkwood Implementations # +CONFIG_KIRKWOOD_LEGACY=y CONFIG_MACH_D2NET_V2=y -CONFIG_MACH_DB88F6281_BP=y -CONFIG_MACH_DOCKSTAR=y -CONFIG_MACH_ESATA_SHEEVAPLUG=y -CONFIG_MACH_GURUPLUG=y -CONFIG_MACH_INETSPACE_V2=y -CONFIG_MACH_MV88F6281GTW_GE=y CONFIG_MACH_NET2BIG_V2=y CONFIG_MACH_NET5BIG_V2=y -CONFIG_MACH_NETSPACE_MAX_V2=y -CONFIG_MACH_NETSPACE_V2=y CONFIG_MACH_OPENRD=y CONFIG_MACH_OPENRD_BASE=y CONFIG_MACH_OPENRD_CLIENT=y CONFIG_MACH_OPENRD_ULTIMATE=y CONFIG_MACH_RD88F6192_NAS=y CONFIG_MACH_RD88F6281=y -CONFIG_MACH_SHEEVAPLUG=y CONFIG_MACH_T5325=y -CONFIG_MACH_DREAMPLUG=y CONFIG_MACH_TS219=y CONFIG_MACH_TS41X=y @@ -331,30 +340,7 @@ CONFIG_MACH_TS41X=y # Device tree entries # CONFIG_ARCH_KIRKWOOD_DT=y -CONFIG_MACH_CLOUDBOX_DT=y -CONFIG_MACH_DLINK_KIRKWOOD_DT=y -CONFIG_MACH_DOCKSTAR_DT=y -CONFIG_MACH_DREAMPLUG_DT=y -CONFIG_MACH_GOFLEXNET_DT=y -CONFIG_MACH_GURUPLUG_DT=y -CONFIG_MACH_IB62X0_DT=y -CONFIG_MACH_ICONNECT_DT=y -CONFIG_MACH_INETSPACE_V2_DT=y -CONFIG_MACH_IOMEGA_IX2_200_DT=y -CONFIG_MACH_KM_KIRKWOOD_DT=y -CONFIG_MACH_LSXL_DT=y -CONFIG_MACH_MPLCEC4_DT=y -CONFIG_MACH_NETSPACE_LITE_V2_DT=y -CONFIG_MACH_NETSPACE_MAX_V2_DT=y -CONFIG_MACH_NETSPACE_MINI_V2_DT=y -CONFIG_MACH_NETSPACE_V2_DT=y -CONFIG_MACH_NSA310_DT=y -CONFIG_MACH_OPENBLOCKS_A6_DT=y -CONFIG_MACH_READYNAS_DT=y -CONFIG_MACH_TOPKICK_DT=y -CONFIG_MACH_TS219_DT=y -CONFIG_MACH_ICONNECT=y -CONFIG_MACH_NAS6210=y +CONFIG_MACH_MV88F6281GTW_GE_DT=y # CONFIG_PLAT_SPEAR is not set CONFIG_PLAT_ORION=y CONFIG_PLAT_ORION_LEGACY=y @@ -389,12 +375,14 @@ CONFIG_CACHE_FEROCEON_L2=y # CONFIG_CACHE_L2X0 is not set CONFIG_ARM_L1_CACHE_SHIFT=5 CONFIG_ARM_NR_BANKS=8 +CONFIG_MULTI_IRQ_HANDLER=y # # Bus support # CONFIG_PCI=y CONFIG_PCI_SYSCALL=y +CONFIG_PCI_MSI=y # CONFIG_PCI_DEBUG is not set # CONFIG_PCI_REALLOC_ENABLE_AUTO is not set CONFIG_PCI_STUB=y @@ -402,6 +390,21 @@ CONFIG_PCI_ATS=y CONFIG_PCI_IOV=y # CONFIG_PCI_PRI is not set # CONFIG_PCI_PASID is not set + +# +# PCI host controller drivers +# +CONFIG_PCI_MVEBU=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCIEAER=y +# CONFIG_PCIE_ECRC is not set +# CONFIG_PCIEAER_INJECT is not set +CONFIG_PCIEASPM=y +# CONFIG_PCIEASPM_DEBUG is not set +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_PERFORMANCE is not set +CONFIG_PCIE_PME=y CONFIG_PCCARD=m # CONFIG_PCMCIA is not set CONFIG_CARDBUS=y @@ -427,6 +430,13 @@ CONFIG_ARCH_NR_GPIO=0 CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_VOLUNTARY is not set # CONFIG_PREEMPT is not set +CONFIG_HZ_FIXED=0 +CONFIG_HZ_100=y +# CONFIG_HZ_200 is not set +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +# CONFIG_HZ_500 is not set +# CONFIG_HZ_1000 is not set CONFIG_HZ=100 CONFIG_SCHED_HRTICK=y CONFIG_AEABI=y @@ -437,16 +447,18 @@ CONFIG_HAVE_ARCH_PFN_VALID=y CONFIG_HIGHMEM=y # CONFIG_HIGHPTE is not set CONFIG_HW_PERF_EVENTS=y +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_HAVE_MEMBLOCK=y +CONFIG_NO_BOOTMEM=y # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=999999 CONFIG_COMPACTION=y CONFIG_MIGRATION=y # CONFIG_PHYS_ADDR_T_64BIT is not set -CONFIG_ZONE_DMA_FLAG=0 +CONFIG_ZONE_DMA_FLAG=1 CONFIG_BOUNCE=y CONFIG_KSM=y CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 @@ -454,11 +466,15 @@ CONFIG_CROSS_MEMORY_ATTACH=y CONFIG_NEED_PER_CPU_KM=y CONFIG_CLEANCACHE=y # CONFIG_FRONTSWAP is not set +# CONFIG_CMA is not set +# CONFIG_ZBUD is not set +# CONFIG_ZSMALLOC is not set CONFIG_FORCE_MAX_ZONEORDER=11 CONFIG_ALIGNMENT_TRAP=y # CONFIG_UACCESS_WITH_MEMCPY is not set CONFIG_SECCOMP=y -CONFIG_CC_STACKPROTECTOR=y +CONFIG_SWIOTLB=y +CONFIG_IOMMU_HELPER=y # # Boot options @@ -485,6 +501,34 @@ CONFIG_AUTO_ZRELADDR=y # # CPU Power Management # + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m +CONFIG_CPU_FREQ_GOV_USERSPACE=m +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m +# CONFIG_GENERIC_CPUFREQ_CPU0 is not set + +# +# ARM CPU frequency scaling drivers +# +CONFIG_ARM_KIRKWOOD_CPUFREQ=y + +# +# CPU Idle +# # CONFIG_CPU_IDLE is not set # CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set @@ -511,12 +555,20 @@ CONFIG_COREDUMP=y # # Power management options # +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +CONFIG_PM_SLEEP=y +# CONFIG_PM_AUTOSLEEP is not set +# CONFIG_PM_WAKELOCKS is not set CONFIG_PM_RUNTIME=y CONFIG_PM=y # CONFIG_PM_DEBUG is not set CONFIG_APM_EMULATION=y CONFIG_PM_CLK=y -# CONFIG_ARM_CPU_SUSPEND is not set +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set +CONFIG_CPU_PM=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARM_CPU_SUSPEND=y CONFIG_NET=y # @@ -553,7 +605,6 @@ CONFIG_IP_MROUTE=y CONFIG_IP_MROUTE_MULTIPLE_TABLES=y CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y -# CONFIG_ARPD is not set CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=m CONFIG_INET_AH=m @@ -586,7 +637,6 @@ CONFIG_DEFAULT_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" CONFIG_TCP_MD5SIG=y CONFIG_IPV6=y -CONFIG_IPV6_PRIVACY=y CONFIG_IPV6_ROUTER_PREF=y CONFIG_IPV6_ROUTE_INFO=y CONFIG_IPV6_OPTIMISTIC_DAD=y @@ -600,6 +650,7 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m CONFIG_INET6_XFRM_MODE_TUNNEL=m CONFIG_INET6_XFRM_MODE_BEET=m CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_VTI=m CONFIG_IPV6_SIT=m CONFIG_IPV6_SIT_6RD=y CONFIG_IPV6_NDISC_NODETYPE=y @@ -663,7 +714,22 @@ CONFIG_NF_NAT_FTP=m CONFIG_NF_NAT_IRC=m CONFIG_NF_NAT_SIP=m CONFIG_NF_NAT_TFTP=m -CONFIG_NETFILTER_TPROXY=m +CONFIG_NETFILTER_SYNPROXY=m +CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_INET=m +CONFIG_NFT_EXTHDR=m +CONFIG_NFT_META=m +CONFIG_NFT_CT=m +CONFIG_NFT_RBTREE=m +CONFIG_NFT_HASH=m +CONFIG_NFT_COUNTER=m +CONFIG_NFT_LOG=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_NAT=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m +CONFIG_NFT_COMPAT=m CONFIG_NETFILTER_XTABLES=y # @@ -708,6 +774,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m # CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m CONFIG_NETFILTER_XT_MATCH_CLUSTER=m CONFIG_NETFILTER_XT_MATCH_COMMENT=m CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m @@ -724,8 +791,12 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m CONFIG_NETFILTER_XT_MATCH_HELPER=m CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m CONFIG_NETFILTER_XT_MATCH_IPRANGE=m # CONFIG_NETFILTER_XT_MATCH_IPVS is not set +CONFIG_NETFILTER_XT_MATCH_L2TP=m +CONFIG_NETFILTER_XT_MATCH_LAYER7=m +# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set CONFIG_NETFILTER_XT_MATCH_LENGTH=m CONFIG_NETFILTER_XT_MATCH_LIMIT=m CONFIG_NETFILTER_XT_MATCH_MAC=m @@ -744,8 +815,6 @@ CONFIG_NETFILTER_XT_MATCH_RECENT=m CONFIG_NETFILTER_XT_MATCH_SCTP=m CONFIG_NETFILTER_XT_MATCH_SOCKET=m CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_LAYER7=m -# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set CONFIG_NETFILTER_XT_MATCH_STATISTIC=m CONFIG_NETFILTER_XT_MATCH_STRING=m CONFIG_NETFILTER_XT_MATCH_TCPMSS=m @@ -760,7 +829,9 @@ CONFIG_IP_SET_HASH_IP=m CONFIG_IP_SET_HASH_IPPORT=m CONFIG_IP_SET_HASH_IPPORTIP=m CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_NETPORTNET=m CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETNET=m CONFIG_IP_SET_HASH_NETPORT=m CONFIG_IP_SET_HASH_NETIFACE=m CONFIG_IP_SET_LIST_SET=m @@ -811,6 +882,11 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=y CONFIG_NF_CONNTRACK_IPV4=y # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set +CONFIG_NF_TABLES_IPV4=m +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NF_TABLES_ARP=m CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_AH=m CONFIG_IP_NF_MATCH_ECN=m @@ -818,6 +894,7 @@ CONFIG_IP_NF_MATCH_RPFILTER=m CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_FILTER=m CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m # CONFIG_IP_NF_TARGET_ULOG is not set CONFIG_NF_NAT_IPV4=m CONFIG_IP_NF_TARGET_MASQUERADE=m @@ -843,6 +920,10 @@ CONFIG_IP_NF_MATCH_IPP2P=m # CONFIG_NF_DEFRAG_IPV6=y CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_NF_TABLES_IPV6=m +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_REJECT_IPV6=m CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m @@ -856,12 +937,14 @@ CONFIG_IP6_NF_MATCH_RT=m CONFIG_IP6_NF_TARGET_HL=m CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_RAW=m CONFIG_IP6_NF_SECURITY=m CONFIG_NF_NAT_IPV6=m CONFIG_IP6_NF_TARGET_MASQUERADE=m CONFIG_IP6_NF_TARGET_NPT=m +CONFIG_NF_TABLES_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m @@ -886,7 +969,6 @@ CONFIG_BRIDGE_EBT_LOG=m CONFIG_BRIDGE_EBT_NFLOG=m # CONFIG_IP_DCCP is not set CONFIG_IP_SCTP=m -# CONFIG_SCTP_DBG_MSG is not set # CONFIG_SCTP_DBG_OBJCNT is not set # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y @@ -928,6 +1010,7 @@ CONFIG_LLC=y # CONFIG_LAPB is not set # CONFIG_PHONET is not set # CONFIG_IEEE802154 is not set +CONFIG_6LOWPAN_IPHC=m CONFIG_NET_SCHED=y # @@ -953,6 +1036,8 @@ CONFIG_NET_SCH_CHOKE=m CONFIG_NET_SCH_QFQ=m CONFIG_NET_SCH_CODEL=m CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_HHF=m CONFIG_NET_SCH_PIE=m CONFIG_NET_SCH_INGRESS=m CONFIG_NET_SCH_PLUG=m @@ -972,6 +1057,7 @@ CONFIG_NET_CLS_RSVP=m CONFIG_NET_CLS_RSVP6=m CONFIG_NET_CLS_FLOW=m CONFIG_NET_CLS_CGROUP=m +CONFIG_NET_CLS_BPF=m CONFIG_NET_EMATCH=y CONFIG_NET_EMATCH_STACK=32 CONFIG_NET_EMATCH_CMP=m @@ -1001,10 +1087,16 @@ CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m +CONFIG_OPENVSWITCH_GRE=y +CONFIG_OPENVSWITCH_VXLAN=y CONFIG_VSOCKETS=m CONFIG_NETLINK_MMAP=y CONFIG_NETLINK_DIAG=m -CONFIG_NETPRIO_CGROUP=m +CONFIG_NET_MPLS_GSO=m +CONFIG_HSR=m +CONFIG_CGROUP_NET_PRIO=m +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y CONFIG_BPF_JIT=y @@ -1114,12 +1206,12 @@ CONFIG_REGMAP=y CONFIG_REGMAP_I2C=y CONFIG_REGMAP_IRQ=y CONFIG_DMA_SHARED_BUFFER=y -# CONFIG_CMA is not set # # Bus devices # CONFIG_MVEBU_MBUS=y +# CONFIG_ARM_CCI is not set CONFIG_CONNECTOR=y CONFIG_PROC_EVENTS=y CONFIG_MTD=y @@ -1133,7 +1225,6 @@ CONFIG_MTD_OF_PARTS=y # # User Modules And Translation Layers # -# CONFIG_MTD_BLKDEVS is not set # CONFIG_MTD_BLOCK is not set # CONFIG_MTD_BLOCK_RO is not set # CONFIG_FTL is not set @@ -1196,9 +1287,9 @@ CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_DISKONCHIP is not set # CONFIG_MTD_NAND_DOCG4 is not set # CONFIG_MTD_NAND_CAFE is not set +# CONFIG_MTD_NAND_PXA3xx is not set # CONFIG_MTD_NAND_NANDSIM is not set # CONFIG_MTD_NAND_PLATFORM is not set -# CONFIG_MTD_ALAUDA is not set CONFIG_MTD_NAND_ORION=y # CONFIG_MTD_ONENAND is not set @@ -1223,13 +1314,12 @@ CONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y -CONFIG_OF_DEVICE=y -CONFIG_OF_I2C=y CONFIG_OF_NET=y CONFIG_OF_MDIO=y CONFIG_OF_PCI=y CONFIG_OF_PCI_IRQ=y CONFIG_OF_MTD=y +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y CONFIG_PARPORT=m CONFIG_PARPORT_PC=m CONFIG_PARPORT_SERIAL=m @@ -1240,6 +1330,7 @@ CONFIG_PARPORT_SERIAL=m CONFIG_PARPORT_1284=y CONFIG_PARPORT_NOT_PC=y CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_NULL_BLK is not set # CONFIG_PARIDE is not set # CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set CONFIG_BLK_CPQ_CISS_DA=m @@ -1273,7 +1364,6 @@ CONFIG_BLK_DEV_RSXX=m # CONFIG_ATMEL_PWM is not set CONFIG_DUMMY_IRQ=m # CONFIG_PHANTOM is not set -# CONFIG_INTEL_MID_PTI is not set # CONFIG_SGI_IOC4 is not set CONFIG_TIFM_CORE=m CONFIG_TIFM_7XX1=m @@ -1318,6 +1408,14 @@ CONFIG_TI_ST=m # Altera FPGA firmware download module # CONFIG_ALTERA_STAPL=m + +# +# Intel MIC Host Driver +# + +# +# Intel MIC Card Driver +# CONFIG_HAVE_IDE=y # CONFIG_IDE is not set @@ -1381,7 +1479,6 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=5000 CONFIG_AIC7XXX_DEBUG_ENABLE=y CONFIG_AIC7XXX_DEBUG_MASK=0 CONFIG_AIC7XXX_REG_PRETTY_PRINT=y -# CONFIG_SCSI_AIC7XXX_OLD is not set CONFIG_SCSI_AIC79XX=m CONFIG_AIC79XX_CMDS_PER_DEVICE=32 CONFIG_AIC79XX_RESET_DELAY_MS=4000 @@ -1395,6 +1492,7 @@ CONFIG_SCSI_MVSAS=m CONFIG_SCSI_MVSAS_TASKLET=y # CONFIG_SCSI_MVUMI is not set CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_ESAS2R=m CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m @@ -1443,7 +1541,7 @@ CONFIG_SCSI_DC390T=m CONFIG_SCSI_PMCRAID=m CONFIG_SCSI_PM8001=m # CONFIG_SCSI_SRP is not set -CONFIG_SCSI_BFA_FC=m +# CONFIG_SCSI_BFA_FC is not set CONFIG_SCSI_CHELSIO_FCOE=m CONFIG_SCSI_DH=y CONFIG_SCSI_DH_RDAC=m @@ -1485,6 +1583,7 @@ CONFIG_SATA_HIGHBANK=m CONFIG_SATA_MV=m CONFIG_SATA_NV=m CONFIG_SATA_PROMISE=m +CONFIG_SATA_RCAR=m CONFIG_SATA_SIL=m CONFIG_SATA_SIS=m CONFIG_SATA_SVW=m @@ -1562,13 +1661,14 @@ CONFIG_MD_MULTIPATH=m CONFIG_MD_FAULTY=m CONFIG_BCACHE=m # CONFIG_BCACHE_DEBUG is not set -# CONFIG_BCACHE_EDEBUG is not set # CONFIG_BCACHE_CLOSURES_DEBUG is not set +CONFIG_BLK_DEV_DM_BUILTIN=y CONFIG_BLK_DEV_DM=y # CONFIG_DM_DEBUG is not set -CONFIG_DM_BUFIO=m +CONFIG_DM_BUFIO=y CONFIG_DM_BIO_PRISON=m CONFIG_DM_PERSISTENT_DATA=m +# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set CONFIG_DM_CRYPT=m CONFIG_DM_SNAPSHOT=y # CONFIG_DM_THIN_PROVISIONING is not set @@ -1576,8 +1676,8 @@ CONFIG_DM_CACHE=m CONFIG_DM_CACHE_MQ=m CONFIG_DM_CACHE_CLEANER=m CONFIG_DM_MIRROR=y -CONFIG_DM_RAID=m CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_RAID=m CONFIG_DM_ZERO=y CONFIG_DM_MULTIPATH=m CONFIG_DM_MULTIPATH_QL=m @@ -1586,6 +1686,7 @@ CONFIG_DM_MULTIPATH_ST=m CONFIG_DM_UEVENT=y # CONFIG_DM_FLAKEY is not set CONFIG_DM_VERITY=m +CONFIG_DM_SWITCH=m # CONFIG_TARGET_CORE is not set CONFIG_FUSION=y CONFIG_FUSION_SPI=m @@ -1611,12 +1712,12 @@ CONFIG_I2O_BLOCK=m CONFIG_I2O_SCSI=m CONFIG_I2O_PROC=m CONFIG_NETDEVICES=y +CONFIG_MII=m CONFIG_NET_CORE=y CONFIG_BONDING=m CONFIG_DUMMY=m # CONFIG_EQUALIZER is not set # CONFIG_NET_FC is not set -CONFIG_MII=m CONFIG_IFB=m # CONFIG_NET_TEAM is not set CONFIG_MACVLAN=m @@ -1635,6 +1736,7 @@ CONFIG_IMQ_BEHAVIOR_AB=y CONFIG_IMQ_NUM_DEVS=2 CONFIG_TUN=m CONFIG_VETH=m +CONFIG_NLMON=m # CONFIG_ARCNET is not set CONFIG_ATM_DRIVERS=y # CONFIG_ATM_DUMMY is not set @@ -1680,6 +1782,8 @@ CONFIG_ACENIC=m CONFIG_NET_VENDOR_AMD=y CONFIG_AMD8111_ETH=m CONFIG_PCNET32=m +CONFIG_NET_VENDOR_ARC=y +CONFIG_ARC_EMAC=m CONFIG_NET_VENDOR_ATHEROS=y CONFIG_ATL2=m CONFIG_ATL1=m @@ -1754,12 +1858,17 @@ CONFIG_IGBVF=m CONFIG_IXGB=m CONFIG_IXGBE=m CONFIG_IXGBE_HWMON=y +CONFIG_IXGBEVF=m +CONFIG_I40E=m +CONFIG_I40E_VXLAN=y +CONFIG_I40EVF=m CONFIG_NET_VENDOR_I825XX=y CONFIG_IP1000=m CONFIG_JME=m CONFIG_NET_VENDOR_MARVELL=y CONFIG_MV643XX_ETH=m CONFIG_MVMDIO=m +CONFIG_MVNETA=m CONFIG_SKGE=m # CONFIG_SKGE_DEBUG is not set CONFIG_SKGE_GENESIS=y @@ -1768,6 +1877,7 @@ CONFIG_SKY2=m CONFIG_NET_VENDOR_MELLANOX=y # CONFIG_MLX4_EN is not set # CONFIG_MLX4_CORE is not set +# CONFIG_MLX5_CORE is not set CONFIG_NET_VENDOR_MICREL=y # CONFIG_KS8842 is not set # CONFIG_KS8851_MLL is not set @@ -1785,7 +1895,6 @@ CONFIG_NE2K_PCI=m CONFIG_NET_VENDOR_NVIDIA=y CONFIG_FORCEDETH=m CONFIG_NET_VENDOR_OKI=y -CONFIG_PCH_GBE=m CONFIG_ETHOC=m # CONFIG_NET_PACKET_ENGINE is not set CONFIG_NET_VENDOR_QLOGIC=y @@ -1802,6 +1911,7 @@ CONFIG_8139TOO=m CONFIG_8139TOO_8129=y # CONFIG_8139_OLD_RX_RESET is not set CONFIG_R8169=m +CONFIG_SH_ETH=m CONFIG_NET_VENDOR_RDC=y CONFIG_R6040=m CONFIG_NET_VENDOR_SEEQ=y @@ -1906,8 +2016,11 @@ CONFIG_USB_NET_AX88179_178A=m CONFIG_USB_NET_CDCETHER=m CONFIG_USB_NET_CDC_EEM=m CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_HUAWEI_CDC_NCM=m CONFIG_USB_NET_CDC_MBIM=m CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m CONFIG_USB_NET_SMSC75XX=m CONFIG_USB_NET_SMSC95XX=m CONFIG_USB_NET_GL620A=m @@ -1962,7 +2075,9 @@ CONFIG_ATH9K=m CONFIG_ATH9K_PCI=y CONFIG_ATH9K_AHB=y # CONFIG_ATH9K_DEBUGFS is not set +# CONFIG_ATH9K_WOW is not set # CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set +CONFIG_ATH9K_RFKILL=y CONFIG_ATH9K_HTC=m # CONFIG_ATH9K_HTC_DEBUGFS is not set CONFIG_CARL9170=m @@ -1973,14 +2088,25 @@ CONFIG_CARL9170_WPC=y CONFIG_AR5523=m CONFIG_WIL6210=m CONFIG_WIL6210_ISR_COR=y +# CONFIG_WIL6210_TRACING is not set +CONFIG_ATH10K=m +CONFIG_ATH10K_PCI=m +# CONFIG_ATH10K_DEBUG is not set +# CONFIG_ATH10K_DEBUGFS is not set +# CONFIG_ATH10K_TRACING is not set +CONFIG_WCN36XX=m +# CONFIG_WCN36XX_DEBUGFS is not set CONFIG_B43=m +CONFIG_B43_BCMA=y CONFIG_B43_SSB=y CONFIG_B43_PCI_AUTOSELECT=y CONFIG_B43_PCICORE_AUTOSELECT=y CONFIG_B43_SDIO=y +CONFIG_B43_BCMA_PIO=y CONFIG_B43_PIO=y CONFIG_B43_PHY_N=y CONFIG_B43_PHY_LP=y +CONFIG_B43_PHY_HT=y CONFIG_B43_LEDS=y CONFIG_B43_HWRNG=y # CONFIG_B43_DEBUG is not set @@ -1995,7 +2121,11 @@ CONFIG_B43LEGACY_PIO=y CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y # CONFIG_B43LEGACY_DMA_MODE is not set # CONFIG_B43LEGACY_PIO_MODE is not set +CONFIG_BRCMUTIL=m +CONFIG_BRCMSMAC=m # CONFIG_BRCMFMAC is not set +# CONFIG_BRCM_TRACING is not set +# CONFIG_BRCMDBG is not set CONFIG_HOSTAP=m CONFIG_HOSTAP_FIRMWARE=y CONFIG_HOSTAP_FIRMWARE_NVRAM=y @@ -2051,10 +2181,12 @@ CONFIG_RT73USB=m CONFIG_RT2800USB=m CONFIG_RT2800USB_RT33XX=y CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT3573=y CONFIG_RT2800USB_RT53XX=y CONFIG_RT2800USB_RT55XX=y CONFIG_RT2800USB_UNKNOWN=y CONFIG_RT2800_LIB=m +CONFIG_RT2800_LIB_MMIO=m CONFIG_RT2X00_LIB_MMIO=m CONFIG_RT2X00_LIB_PCI=m CONFIG_RT2X00_LIB_USB=m @@ -2063,14 +2195,17 @@ CONFIG_RT2X00_LIB_FIRMWARE=y CONFIG_RT2X00_LIB_CRYPTO=y CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set -CONFIG_RTLWIFI=m -# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTL_CARDS=m CONFIG_RTL8192CE=m CONFIG_RTL8192SE=m CONFIG_RTL8192DE=m CONFIG_RTL8723AE=m CONFIG_RTL8188EE=m CONFIG_RTL8192CU=m +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_PCI=m +CONFIG_RTLWIFI_USB=m +# CONFIG_RTLWIFI_DEBUG is not set CONFIG_RTL8192C_COMMON=m CONFIG_WL_TI=y CONFIG_WL1251=m @@ -2086,6 +2221,8 @@ CONFIG_MWIFIEX=m CONFIG_MWIFIEX_SDIO=m # CONFIG_MWIFIEX_PCIE is not set CONFIG_MWIFIEX_USB=m +CONFIG_CW1200=m +CONFIG_CW1200_WLAN_SDIO=m # # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -2167,8 +2304,8 @@ CONFIG_HISAX_FRITZ_PCIPNP=m CONFIG_ISDN_CAPI=m CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y CONFIG_CAPI_TRACE=y -CONFIG_ISDN_CAPI_MIDDLEWARE=y CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_MIDDLEWARE=y CONFIG_ISDN_CAPI_CAPIDRV=m # @@ -2267,6 +2404,7 @@ CONFIG_INPUT_MISC=y # CONFIG_INPUT_MMA8450 is not set # CONFIG_INPUT_MPU3050 is not set # CONFIG_INPUT_GP2A is not set +# CONFIG_INPUT_GPIO_BEEPER is not set # CONFIG_INPUT_GPIO_TILT_POLLED is not set CONFIG_INPUT_ATI_REMOTE2=m CONFIG_INPUT_KEYSPAN_REMOTE=m @@ -2277,7 +2415,6 @@ CONFIG_INPUT_CM109=m CONFIG_INPUT_RETU_PWRBUTTON=m CONFIG_INPUT_UINPUT=m # CONFIG_INPUT_PCF8574 is not set -CONFIG_INPUT_PWM_BEEPER=m CONFIG_INPUT_GPIO_ROTARY_ENCODER=m # CONFIG_INPUT_ADXL34X is not set # CONFIG_INPUT_IMS_PCU is not set @@ -2296,6 +2433,7 @@ CONFIG_SERIO_ALTERA_PS2=m # CONFIG_SERIO_PS2MULT is not set CONFIG_SERIO_ARC_PS2=m CONFIG_SERIO_APBPS2=m +# CONFIG_SERIO_OLPC_APSP is not set # CONFIG_GAMEPORT is not set # @@ -2305,6 +2443,7 @@ CONFIG_TTY=y CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y CONFIG_HW_CONSOLE=y CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y @@ -2324,7 +2463,6 @@ CONFIG_N_HDLC=m CONFIG_N_GSM=m # CONFIG_TRACE_SINK is not set # CONFIG_DEVKMEM is not set -# CONFIG_STALDRV is not set # # Serial drivers @@ -2348,6 +2486,7 @@ CONFIG_SERIAL_8250_RSA=y # Non-8250 serial port support # # CONFIG_SERIAL_MFD_HSU is not set +# CONFIG_SERIAL_SH_SCI is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_SERIAL_JSM=m @@ -2362,6 +2501,8 @@ CONFIG_SERIAL_ARC=m CONFIG_SERIAL_ARC_NR_PORTS=1 CONFIG_SERIAL_RP2=m CONFIG_SERIAL_RP2_NR_UARTS=32 +# CONFIG_SERIAL_FSL_LPUART is not set +# CONFIG_SERIAL_ST_ASC is not set # CONFIG_TTY_PRINTK is not set CONFIG_PRINTER=m CONFIG_LP_CONSOLE=y @@ -2388,7 +2529,16 @@ CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y CONFIG_I2C_CHARDEV=m -# CONFIG_I2C_MUX is not set +CONFIG_I2C_MUX=y + +# +# Multiplexer I2C Chip support +# +# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set +# CONFIG_I2C_MUX_GPIO is not set +# CONFIG_I2C_MUX_PCA9541 is not set +# CONFIG_I2C_MUX_PCA954x is not set +# CONFIG_I2C_MUX_PINCTRL is not set CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_SMBUS=m CONFIG_I2C_ALGOBIT=m @@ -2424,7 +2574,6 @@ CONFIG_I2C_CBUS_GPIO=m # CONFIG_I2C_DESIGNWARE_PCI is not set # CONFIG_I2C_EG20T is not set CONFIG_I2C_GPIO=m -# CONFIG_I2C_INTEL_MID is not set CONFIG_I2C_MV64XXX=y # CONFIG_I2C_OCORES is not set CONFIG_I2C_PCA_PLATFORM=m @@ -2438,6 +2587,7 @@ CONFIG_I2C_SIMTEC=m CONFIG_I2C_DIOLAN_U2C=m CONFIG_I2C_PARPORT=m CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_ROBOTFUZZ_OSIF=m # CONFIG_I2C_TAOS_EVM is not set CONFIG_I2C_TINY_USB=m CONFIG_I2C_VIPERBOARD=m @@ -2450,11 +2600,6 @@ CONFIG_I2C_STUB=m # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set # CONFIG_SPI is not set - -# -# Qualcomm MSM SSBI bus support -# -# CONFIG_SSBI is not set CONFIG_HSI=m CONFIG_HSI_BOARDINFO=y @@ -2489,7 +2634,6 @@ CONFIG_PTP_1588_CLOCK=m # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. # -CONFIG_PTP_1588_CLOCK_PCH=m CONFIG_PINCTRL=y # @@ -2499,15 +2643,15 @@ CONFIG_PINMUX=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_CAPRI is not set +# CONFIG_PINCTRL_MSM8X74 is not set CONFIG_PINCTRL_SINGLE=m -# CONFIG_PINCTRL_EXYNOS is not set -# CONFIG_PINCTRL_EXYNOS5440 is not set CONFIG_PINCTRL_MVEBU=y CONFIG_PINCTRL_KIRKWOOD=y CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y CONFIG_ARCH_REQUIRE_GPIOLIB=y -CONFIG_GPIO_DEVRES=y CONFIG_GPIOLIB=y +CONFIG_GPIO_DEVRES=y CONFIG_OF_GPIO=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y @@ -2520,6 +2664,7 @@ CONFIG_GPIO_GENERIC_PLATFORM=y # CONFIG_GPIO_EM is not set CONFIG_GPIO_MVEBU=y # CONFIG_GPIO_RCAR is not set +# CONFIG_GPIO_SCH311X is not set CONFIG_GPIO_TS5500=m # CONFIG_GPIO_VX855 is not set # CONFIG_GPIO_GRGPIO is not set @@ -2550,9 +2695,14 @@ CONFIG_GPIO_MCP23S08=m # AC97 GPIO expanders: # +# +# LPC GPIO expanders: +# + # # MODULbus GPIO expanders: # +# CONFIG_GPIO_BCM_KONA is not set # # USB GPIO expanders: @@ -2608,8 +2758,9 @@ CONFIG_CHARGER_88PM860X=m # CONFIG_CHARGER_GPIO is not set # CONFIG_CHARGER_MANAGER is not set # CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24735 is not set # CONFIG_CHARGER_SMB347 is not set -# CONFIG_BATTERY_GOLDFISH is not set CONFIG_POWER_RESET=y CONFIG_POWER_RESET_GPIO=y CONFIG_POWER_RESET_QNAP=y @@ -2645,10 +2796,12 @@ CONFIG_SENSORS_F71805F=m CONFIG_SENSORS_F71882FG=m CONFIG_SENSORS_F75375S=m CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_G762=m CONFIG_SENSORS_GL518SM=m CONFIG_SENSORS_GL520SM=m # CONFIG_SENSORS_GPIO_FAN is not set CONFIG_SENSORS_HIH6130=m +CONFIG_SENSORS_HTU21=m CONFIG_SENSORS_IBMAEM=m CONFIG_SENSORS_IBMPEX=m # CONFIG_SENSORS_IIO_HWMON is not set @@ -2737,14 +2890,20 @@ CONFIG_SENSORS_W83627HF=m CONFIG_SENSORS_W83627EHF=m CONFIG_THERMAL=y CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_OF=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set CONFIG_THERMAL_GOV_FAIR_SHARE=y CONFIG_THERMAL_GOV_STEP_WISE=y CONFIG_THERMAL_GOV_USER_SPACE=y +CONFIG_CPU_THERMAL=y CONFIG_THERMAL_EMULATION=y CONFIG_KIRKWOOD_THERMAL=m + +# +# Texas Instruments thermal drivers +# CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y CONFIG_WATCHDOG_NOWAYOUT=y @@ -2753,12 +2912,14 @@ CONFIG_WATCHDOG_NOWAYOUT=y # Watchdog Device Drivers # CONFIG_SOFT_WATCHDOG=m +CONFIG_GPIO_WATCHDOG=m # CONFIG_DW_WATCHDOG is not set CONFIG_ORION_WATCHDOG=m # CONFIG_MAX63XX_WATCHDOG is not set CONFIG_RETU_WATCHDOG=m CONFIG_ALIM7101_WDT=m CONFIG_I6300ESB_WDT=m +CONFIG_MEN_A21_WDT=m # # PCI-based Watchdog Cards @@ -2793,13 +2954,21 @@ CONFIG_BCMA_POSSIBLE=y # # Broadcom specific AMBA # -# CONFIG_BCMA is not set +CONFIG_BCMA=m +CONFIG_BCMA_BLOCKIO=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_PCI=y +# CONFIG_BCMA_HOST_SOC is not set +# CONFIG_BCMA_DRIVER_GMAC_CMN is not set +# CONFIG_BCMA_DRIVER_GPIO is not set +# CONFIG_BCMA_DEBUG is not set # # Multifunction device drivers # CONFIG_MFD_CORE=y # CONFIG_MFD_AS3711 is not set +# CONFIG_MFD_AS3722 is not set # CONFIG_PMIC_ADP5520 is not set # CONFIG_MFD_AAT2870_CORE is not set # CONFIG_MFD_CROS_EC is not set @@ -2807,6 +2976,7 @@ CONFIG_MFD_CORE=y # CONFIG_PMIC_DA903X is not set # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9063 is not set # CONFIG_MFD_MC13XXX_I2C is not set # CONFIG_HTC_EGPIO is not set # CONFIG_HTC_PASIC3 is not set @@ -2814,9 +2984,11 @@ CONFIG_MFD_CORE=y CONFIG_LPC_ICH=m CONFIG_LPC_SCH=m # CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_KEMPLD is not set CONFIG_MFD_88PM800=y CONFIG_MFD_88PM805=y CONFIG_MFD_88PM860X=y +# CONFIG_MFD_MAX14577 is not set # CONFIG_MFD_MAX77686 is not set # CONFIG_MFD_MAX77693 is not set # CONFIG_MFD_MAX8907 is not set @@ -2839,6 +3011,7 @@ CONFIG_MFD_SM501_GPIO=y # CONFIG_MFD_STMPE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_MFD_LP3943 is not set # CONFIG_MFD_LP8788 is not set # CONFIG_MFD_PALMAS is not set # CONFIG_TPS6105X is not set @@ -2867,26 +3040,30 @@ CONFIG_MFD_VX855=m # CONFIG_MFD_WM831X_I2C is not set # CONFIG_MFD_WM8350_I2C is not set # CONFIG_MFD_WM8994 is not set +# CONFIG_VEXPRESS_CONFIG is not set CONFIG_REGULATOR=y # CONFIG_REGULATOR_DEBUG is not set -# CONFIG_REGULATOR_DUMMY is not set CONFIG_REGULATOR_FIXED_VOLTAGE=y # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set -# CONFIG_REGULATOR_GPIO is not set -# CONFIG_REGULATOR_AD5398 is not set -# CONFIG_REGULATOR_FAN53555 is not set -# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_88PM800 is not set CONFIG_REGULATOR_88PM8607=y +# CONFIG_REGULATOR_ACT8865 is not set +# CONFIG_REGULATOR_AD5398 is not set +# CONFIG_REGULATOR_DA9210 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_GPIO is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +CONFIG_REGULATOR_LP8755=m # CONFIG_REGULATOR_MAX1586 is not set # CONFIG_REGULATOR_MAX8649 is not set # CONFIG_REGULATOR_MAX8660 is not set # CONFIG_REGULATOR_MAX8952 is not set # CONFIG_REGULATOR_MAX8973 is not set -# CONFIG_REGULATOR_LP3971 is not set -# CONFIG_REGULATOR_LP3972 is not set -# CONFIG_REGULATOR_LP872X is not set -CONFIG_REGULATOR_LP8755=m +# CONFIG_REGULATOR_PFUZE100 is not set # CONFIG_REGULATOR_TPS51632 is not set # CONFIG_REGULATOR_TPS62360 is not set # CONFIG_REGULATOR_TPS65023 is not set @@ -2918,7 +3095,6 @@ CONFIG_VIDEOBUF2_CORE=m CONFIG_VIDEOBUF2_MEMOPS=m CONFIG_VIDEOBUF2_DMA_CONTIG=m CONFIG_VIDEOBUF2_VMALLOC=m -CONFIG_VIDEO_V4L2_INT_DEVICE=m CONFIG_DVB_CORE=y CONFIG_DVB_NET=y CONFIG_TTPCI_EEPROM=m @@ -2996,6 +3172,7 @@ CONFIG_USB_GSPCA_SQ905=m CONFIG_USB_GSPCA_SQ905C=m CONFIG_USB_GSPCA_SQ930X=m CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STK1135=m CONFIG_USB_GSPCA_STV0680=m CONFIG_USB_GSPCA_SUNPLUS=m CONFIG_USB_GSPCA_T613=m @@ -3012,7 +3189,7 @@ CONFIG_VIDEO_CPIA2=m CONFIG_USB_ZR364XX=m CONFIG_USB_STKWEBCAM=m CONFIG_USB_S2255=m -CONFIG_USB_SN9C102=m +CONFIG_VIDEO_USBTV=m # # Analog TV USB devices @@ -3024,8 +3201,9 @@ CONFIG_VIDEO_PVRUSB2_DVB=y CONFIG_VIDEO_HDPVR=m CONFIG_VIDEO_TLG2300=m CONFIG_VIDEO_USBVISION=m -CONFIG_VIDEO_STK1160=m +CONFIG_VIDEO_STK1160_COMMON=m # CONFIG_VIDEO_STK1160_AC97 is not set +CONFIG_VIDEO_STK1160=m # # Analog/digital TV USB devices @@ -3094,6 +3272,7 @@ CONFIG_DVB_B2C2_FLEXCOP_USB=m # Webcam, TV (analog/digital) USB devices # CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_V4L2=m CONFIG_VIDEO_EM28XX_ALSA=m CONFIG_VIDEO_EM28XX_DVB=m CONFIG_VIDEO_EM28XX_RC=m @@ -3126,6 +3305,7 @@ CONFIG_VIDEO_CX88=m CONFIG_VIDEO_CX88_ALSA=m CONFIG_VIDEO_CX88_BLACKBIRD=m CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_ENABLE_VP3054=y CONFIG_VIDEO_CX88_VP3054=m CONFIG_VIDEO_CX88_MPEG=m CONFIG_VIDEO_BT848=m @@ -3160,12 +3340,15 @@ CONFIG_V4L_PLATFORM_DRIVERS=y CONFIG_VIDEO_CAFE_CCIC=m CONFIG_VIDEO_TIMBERDALE=m CONFIG_SOC_CAMERA=m +CONFIG_SOC_CAMERA_SCALE_CROP=m CONFIG_SOC_CAMERA_PLATFORM=m +CONFIG_VIDEO_RCAR_VIN=m # CONFIG_VIDEO_SH_MOBILE_CSI2 is not set # CONFIG_VIDEO_SH_MOBILE_CEU is not set CONFIG_V4L_MEM2MEM_DRIVERS=y CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m CONFIG_VIDEO_SH_VEU=m +CONFIG_VIDEO_RENESAS_VSP1=m # CONFIG_V4L_TEST_DRIVERS is not set # @@ -3193,7 +3376,6 @@ CONFIG_VIDEO_SAA7146=m CONFIG_VIDEO_SAA7146_VV=m CONFIG_SMS_SIANO_MDTV=m CONFIG_SMS_SIANO_RC=y -# CONFIG_SMS_SIANO_DEBUGFS is not set # # Media ancillary drivers (tuners, sensors, i2c, frontends) @@ -3257,7 +3439,12 @@ CONFIG_VIDEO_UPD64031A=m CONFIG_VIDEO_UPD64083=m # -# Miscelaneous helper chips +# Audio/Video compression chips +# +CONFIG_VIDEO_SAA6752HS=m + +# +# Miscellaneous helper chips # CONFIG_VIDEO_M52790=m @@ -3308,6 +3495,7 @@ CONFIG_MEDIA_TUNER_FC0013=m CONFIG_MEDIA_TUNER_TDA18212=m CONFIG_MEDIA_TUNER_E4000=m CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_M88TS2022=m CONFIG_MEDIA_TUNER_TUA9001=m CONFIG_MEDIA_TUNER_IT913X=m CONFIG_MEDIA_TUNER_R820T=m @@ -3319,6 +3507,7 @@ CONFIG_DVB_STB0899=m CONFIG_DVB_STB6100=m CONFIG_DVB_STV090x=m CONFIG_DVB_STV6110x=m +CONFIG_DVB_M88DS3103=m # # Multistandard (cable + terrestrial) frontends @@ -3349,8 +3538,7 @@ CONFIG_DVB_TUNER_CX24113=m CONFIG_DVB_TDA826X=m CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m -CONFIG_DVB_M88DS3103=m -CONFIG_DVB_M88DC2800=m +CONFIG_DVB_CX24117=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m @@ -3432,6 +3620,8 @@ CONFIG_DVB_A8293=m CONFIG_DVB_LGS8GXX=m CONFIG_DVB_ATBM8830=m CONFIG_DVB_TDA665x=m +CONFIG_DVB_DVBSKY_M88DS3103=m +CONFIG_DVB_M88DC2800=m CONFIG_DVB_IX2505V=m CONFIG_DVB_IT913X_FE=m CONFIG_DVB_M88RS2000=m @@ -3450,6 +3640,7 @@ CONFIG_VGA_ARB_MAX_GPUS=16 CONFIG_DRM=m CONFIG_DRM_USB=m CONFIG_DRM_KMS_HELPER=m +CONFIG_DRM_KMS_FB_HELPER=y # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set # @@ -3470,8 +3661,12 @@ CONFIG_DRM_UDL=m # CONFIG_DRM_AST is not set # CONFIG_DRM_MGAG200 is not set # CONFIG_DRM_CIRRUS_QEMU is not set +# CONFIG_DRM_ARMADA is not set +# CONFIG_DRM_RCAR_DU is not set +# CONFIG_DRM_SHMOBILE is not set # CONFIG_DRM_TILCDC is not set # CONFIG_DRM_QXL is not set +# CONFIG_DRM_BOCHS is not set # CONFIG_VGASTATE is not set # CONFIG_VIDEO_OUTPUT_CONTROL is not set CONFIG_HDMI=y @@ -3504,6 +3699,7 @@ CONFIG_FB_MODE_HELPERS=y # CONFIG_FB_ASILIANT is not set # CONFIG_FB_IMSTT is not set # CONFIG_FB_UVESA is not set +# CONFIG_FB_OPENCORES is not set # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_NVIDIA is not set # CONFIG_FB_RIVA is not set @@ -3546,9 +3742,12 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_ADP8860 is not set # CONFIG_BACKLIGHT_ADP8870 is not set # CONFIG_BACKLIGHT_88PM860X is not set -# CONFIG_BACKLIGHT_LM3630 is not set +# CONFIG_BACKLIGHT_LM3630A is not set # CONFIG_BACKLIGHT_LM3639 is not set # CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_GPIO is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set # # Console display driver support @@ -3557,9 +3756,6 @@ CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set @@ -3585,6 +3781,7 @@ CONFIG_SND_SEQUENCER_OSS=y CONFIG_SND_HRTIMER=m CONFIG_SND_SEQ_HRTIMER_DEFAULT=y CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_MAX_CARDS=32 # CONFIG_SND_SUPPORT_OLD_API is not set CONFIG_SND_VERBOSE_PROCFS=y CONFIG_SND_VERBOSE_PRINTK=y @@ -3613,7 +3810,6 @@ CONFIG_SND_MPU401=m CONFIG_SND_PORTMAN2X4=m CONFIG_SND_AC97_POWER_SAVE=y CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0 -CONFIG_SND_TEA575X=m CONFIG_SND_PCI=y CONFIG_SND_AD1889=m CONFIG_SND_ALS300=m @@ -3657,9 +3853,7 @@ CONFIG_SND_ENS1371=m CONFIG_SND_ES1938=m CONFIG_SND_ES1968=m CONFIG_SND_ES1968_INPUT=y -CONFIG_SND_ES1968_RADIO=y CONFIG_SND_FM801=m -CONFIG_SND_FM801_TEA575X_BOOL=y CONFIG_SND_HDA_INTEL=m CONFIG_SND_HDA_PREALLOC_SIZE=64 CONFIG_SND_HDA_HWDEP=y @@ -3668,19 +3862,19 @@ CONFIG_SND_HDA_INPUT_BEEP=y CONFIG_SND_HDA_INPUT_BEEP_MODE=1 CONFIG_SND_HDA_INPUT_JACK=y # CONFIG_SND_HDA_PATCH_LOADER is not set -CONFIG_SND_HDA_CODEC_REALTEK=y -CONFIG_SND_HDA_CODEC_ANALOG=y -CONFIG_SND_HDA_CODEC_SIGMATEL=y -CONFIG_SND_HDA_CODEC_VIA=y -CONFIG_SND_HDA_CODEC_HDMI=y -CONFIG_SND_HDA_CODEC_CIRRUS=y -CONFIG_SND_HDA_CODEC_CONEXANT=y -CONFIG_SND_HDA_CODEC_CA0110=y -CONFIG_SND_HDA_CODEC_CA0132=y +CONFIG_SND_HDA_CODEC_REALTEK=m +CONFIG_SND_HDA_CODEC_ANALOG=m +CONFIG_SND_HDA_CODEC_SIGMATEL=m +CONFIG_SND_HDA_CODEC_VIA=m +CONFIG_SND_HDA_CODEC_HDMI=m +CONFIG_SND_HDA_CODEC_CIRRUS=m +CONFIG_SND_HDA_CODEC_CONEXANT=m +CONFIG_SND_HDA_CODEC_CA0110=m +CONFIG_SND_HDA_CODEC_CA0132=m # CONFIG_SND_HDA_CODEC_CA0132_DSP is not set -CONFIG_SND_HDA_CODEC_CMEDIA=y -CONFIG_SND_HDA_CODEC_SI3054=y -CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_CODEC_CMEDIA=m +CONFIG_SND_HDA_CODEC_SI3054=m +CONFIG_SND_HDA_GENERIC=m CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 CONFIG_SND_HDSP=m CONFIG_SND_HDSPM=m @@ -3714,8 +3908,10 @@ CONFIG_SND_USB_UA101=m CONFIG_SND_USB_CAIAQ=m CONFIG_SND_USB_CAIAQ_INPUT=y CONFIG_SND_USB_6FIRE=m +CONFIG_SND_USB_HIFACE=m CONFIG_SND_FIREWIRE=y CONFIG_SND_FIREWIRE_LIB=m +CONFIG_SND_DICE=m CONFIG_SND_FIREWIRE_SPEAKERS=m # CONFIG_SND_ISIGHT is not set # CONFIG_SND_SCS1X is not set @@ -3723,11 +3919,9 @@ CONFIG_SND_SOC=m CONFIG_SND_ATMEL_SOC=m CONFIG_SND_DESIGNWARE_I2S=m CONFIG_SND_KIRKWOOD_SOC=m -CONFIG_SND_KIRKWOOD_SOC_I2S=m CONFIG_SND_KIRKWOOD_SOC_OPENRD=m CONFIG_SND_KIRKWOOD_SOC_T5325=m CONFIG_SND_SOC_I2C_AND_SPI=m -# CONFIG_SND_SOC_ALL_CODECS is not set CONFIG_SND_SOC_ALC5623=m CONFIG_SND_SOC_CS42L51=m CONFIG_SND_SIMPLE_CARD=m @@ -3759,8 +3953,10 @@ CONFIG_HID_CYPRESS=y # CONFIG_HID_DRAGONRISE is not set # CONFIG_HID_EMS_FF is not set # CONFIG_HID_ELECOM is not set +CONFIG_HID_ELO=m CONFIG_HID_EZKEY=y # CONFIG_HID_HOLTEK is not set +# CONFIG_HID_HUION is not set CONFIG_HID_KEYTOUCH=m CONFIG_HID_KYE=y # CONFIG_HID_UCLOGIC is not set @@ -3792,7 +3988,6 @@ CONFIG_HID_PICOLCD_LCD=y CONFIG_HID_PICOLCD_LEDS=y CONFIG_HID_PICOLCD_CIR=y # CONFIG_HID_PRIMAX is not set -# CONFIG_HID_PS3REMOTE is not set CONFIG_HID_ROCCAT=m CONFIG_HID_SAITEK=m CONFIG_HID_SAMSUNG=m @@ -3808,6 +4003,7 @@ CONFIG_HID_THINGM=m # CONFIG_HID_THRUSTMASTER is not set # CONFIG_HID_WACOM is not set # CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_XINMO is not set # CONFIG_HID_ZEROPLUS is not set CONFIG_HID_ZYDACRON=m CONFIG_HID_SENSOR_HUB=m @@ -3823,9 +4019,7 @@ CONFIG_USB_HIDDEV=y # I2C HID support # CONFIG_I2C_HID=m -CONFIG_USB_ARCH_HAS_OHCI=y -CONFIG_USB_ARCH_HAS_EHCI=y -CONFIG_USB_ARCH_HAS_XHCI=y +CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_SUPPORT=y CONFIG_USB_COMMON=y CONFIG_USB_ARCH_HAS_HCD=y @@ -3852,7 +4046,6 @@ CONFIG_USB_WUSB_CBAF=m # CONFIG_USB_C67X00_HCD is not set CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_PLATFORM=m -# CONFIG_USB_XHCI_HCD_DEBUGGING is not set CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y @@ -3863,11 +4056,11 @@ CONFIG_USB_EHCI_HCD_PLATFORM=y # CONFIG_USB_ISP116X_HCD is not set # CONFIG_USB_ISP1760_HCD is not set CONFIG_USB_ISP1362_HCD=m +# CONFIG_USB_FUSBH200_HCD is not set +# CONFIG_USB_FOTG210_HCD is not set CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PCI=y CONFIG_USB_OHCI_HCD_PLATFORM=y -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_UHCI_HCD=y # CONFIG_USB_U132_HCD is not set CONFIG_USB_SL811_HCD=m @@ -3875,7 +4068,9 @@ CONFIG_USB_SL811_HCD_ISO=y # CONFIG_USB_R8A66597_HCD is not set CONFIG_USB_WHCI_HCD=m CONFIG_USB_HWA_HCD=m +# CONFIG_USB_HCD_BCMA is not set CONFIG_USB_HCD_SSB=m +# CONFIG_USB_HCD_TEST_MODE is not set # # USB Device Class drivers @@ -3914,9 +4109,22 @@ CONFIG_USB_STORAGE_ENE_UB6250=m # CONFIG_USB_MDC800=m CONFIG_USB_MICROTEK=m +# CONFIG_USB_MUSB_HDRC is not set CONFIG_USB_DWC3=m CONFIG_USB_DWC3_HOST=y + +# +# Platform Glue Driver Support +# +# CONFIG_USB_DWC3_EXYNOS is not set +CONFIG_USB_DWC3_PCI=m +CONFIG_USB_DWC3_KEYSTONE=m + +# +# Debugging features +# # CONFIG_USB_DWC3_DEBUG is not set +# CONFIG_USB_DWC2 is not set CONFIG_USB_CHIPIDEA=m # CONFIG_USB_CHIPIDEA_HOST is not set # CONFIG_USB_CHIPIDEA_DEBUG is not set @@ -3927,6 +4135,7 @@ CONFIG_USB_CHIPIDEA=m CONFIG_USB_USS720=m CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_SIMPLE=m CONFIG_USB_SERIAL_AIRCABLE=m CONFIG_USB_SERIAL_ARK3116=m CONFIG_USB_SERIAL_BELKIN=m @@ -3937,7 +4146,6 @@ CONFIG_USB_SERIAL_CP210X=m CONFIG_USB_SERIAL_CYPRESS_M8=m # CONFIG_USB_SERIAL_EMPEG is not set CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_FUNSOFT=m CONFIG_USB_SERIAL_VISOR=m CONFIG_USB_SERIAL_IPAQ=m CONFIG_USB_SERIAL_IR=m @@ -3956,16 +4164,14 @@ CONFIG_USB_SERIAL_MCT_U232=m CONFIG_USB_SERIAL_MOS7720=m CONFIG_USB_SERIAL_MOS7715_PARPORT=y CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_MOTOROLA=m +CONFIG_USB_SERIAL_MXUPORT=m # CONFIG_USB_SERIAL_NAVMAN is not set CONFIG_USB_SERIAL_PL2303=m CONFIG_USB_SERIAL_OTI6858=m CONFIG_USB_SERIAL_QCAUX=m CONFIG_USB_SERIAL_QUALCOMM=m CONFIG_USB_SERIAL_SPCP8X5=m -# CONFIG_USB_SERIAL_HP4X is not set # CONFIG_USB_SERIAL_SAFE is not set -CONFIG_USB_SERIAL_SIEMENS_MPI=m CONFIG_USB_SERIAL_SIERRAWIRELESS=m # CONFIG_USB_SERIAL_SYMBOL is not set # CONFIG_USB_SERIAL_TI is not set @@ -3975,9 +4181,7 @@ CONFIG_USB_SERIAL_WWAN=m CONFIG_USB_SERIAL_OPTION=m # CONFIG_USB_SERIAL_OMNINET is not set # CONFIG_USB_SERIAL_OPTICON is not set -# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set # CONFIG_USB_SERIAL_XSENS_MT is not set -# CONFIG_USB_SERIAL_ZIO is not set # CONFIG_USB_SERIAL_WISHBONE is not set CONFIG_USB_SERIAL_ZTE=m CONFIG_USB_SERIAL_SSU100=m @@ -4006,6 +4210,7 @@ CONFIG_USB_SISUSBVGA_CON=y # CONFIG_USB_TRANCEVIBRATOR is not set CONFIG_USB_IOWARRIOR=m # CONFIG_USB_TEST is not set +# CONFIG_USB_EHSET_TEST_FIXTURE is not set # CONFIG_USB_ISIGHTFW is not set CONFIG_USB_YUREX=m CONFIG_USB_EZUSB_FX2=m @@ -4015,7 +4220,20 @@ CONFIG_USB_SPEEDTOUCH=m CONFIG_USB_CXACRU=m CONFIG_USB_UEAGLEATM=m CONFIG_USB_XUSBATM=m + +# +# USB Physical Layer drivers +# # CONFIG_USB_PHY is not set +# CONFIG_USB_OTG_FSM is not set +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_AM335X_PHY_USB is not set +# CONFIG_SAMSUNG_USB2PHY is not set +# CONFIG_SAMSUNG_USB3PHY is not set +# CONFIG_USB_GPIO_VBUS is not set +# CONFIG_USB_ISP1301 is not set +# CONFIG_USB_RCAR_PHY is not set +# CONFIG_USB_ULPI is not set # CONFIG_USB_GADGET is not set CONFIG_UWB=m CONFIG_UWB_HWA=m @@ -4042,6 +4260,7 @@ CONFIG_MMC_SDHCI=m CONFIG_MMC_SDHCI_PCI=m CONFIG_MMC_RICOH_MMC=y CONFIG_MMC_SDHCI_PLTFM=m +# CONFIG_MMC_SDHCI_OF_ARASAN is not set CONFIG_MMC_SDHCI_PXAV3=m CONFIG_MMC_SDHCI_PXAV2=m CONFIG_MMC_TIFM_SD=m @@ -4052,6 +4271,7 @@ CONFIG_MMC_DW=m # CONFIG_MMC_DW_IDMAC is not set CONFIG_MMC_DW_PLTFM=m CONFIG_MMC_DW_EXYNOS=m +# CONFIG_MMC_DW_K3 is not set CONFIG_MMC_DW_PCI=m CONFIG_MMC_VUB300=m CONFIG_MMC_USHC=m @@ -4064,6 +4284,7 @@ CONFIG_MEMSTICK=m # # CONFIG_MEMSTICK_UNSAFE_RESUME is not set CONFIG_MSPRO_BLOCK=m +CONFIG_MS_BLOCK=m # # MemoryStick Host Controller Drivers @@ -4089,15 +4310,16 @@ CONFIG_LEDS_LP55XX_COMMON=m CONFIG_LEDS_LP5521=m CONFIG_LEDS_LP5523=m CONFIG_LEDS_LP5562=m +CONFIG_LEDS_LP8501=m # CONFIG_LEDS_PCA955X is not set -CONFIG_LEDS_PCA9633=m +CONFIG_LEDS_PCA963X=m +CONFIG_LEDS_PCA9685=m CONFIG_LEDS_PWM=m CONFIG_LEDS_REGULATOR=m # CONFIG_LEDS_BD2802 is not set CONFIG_LEDS_LT3593=m CONFIG_LEDS_NS2=m CONFIG_LEDS_NETXBIG=m -# CONFIG_LEDS_RENESAS_TPU is not set CONFIG_LEDS_TCA6507=m CONFIG_LEDS_LM355x=m CONFIG_LEDS_OT200=m @@ -4149,11 +4371,14 @@ CONFIG_RTC_DRV_DS1307=m CONFIG_RTC_DRV_DS1374=m CONFIG_RTC_DRV_DS1672=m CONFIG_RTC_DRV_DS3232=m +CONFIG_RTC_DRV_HYM8563=m CONFIG_RTC_DRV_MAX6900=m CONFIG_RTC_DRV_RS5C372=m CONFIG_RTC_DRV_ISL1208=m CONFIG_RTC_DRV_ISL12022=m +CONFIG_RTC_DRV_ISL12057=m CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF2127=m CONFIG_RTC_DRV_PCF8523=m CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8583=m @@ -4194,6 +4419,7 @@ CONFIG_RTC_DRV_DS2404=m # CONFIG_RTC_DRV_MV=y CONFIG_RTC_DRV_SNVS=m +CONFIG_RTC_DRV_MOXART=m # # HID Sensor RTC drivers @@ -4206,7 +4432,9 @@ CONFIG_DMADEVICES=y # DMA Devices # CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y +# CONFIG_DW_DMAC_CORE is not set # CONFIG_DW_DMAC is not set +# CONFIG_DW_DMAC_PCI is not set CONFIG_MV_XOR=y CONFIG_TIMB_DMA=m CONFIG_DMA_ENGINE=y @@ -4217,16 +4445,17 @@ CONFIG_DMA_OF=y # CONFIG_ASYNC_TX_DMA=y # CONFIG_DMATEST is not set +CONFIG_DMA_ENGINE_RAID=y # CONFIG_AUXDISPLAY is not set CONFIG_UIO=m # CONFIG_UIO_CIF is not set -# CONFIG_UIO_PDRV is not set # CONFIG_UIO_PDRV_GENIRQ is not set # CONFIG_UIO_DMEM_GENIRQ is not set CONFIG_UIO_AEC=m CONFIG_UIO_SERCOS3=m CONFIG_UIO_PCI_GENERIC=m # CONFIG_UIO_NETX is not set +# CONFIG_UIO_MF624 is not set CONFIG_VIRT_DRIVERS=y # @@ -4248,14 +4477,16 @@ CONFIG_USBIP_HOST=m # CONFIG_PRISM2_USB is not set # CONFIG_ECHO is not set # CONFIG_COMEDI is not set -# CONFIG_ASUS_OLED is not set # CONFIG_PANEL is not set # CONFIG_R8187SE is not set # CONFIG_RTL8192U is not set # CONFIG_RTLLIB is not set # CONFIG_R8712U is not set +# CONFIG_R8188EU is not set +# CONFIG_R8821AE is not set CONFIG_RTS5139=m # CONFIG_RTS5139_DEBUG is not set +# CONFIG_RTS5208 is not set # CONFIG_TRANZPORT is not set # CONFIG_IDE_PHISON is not set # CONFIG_LINE6_USB is not set @@ -4330,10 +4561,7 @@ CONFIG_RTS5139=m # Triggers - standalone # # CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set -# CONFIG_IIO_GPIO_TRIGGER is not set -# CONFIG_IIO_SYSFS_TRIGGER is not set # CONFIG_IIO_SIMPLE_DUMMY is not set -# CONFIG_ZSMALLOC is not set # CONFIG_FB_SM7XX is not set # CONFIG_CRYSTALHD is not set # CONFIG_FB_XGI is not set @@ -4355,13 +4583,19 @@ CONFIG_RTS5139=m # CONFIG_ANDROID is not set # CONFIG_USB_WPAN_HCD is not set # CONFIG_WIMAX_GDM72XX is not set -# CONFIG_CSR_WIFI is not set +CONFIG_LTE_GDM724X=m CONFIG_NET_VENDOR_SILICOM=y CONFIG_SBYPASS=m CONFIG_BPCTL=m CONFIG_CED1401=m # CONFIG_DGRP is not set CONFIG_FIREWIRE_SERIAL=m +CONFIG_FWTTY_MAX_TOTAL_PORTS=64 +CONFIG_FWTTY_MAX_CARD_PORTS=32 +# CONFIG_LUSTRE_FS is not set +# CONFIG_XILLYBUS is not set +# CONFIG_DGNC is not set +# CONFIG_DGAP is not set CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y @@ -4369,15 +4603,18 @@ CONFIG_COMMON_CLK=y # # Common Clock Framework # -# CONFIG_COMMON_CLK_DEBUG is not set CONFIG_COMMON_CLK_SI5351=m -CONFIG_MVEBU_CLK_CORE=y -CONFIG_MVEBU_CLK_GATING=y +# CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_COMMON_CLK_QCOM is not set +CONFIG_MVEBU_CLK_COMMON=y +CONFIG_KIRKWOOD_CLK=y # # Hardware Spinlock drivers # +CONFIG_CLKSRC_OF=y CONFIG_CLKSRC_MMIO=y +CONFIG_ORION_TIMER=y CONFIG_MAILBOX=y CONFIG_IOMMU_SUPPORT=y CONFIG_OF_IOMMU=y @@ -4393,6 +4630,7 @@ CONFIG_OF_IOMMU=y # CONFIG_PM_DEVFREQ is not set # CONFIG_EXTCON is not set CONFIG_MEMORY=y +# CONFIG_MVEBU_DEVBUS is not set CONFIG_IIO=m CONFIG_IIO_BUFFER=y CONFIG_IIO_BUFFER_CB=y @@ -4403,6 +4641,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # # Accelerometers # +# CONFIG_BMA180 is not set # CONFIG_HID_SENSOR_ACCEL_3D is not set # CONFIG_IIO_ST_ACCEL_3AXIS is not set @@ -4411,6 +4650,8 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # # CONFIG_EXYNOS_ADC is not set # CONFIG_MAX1363 is not set +# CONFIG_MCP3422 is not set +# CONFIG_NAU7802 is not set # CONFIG_TI_ADC081C is not set # CONFIG_VIPERBOARD_ADC is not set @@ -4423,7 +4664,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_HID_SENSOR_IIO_COMMON=m CONFIG_HID_SENSOR_IIO_TRIGGER=m -# CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS is not set # # Digital to analog converters @@ -4453,6 +4693,11 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m # CONFIG_IIO_ST_GYRO_3AXIS is not set # CONFIG_ITG3200 is not set +# +# Humidity sensors +# +CONFIG_DHT11=m + # # Inertial measurement units # @@ -4462,22 +4707,65 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m # Light sensors # # CONFIG_ADJD_S311 is not set -# CONFIG_SENSORS_LM3533 is not set -# CONFIG_SENSORS_TSL2563 is not set -# CONFIG_VCNL4000 is not set +# CONFIG_APDS9300 is not set +# CONFIG_CM32181 is not set +# CONFIG_CM36651 is not set +# CONFIG_GP2AP020A00F is not set # CONFIG_HID_SENSOR_ALS is not set +# CONFIG_SENSORS_LM3533 is not set +# CONFIG_TCS3472 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_TSL4531 is not set +# CONFIG_VCNL4000 is not set # # Magnetometer sensors # # CONFIG_AK8975 is not set +# CONFIG_MAG3110 is not set # CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set # CONFIG_IIO_ST_MAGN_3AXIS is not set + +# +# Inclinometer sensors +# +# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set + +# +# Triggers - standalone +# +# CONFIG_IIO_INTERRUPT_TRIGGER is not set +# CONFIG_IIO_SYSFS_TRIGGER is not set + +# +# Pressure sensors +# +# CONFIG_MPL3115 is not set +# CONFIG_IIO_ST_PRESS is not set + +# +# Temperature sensors +# +# CONFIG_TMP006 is not set # CONFIG_VME_BUS is not set CONFIG_PWM=y +CONFIG_PWM_SYSFS=y +# CONFIG_PWM_PCA9685 is not set CONFIG_IRQCHIP=y +CONFIG_ORION_IRQCHIP=y # CONFIG_IPACK_BUS is not set -# CONFIG_RESET_CONTROLLER is not set +CONFIG_RESET_CONTROLLER=y +# CONFIG_FMC is not set + +# +# PHY Subsystem +# +CONFIG_GENERIC_PHY=y +# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set +CONFIG_PHY_MVEBU_SATA=y +# CONFIG_PHY_EXYNOS_DP_VIDEO is not set +# CONFIG_BCM_KONA_USB2_PHY is not set +# CONFIG_POWERCAP is not set # # File systems @@ -4512,6 +4800,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set # CONFIG_BTRFS_DEBUG is not set +CONFIG_BTRFS_ASSERT=y # CONFIG_NILFS2_FS is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y @@ -4532,7 +4821,6 @@ CONFIG_QUOTACTL=y CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m -CONFIG_GENERIC_ACL=y # # Caches @@ -4614,10 +4902,13 @@ CONFIG_NFS_V3_ACL=y CONFIG_NFS_V4=m # CONFIG_NFS_SWAP is not set CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y CONFIG_PNFS_FILE_LAYOUT=m CONFIG_PNFS_BLOCK=m CONFIG_PNFS_OBJLAYOUT=m CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="ipfire.org" +CONFIG_NFS_V4_1_MIGRATION=y +CONFIG_NFS_V4_SECURITY_LABEL=y CONFIG_NFS_FSCACHE=y # CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_NFS_USE_KERNEL_DNS=y @@ -4626,6 +4917,7 @@ CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y +CONFIG_NFSD_V4_SECURITY_LABEL=y # CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_LOCKD=m CONFIG_LOCKD_V4=y @@ -4709,59 +5001,83 @@ CONFIG_DLM=m # # Kernel hacking # + +# +# printk and dmesg options +# # CONFIG_PRINTK_TIME is not set CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 +# CONFIG_BOOT_PRINTK_DELAY is not set +CONFIG_DYNAMIC_DEBUG=y + +# +# Compile-time checks and compiler options +# +# CONFIG_DEBUG_INFO is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=2048 -# CONFIG_MAGIC_SYSRQ is not set CONFIG_STRIP_ASM_SYMS=y # CONFIG_READABLE_ASM is not set # CONFIG_UNUSED_SYMBOLS is not set CONFIG_DEBUG_FS=y CONFIG_HEADERS_CHECK=y # CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_MAGIC_SYSRQ is not set CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_SHIRQ=y -CONFIG_LOCKUP_DETECTOR=y -# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set -CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 -# CONFIG_PANIC_ON_OOPS is not set -CONFIG_PANIC_ON_OOPS_VALUE=0 -# CONFIG_DETECT_HUNG_TASK is not set -CONFIG_SCHED_DEBUG=y -CONFIG_SCHEDSTATS=y -CONFIG_TIMER_STATS=y + +# +# Memory Debugging +# +# CONFIG_DEBUG_PAGEALLOC is not set # CONFIG_DEBUG_OBJECTS is not set # CONFIG_SLUB_DEBUG_ON is not set # CONFIG_SLUB_STATS is not set CONFIG_HAVE_DEBUG_KMEMLEAK=y # CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_VM is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_HIGHMEM is not set +CONFIG_DEBUG_SHIRQ=y + +# +# Debug Lockups and Hangs +# +CONFIG_LOCKUP_DETECTOR=y +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_DETECT_HUNG_TASK is not set +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANIC_TIMEOUT=0 +CONFIG_SCHED_DEBUG=y +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set # CONFIG_DEBUG_LOCK_ALLOC is not set # CONFIG_PROVE_LOCKING is not set # CONFIG_LOCK_STAT is not set # CONFIG_DEBUG_ATOMIC_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set CONFIG_STACKTRACE=y -# CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_DEBUG_KOBJECT is not set -# CONFIG_DEBUG_HIGHMEM is not set CONFIG_DEBUG_BUGVERBOSE=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_VM is not set # CONFIG_DEBUG_WRITECOUNT is not set -CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DEBUG_LIST=y -# CONFIG_TEST_LIST_SORT is not set # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_DEBUG_CREDENTIALS is not set -CONFIG_FRAME_POINTER=y -# CONFIG_BOOT_PRINTK_DELAY is not set # # RCU Debugging @@ -4769,13 +5085,9 @@ CONFIG_FRAME_POINTER=y # CONFIG_SPARSE_RCU_POINTER is not set # CONFIG_RCU_TORTURE_TEST is not set # CONFIG_RCU_TRACE is not set -# CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -# CONFIG_LKDTM is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set # CONFIG_FAULT_INJECTION is not set -# CONFIG_DEBUG_PAGEALLOC is not set CONFIG_NOP_TRACER=y CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y @@ -4811,29 +5123,49 @@ CONFIG_FTRACE_MCOUNT_RECORD=y # CONFIG_FTRACE_STARTUP_TEST is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set + +# +# Runtime Testing +# +# CONFIG_LKDTM is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_BACKTRACE_SELF_TEST is not set CONFIG_RBTREE_TEST=m # CONFIG_INTERVAL_TREE_TEST is not set -# CONFIG_BUILD_DOCSRC is not set -CONFIG_DYNAMIC_DEBUG=y -# CONFIG_DMA_API_DEBUG is not set +# CONFIG_PERCPU_TEST is not set # CONFIG_ATOMIC64_SELFTEST is not set CONFIG_ASYNC_RAID6_TEST=m +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_BUILD_DOCSRC is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_TEST_MODULE is not set +# CONFIG_TEST_USER_COPY is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set -# CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_TEST_KSTRTOX is not set +# CONFIG_ARM_PTDUMP is not set CONFIG_STRICT_DEVMEM=y CONFIG_ARM_UNWIND=y CONFIG_OLD_MCOUNT=y # CONFIG_DEBUG_USER is not set CONFIG_DEBUG_LL=y -CONFIG_DEBUG_LL_UART_NONE=y +# CONFIG_DEBUG_LL_UART_NONE is not set # CONFIG_DEBUG_ICEDCC is not set # CONFIG_DEBUG_SEMIHOSTING is not set -CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" +# CONFIG_DEBUG_LL_UART_8250 is not set +CONFIG_DEBUG_LL_UART_PL01X=y +CONFIG_DEBUG_LL_INCLUDE="debug/8250.S" +# CONFIG_DEBUG_UART_PL01X is not set +CONFIG_DEBUG_UART_8250=y +CONFIG_DEBUG_UART_PHYS=0xf1012000 +CONFIG_DEBUG_UART_VIRT=0xfed12000 +CONFIG_DEBUG_UART_8250_SHIFT=2 +# CONFIG_DEBUG_UART_8250_WORD is not set +# CONFIG_DEBUG_UART_8250_FLOW_CONTROL is not set CONFIG_UNCOMPRESS_INCLUDE="mach/uncompress.h" CONFIG_EARLY_PRINTK=y +CONFIG_DEBUG_SET_MODULE_RONX=y # # Security options @@ -4891,13 +5223,14 @@ CONFIG_PAX_USERCOPY=y # Memory Protections # # CONFIG_GRKERNSEC_KMEM is not set -CONFIG_GRKERNSEC_JIT_HARDEN=y # CONFIG_GRKERNSEC_PERF_HARDEN is not set CONFIG_GRKERNSEC_RAND_THREADSTACK=y CONFIG_GRKERNSEC_PROC_MEMMAP=y CONFIG_GRKERNSEC_BRUTE=y CONFIG_GRKERNSEC_MODHARDEN=y CONFIG_GRKERNSEC_HIDESYM=y +CONFIG_GRKERNSEC_RANDSTRUCT=y +CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y CONFIG_GRKERNSEC_KERN_LOCKOUT=y # @@ -4956,12 +5289,12 @@ CONFIG_GRKERNSEC_DMESG=y CONFIG_GRKERNSEC_HARDEN_PTRACE=y CONFIG_GRKERNSEC_PTRACE_READEXEC=y CONFIG_GRKERNSEC_SETXID=y +CONFIG_GRKERNSEC_HARDEN_IPC=y # CONFIG_GRKERNSEC_TPE is not set # # Network Protections # -CONFIG_GRKERNSEC_RANDNET=y CONFIG_GRKERNSEC_BLACKHOLE=y CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y # CONFIG_GRKERNSEC_SOCKET is not set @@ -4982,6 +5315,8 @@ CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y CONFIG_GRKERNSEC_FLOODTIME=10 CONFIG_GRKERNSEC_FLOODBURST=6 CONFIG_KEYS=y +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_BIG_KEYS is not set # CONFIG_ENCRYPTED_KEYS is not set CONFIG_KEYS_DEBUG_PROC_KEYS=y CONFIG_SECURITY_DMESG_RESTRICT=y @@ -5064,6 +5399,7 @@ CONFIG_CRYPTO_VMAC=m # CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32=y +CONFIG_CRYPTO_CRCT10DIF=y CONFIG_CRYPTO_GHASH=m CONFIG_CRYPTO_MD4=m CONFIG_CRYPTO_MD5=y @@ -5108,6 +5444,8 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m CONFIG_CRYPTO_DEFLATE=m CONFIG_CRYPTO_ZLIB=m CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m # # Random Number Generation @@ -5116,6 +5454,7 @@ CONFIG_CRYPTO_ANSI_CPRNG=m CONFIG_CRYPTO_USER_API=y CONFIG_CRYPTO_USER_API_HASH=y CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_CRYPTO_HASH_INFO=y CONFIG_CRYPTO_HW=y CONFIG_CRYPTO_DEV_MV_CESA=y CONFIG_CRYPTO_DEV_HIFN_795X=m @@ -5134,8 +5473,10 @@ CONFIG_BITREVERSE=y CONFIG_RATIONAL=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IO=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y CONFIG_CRC_CCITT=y CONFIG_CRC16=y CONFIG_CRC_T10DIF=y @@ -5150,10 +5491,14 @@ CONFIG_CRC7=m CONFIG_LIBCRC32C=m CONFIG_CRC8=m CONFIG_AUDIT_GENERIC=y +# CONFIG_RANDOM32_SELFTEST is not set CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y CONFIG_XZ_DEC=y CONFIG_XZ_DEC_X86=y CONFIG_XZ_DEC_POWERPC=y @@ -5168,10 +5513,12 @@ CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_LZMA=y CONFIG_DECOMPRESS_XZ=y CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y CONFIG_TEXTSEARCH=y CONFIG_TEXTSEARCH_KMP=m CONFIG_TEXTSEARCH_BM=m CONFIG_TEXTSEARCH_FSM=m +CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_DMA=y @@ -5186,9 +5533,8 @@ CONFIG_CORDIC=m # CONFIG_DDR is not set CONFIG_MPILIB=m CONFIG_OID_REGISTRY=m +CONFIG_FONT_SUPPORT=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y CONFIG_VIRTUALIZATION=y -CONFIG_KVM_ARM_MAX_VCPUS=0 - -# -# Virtio drivers -# diff --git a/config/kernel/kernel.config.armv5tel-ipfire-multi b/config/kernel/kernel.config.armv5tel-ipfire-multi index 34045f2a6..110c19969 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-multi +++ b/config/kernel/kernel.config.armv5tel-ipfire-multi @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 3.10.32 Kernel Configuration +# Linux/arm 3.14.22 Kernel Configuration # CONFIG_ARM=y CONFIG_MIGHT_HAVE_PCI=y @@ -12,6 +12,7 @@ CONFIG_LOCKDEP_SUPPORT=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_ARCH_HAS_CPUFREQ=y +CONFIG_ARCH_HAS_BANDGAP=y CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_ZONE_DMA=y @@ -28,16 +29,19 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y # CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" +# CONFIG_COMPILE_TEST is not set CONFIG_LOCALVERSION="" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_LZMA=y CONFIG_HAVE_KERNEL_XZ=y CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_LZ4=y # CONFIG_KERNEL_GZIP is not set # CONFIG_KERNEL_LZMA is not set CONFIG_KERNEL_XZ=y # CONFIG_KERNEL_LZO is not set +# CONFIG_KERNEL_LZ4 is not set CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SWAP=y CONFIG_SYSVIPC=y @@ -49,19 +53,17 @@ CONFIG_AUDIT=y CONFIG_AUDITSYSCALL=y CONFIG_AUDIT_WATCH=y CONFIG_AUDIT_TREE=y -CONFIG_AUDIT_LOGINUID_IMMUTABLE=y -CONFIG_HAVE_GENERIC_HARDIRQS=y # # IRQ subsystem # -CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_HARDIRQS_SW_RESEND=y CONFIG_GENERIC_IRQ_CHIP=y CONFIG_IRQ_DOMAIN=y # CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_IRQ_FORCED_THREADING=y CONFIG_SPARSE_IRQ=y CONFIG_KTIME_SCALAR=y CONFIG_GENERIC_CLOCKEVENTS=y @@ -76,6 +78,7 @@ CONFIG_TICK_ONESHOT=y CONFIG_NO_HZ_COMMON=y # CONFIG_HZ_PERIODIC is not set CONFIG_NO_HZ_IDLE=y +# CONFIG_NO_HZ_FULL is not set CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y @@ -83,6 +86,7 @@ CONFIG_HIGH_RES_TIMERS=y # CPU/Task time and stats accounting # CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set # CONFIG_IRQ_TIME_ACCOUNTING is not set CONFIG_BSD_PROCESS_ACCT=y # CONFIG_BSD_PROCESS_ACCT_V3 is not set @@ -111,6 +115,7 @@ CONFIG_RCU_NOCB_CPU=y CONFIG_RCU_NOCB_CPU_ALL=y # CONFIG_IKCONFIG is not set CONFIG_LOG_BUF_SHIFT=18 +CONFIG_GENERIC_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_FREEZER=y @@ -133,6 +138,7 @@ CONFIG_BLK_CGROUP=y CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y +CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_SCHED_AUTOGROUP=y @@ -146,11 +152,11 @@ CONFIG_RD_BZIP2=y CONFIG_RD_LZMA=y CONFIG_RD_XZ=y CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_HAVE_UID16=y -CONFIG_HOTPLUG=y CONFIG_EXPERT=y CONFIG_UID16=y # CONFIG_SYSCTL_SYSCALL is not set @@ -183,6 +189,8 @@ CONFIG_VM_EVENT_COUNTERS=y # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLOB is not set +CONFIG_SLUB_CPU_PARTIAL=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m @@ -190,22 +198,31 @@ CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set CONFIG_JUMP_LABEL=y # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_ARCH_USE_BUILTIN_BSWAP=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_ATTRS=y CONFIG_HAVE_DMA_CONTIGUOUS=y -CONFIG_USE_GENERIC_SMP_HELPERS=y CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_GENERIC_IDLE_POLL_SETUP=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_CLK=y CONFIG_HAVE_DMA_API_DEBUG=y CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_HAVE_ARCH_JUMP_LABEL=y CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_HAVE_CC_STACKPROTECTOR=y +CONFIG_CC_STACKPROTECTOR=y +# CONFIG_CC_STACKPROTECTOR_NONE is not set +CONFIG_CC_STACKPROTECTOR_REGULAR=y +# CONFIG_CC_STACKPROTECTOR_STRONG is not set CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_REL=y @@ -224,7 +241,7 @@ CONFIG_MODULES=y # CONFIG_MODULE_FORCE_LOAD is not set CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_FORCE_UNLOAD is not set -# CONFIG_MODVERSIONS is not set +CONFIG_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_MODULE_SIG is not set CONFIG_STOP_MACHINE=y @@ -234,12 +251,14 @@ CONFIG_BLK_DEV_BSG=y CONFIG_BLK_DEV_BSGLIB=y CONFIG_BLK_DEV_INTEGRITY=y CONFIG_BLK_DEV_THROTTLING=y +# CONFIG_BLK_CMDLINE_PARSER is not set # # Partition Types # CONFIG_PARTITION_ADVANCED=y # CONFIG_ACORN_PARTITION is not set +# CONFIG_AIX_PARTITION is not set # CONFIG_OSF_PARTITION is not set # CONFIG_AMIGA_PARTITION is not set # CONFIG_ATARI_PARTITION is not set @@ -257,6 +276,7 @@ CONFIG_LDM_PARTITION=y # CONFIG_KARMA_PARTITION is not set CONFIG_EFI_PARTITION=y # CONFIG_SYSV68_PARTITION is not set +# CONFIG_CMDLINE_PARTITION is not set # # IO Schedulers @@ -276,6 +296,7 @@ CONFIG_INLINE_READ_UNLOCK=y CONFIG_INLINE_READ_UNLOCK_IRQ=y CONFIG_INLINE_WRITE_UNLOCK=y CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_FREEZER=y @@ -307,8 +328,8 @@ CONFIG_ARCH_MULTIPLATFORM=y # CONFIG_ARCH_W90X900 is not set # CONFIG_ARCH_LPC32XX is not set # CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_MSM is not set -# CONFIG_ARCH_SHMOBILE is not set +# CONFIG_ARCH_MSM_NODT is not set +# CONFIG_ARCH_SHMOBILE_LEGACY is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_S3C24XX is not set @@ -317,8 +338,6 @@ CONFIG_ARCH_MULTIPLATFORM=y # CONFIG_ARCH_S5PC100 is not set # CONFIG_ARCH_S5PV210 is not set # CONFIG_ARCH_EXYNOS is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_U300 is not set # CONFIG_ARCH_DAVINCI is not set # CONFIG_ARCH_OMAP1 is not set @@ -342,15 +361,18 @@ CONFIG_MACH_ARMADA_370_XP=y CONFIG_MACH_ARMADA_370=y CONFIG_MACH_ARMADA_XP=y # CONFIG_ARCH_BCM is not set +# CONFIG_ARCH_BERLIN is not set # CONFIG_GPIO_PCA953X is not set CONFIG_KEYBOARD_GPIO_POLLED=m # CONFIG_ARCH_HIGHBANK is not set +# CONFIG_ARCH_HI3xxx is not set +# CONFIG_ARCH_KEYSTONE is not set +# CONFIG_ARCH_MSM_DT is not set CONFIG_ARCH_MXC=y # # Freescale i.MX support # -# CONFIG_MXC_IRQ_PRIOR is not set CONFIG_MXC_TZIC=y # CONFIG_MXC_DEBUG_BOARD is not set CONFIG_HAVE_IMX_ANATOP=y @@ -371,12 +393,14 @@ CONFIG_MACH_IMX51_DT=y # # Device tree only # +# CONFIG_SOC_IMX50 is not set CONFIG_SOC_IMX53=y CONFIG_SOC_IMX6Q=y +CONFIG_SOC_IMX6SL=y +# CONFIG_SOC_VF610 is not set CONFIG_IMX_HAVE_PLATFORM_FEC=y CONFIG_IMX_HAVE_PLATFORM_GPIO_KEYS=y CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT=y -CONFIG_WAND_RFKILL=m # # TI OMAP Common Features @@ -396,6 +420,12 @@ CONFIG_OMAP_DM_TIMER=y CONFIG_OMAP_PM_NOOP=y CONFIG_MACH_OMAP_GENERIC=y CONFIG_ARCH_OMAP=y +CONFIG_ARCH_OMAP3=y +CONFIG_ARCH_OMAP4=y +CONFIG_SOC_OMAP5=y +CONFIG_SOC_AM33XX=y +CONFIG_SOC_AM43XX=y +CONFIG_SOC_DRA7XX=y CONFIG_ARCH_OMAP2PLUS=y # @@ -404,20 +434,13 @@ CONFIG_ARCH_OMAP2PLUS=y CONFIG_ARCH_OMAP2PLUS_TYPICAL=y CONFIG_SOC_HAS_OMAP2_SDRC=y CONFIG_SOC_HAS_REALTIME_COUNTER=y -CONFIG_ARCH_OMAP3=y -CONFIG_ARCH_OMAP4=y -CONFIG_SOC_OMAP5=y CONFIG_SOC_OMAP3430=y CONFIG_SOC_TI81XX=y -CONFIG_SOC_AM33XX=y CONFIG_OMAP_PACKAGE_CBB=y CONFIG_OMAP_PACKAGE_CUS=y -CONFIG_OMAP_PACKAGE_CBP=y -CONFIG_OMAP_PACKAGE_CBL=y -CONFIG_OMAP_PACKAGE_CBS=y # -# OMAP Board Type +# OMAP Legacy Platform Data Board Type # CONFIG_MACH_OMAP3_BEAGLE=y CONFIG_MACH_DEVKIT8000=y @@ -425,31 +448,25 @@ CONFIG_MACH_OMAP_LDP=y CONFIG_MACH_OMAP3530_LV_SOM=y CONFIG_MACH_OMAP3_TORPEDO=y CONFIG_MACH_OVERO=y -CONFIG_MACH_OMAP3EVM=y CONFIG_MACH_OMAP3517EVM=y # CONFIG_MACH_CRANEBOARD is not set CONFIG_MACH_OMAP3_PANDORA=y CONFIG_MACH_TOUCHBOOK=y CONFIG_MACH_OMAP_3430SDP=y -CONFIG_MACH_NOKIA_RM680=y CONFIG_MACH_NOKIA_RX51=y -CONFIG_MACH_OMAP_ZOOM2=y -CONFIG_MACH_OMAP_ZOOM3=y CONFIG_MACH_CM_T35=y CONFIG_MACH_CM_T3517=y CONFIG_MACH_CM_T3730=y -CONFIG_MACH_IGEP0020=y -CONFIG_MACH_IGEP0030=y CONFIG_MACH_SBC3530=y -CONFIG_MACH_OMAP_3630SDP=y CONFIG_MACH_TI8168EVM=y CONFIG_MACH_TI8148EVM=y -CONFIG_MACH_OMAP_4430SDP=y -CONFIG_MACH_OMAP4_PANDA=y # CONFIG_OMAP3_EMU is not set # CONFIG_OMAP3_SDRC_AC_TIMING is not set +CONFIG_ARCH_ROCKCHIP=y # CONFIG_ARCH_SOCFPGA is not set # CONFIG_PLAT_SPEAR is not set +# CONFIG_ARCH_STI is not set +# CONFIG_ARCH_SHMOBILE_MULTI is not set CONFIG_ARCH_SUNXI=y # CONFIG_ARCH_SIRF is not set # CONFIG_ARCH_TEGRA is not set @@ -461,6 +478,7 @@ CONFIG_ARCH_VEXPRESS=y # CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y CONFIG_ARCH_VEXPRESS_CA9X4=y +# CONFIG_ARCH_VEXPRESS_SPC is not set CONFIG_PLAT_VERSATILE_CLCD=y CONFIG_PLAT_VERSATILE_SCHED_CLOCK=y CONFIG_ARCH_VIRT=y @@ -497,6 +515,7 @@ CONFIG_ARM_THUMB=y CONFIG_ARM_THUMBEE=y CONFIG_ARM_VIRT_EXT=y CONFIG_SWP_EMULATE=y +# CONFIG_CPU_BIG_ENDIAN is not set # CONFIG_CPU_ICACHE_DISABLE is not set # CONFIG_CPU_DCACHE_DISABLE is not set # CONFIG_CPU_BPREDICT_DISABLE is not set @@ -509,6 +528,7 @@ CONFIG_CACHE_PL310=y CONFIG_ARM_L1_CACHE_SHIFT_6=y CONFIG_ARM_L1_CACHE_SHIFT=6 CONFIG_ARM_DMA_MEM_BUFFERABLE=y +CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y CONFIG_ARM_NR_BANKS=8 CONFIG_MULTI_IRQ_HANDLER=y CONFIG_PJ4B_ERRATA_4742=y @@ -523,8 +543,10 @@ CONFIG_ARM_ERRATA_754327=y CONFIG_ARM_ERRATA_764369=y CONFIG_PL310_ERRATA_769419=y CONFIG_ARM_ERRATA_775420=y -# CONFIG_ARM_ERRATA_798181 is not set +CONFIG_ARM_ERRATA_798181=y +CONFIG_ARM_ERRATA_773022=y CONFIG_ICST=y +CONFIG_TI_PRIV_EDMA=y # # Bus support @@ -533,6 +555,7 @@ CONFIG_ARM_AMBA=y CONFIG_PCI=y CONFIG_PCI_DOMAINS=y CONFIG_PCI_SYSCALL=y +CONFIG_PCI_MSI=y # CONFIG_PCI_DEBUG is not set # CONFIG_PCI_REALLOC_ENABLE_AUTO is not set # CONFIG_PCI_STUB is not set @@ -543,8 +566,19 @@ CONFIG_PCI_SYSCALL=y # # PCI host controller drivers # +CONFIG_PCI_MVEBU=y CONFIG_PCIE_DW=y CONFIG_PCI_IMX6=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCIEAER=y +# CONFIG_PCIE_ECRC is not set +# CONFIG_PCIEAER_INJECT is not set +CONFIG_PCIEASPM=y +# CONFIG_PCIEASPM_DEBUG is not set +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_PERFORMANCE is not set +CONFIG_PCIE_PME=y # CONFIG_PCCARD is not set # @@ -560,6 +594,7 @@ CONFIG_HAVE_ARM_SCU=y CONFIG_HAVE_ARM_ARCH_TIMER=y CONFIG_HAVE_ARM_TWD=y # CONFIG_MCPM is not set +# CONFIG_BIG_LITTLE is not set CONFIG_VMSPLIT_3G=y # CONFIG_VMSPLIT_2G is not set # CONFIG_VMSPLIT_1G is not set @@ -567,11 +602,17 @@ CONFIG_PAGE_OFFSET=0xC0000000 CONFIG_NR_CPUS=8 CONFIG_HOTPLUG_CPU=y CONFIG_ARM_PSCI=y -CONFIG_LOCAL_TIMERS=y CONFIG_ARCH_NR_GPIO=512 CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_VOLUNTARY is not set # CONFIG_PREEMPT is not set +CONFIG_HZ_FIXED=0 +CONFIG_HZ_100=y +# CONFIG_HZ_200 is not set +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +# CONFIG_HZ_500 is not set +# CONFIG_HZ_1000 is not set CONFIG_HZ=100 CONFIG_SCHED_HRTICK=y # CONFIG_THUMB2_KERNEL is not set @@ -584,9 +625,11 @@ CONFIG_HAVE_ARCH_PFN_VALID=y CONFIG_HIGHMEM=y CONFIG_HIGHPTE=y CONFIG_HW_PERF_EVENTS=y +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_HAVE_MEMBLOCK=y +CONFIG_NO_BOOTMEM=y CONFIG_MEMORY_ISOLATION=y # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set CONFIG_PAGEFLAGS_EXTENDED=y @@ -601,10 +644,15 @@ CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_CROSS_MEMORY_ATTACH=y CONFIG_CLEANCACHE=y # CONFIG_FRONTSWAP is not set +CONFIG_CMA=y +CONFIG_CMA_DEBUG=y +# CONFIG_ZBUD is not set +# CONFIG_ZSMALLOC is not set CONFIG_FORCE_MAX_ZONEORDER=12 CONFIG_ALIGNMENT_TRAP=y # CONFIG_SECCOMP is not set -CONFIG_CC_STACKPROTECTOR=y +CONFIG_SWIOTLB=y +CONFIG_IOMMU_HELPER=y # CONFIG_XEN is not set # @@ -635,7 +683,6 @@ CONFIG_AUTO_ZRELADDR=y # CPU Frequency scaling # CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_TABLE=y CONFIG_CPU_FREQ_GOV_COMMON=y CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_STAT_DETAILS=y @@ -654,14 +701,13 @@ CONFIG_GENERIC_CPUFREQ_CPU0=y # # ARM CPU frequency scaling drivers # -# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set -# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set -# CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set -# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set -# CONFIG_ARM_EXYNOS5440_CPUFREQ is not set CONFIG_ARM_IMX6Q_CPUFREQ=m # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set CONFIG_ARM_OMAP2PLUS_CPUFREQ=y + +# +# CPU Idle +# # CONFIG_CPU_IDLE is not set CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED=y @@ -675,6 +721,7 @@ CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED=y CONFIG_VFP=y CONFIG_VFPv3=y CONFIG_NEON=y +# CONFIG_KERNEL_MODE_NEON is not set # # Userspace binary formats @@ -703,6 +750,7 @@ CONFIG_APM_EMULATION=y CONFIG_ARCH_HAS_OPP=y CONFIG_PM_OPP=y CONFIG_PM_CLK=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_CPU_PM=y CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_ARM_CPU_SUSPEND=y @@ -742,7 +790,6 @@ CONFIG_IP_MROUTE=y CONFIG_IP_MROUTE_MULTIPLE_TABLES=y CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y -# CONFIG_ARPD is not set CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=m CONFIG_INET_AH=m @@ -775,7 +822,6 @@ CONFIG_DEFAULT_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" CONFIG_TCP_MD5SIG=y CONFIG_IPV6=y -CONFIG_IPV6_PRIVACY=y CONFIG_IPV6_ROUTER_PREF=y CONFIG_IPV6_ROUTE_INFO=y CONFIG_IPV6_OPTIMISTIC_DAD=y @@ -789,6 +835,7 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m CONFIG_INET6_XFRM_MODE_TUNNEL=m CONFIG_INET6_XFRM_MODE_BEET=m CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_VTI=m CONFIG_IPV6_SIT=m CONFIG_IPV6_SIT_6RD=y CONFIG_IPV6_NDISC_NODETYPE=y @@ -852,7 +899,22 @@ CONFIG_NF_NAT_FTP=m CONFIG_NF_NAT_IRC=m CONFIG_NF_NAT_SIP=m CONFIG_NF_NAT_TFTP=m -CONFIG_NETFILTER_TPROXY=m +CONFIG_NETFILTER_SYNPROXY=m +CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_INET=m +CONFIG_NFT_EXTHDR=m +CONFIG_NFT_META=m +CONFIG_NFT_CT=m +CONFIG_NFT_RBTREE=m +CONFIG_NFT_HASH=m +CONFIG_NFT_COUNTER=m +CONFIG_NFT_LOG=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_NAT=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m +CONFIG_NFT_COMPAT=m CONFIG_NETFILTER_XTABLES=y # @@ -897,6 +959,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m # CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m CONFIG_NETFILTER_XT_MATCH_CLUSTER=m CONFIG_NETFILTER_XT_MATCH_COMMENT=m CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m @@ -913,8 +976,12 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m CONFIG_NETFILTER_XT_MATCH_HELPER=m CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m CONFIG_NETFILTER_XT_MATCH_IPRANGE=m -# CONFIG_NETFILTER_XT_MATCH_IPVS is not set +CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_L2TP=m +CONFIG_NETFILTER_XT_MATCH_LAYER7=m +# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set CONFIG_NETFILTER_XT_MATCH_LENGTH=m CONFIG_NETFILTER_XT_MATCH_LIMIT=m CONFIG_NETFILTER_XT_MATCH_MAC=m @@ -933,8 +1000,6 @@ CONFIG_NETFILTER_XT_MATCH_RECENT=m CONFIG_NETFILTER_XT_MATCH_SCTP=m CONFIG_NETFILTER_XT_MATCH_SOCKET=m CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_LAYER7=m -# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set CONFIG_NETFILTER_XT_MATCH_STATISTIC=m CONFIG_NETFILTER_XT_MATCH_STRING=m CONFIG_NETFILTER_XT_MATCH_TCPMSS=m @@ -949,7 +1014,9 @@ CONFIG_IP_SET_HASH_IP=m CONFIG_IP_SET_HASH_IPPORT=m CONFIG_IP_SET_HASH_IPPORTIP=m CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_NETPORTNET=m CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETNET=m CONFIG_IP_SET_HASH_NETPORT=m CONFIG_IP_SET_HASH_NETIFACE=m CONFIG_IP_SET_LIST_SET=m @@ -1000,6 +1067,11 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=y CONFIG_NF_CONNTRACK_IPV4=y # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set +CONFIG_NF_TABLES_IPV4=m +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NF_TABLES_ARP=m CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_AH=m CONFIG_IP_NF_MATCH_ECN=m @@ -1007,6 +1079,7 @@ CONFIG_IP_NF_MATCH_RPFILTER=m CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_FILTER=m CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m # CONFIG_IP_NF_TARGET_ULOG is not set CONFIG_NF_NAT_IPV4=m CONFIG_IP_NF_TARGET_MASQUERADE=m @@ -1032,6 +1105,10 @@ CONFIG_IP_NF_MATCH_IPP2P=m # CONFIG_NF_DEFRAG_IPV6=y CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_NF_TABLES_IPV6=m +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_REJECT_IPV6=m CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m @@ -1045,12 +1122,14 @@ CONFIG_IP6_NF_MATCH_RT=m CONFIG_IP6_NF_TARGET_HL=m CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_RAW=m CONFIG_IP6_NF_SECURITY=m CONFIG_NF_NAT_IPV6=m CONFIG_IP6_NF_TARGET_MASQUERADE=m CONFIG_IP6_NF_TARGET_NPT=m +CONFIG_NF_TABLES_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m @@ -1075,7 +1154,6 @@ CONFIG_BRIDGE_EBT_LOG=m CONFIG_BRIDGE_EBT_NFLOG=m # CONFIG_IP_DCCP is not set CONFIG_IP_SCTP=m -# CONFIG_SCTP_DBG_MSG is not set # CONFIG_SCTP_DBG_OBJCNT is not set # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y @@ -1117,6 +1195,7 @@ CONFIG_LLC=y # CONFIG_LAPB is not set # CONFIG_PHONET is not set # CONFIG_IEEE802154 is not set +CONFIG_6LOWPAN_IPHC=m CONFIG_NET_SCHED=y # @@ -1142,6 +1221,8 @@ CONFIG_NET_SCH_CHOKE=m CONFIG_NET_SCH_QFQ=m CONFIG_NET_SCH_CODEL=m CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_HHF=m CONFIG_NET_SCH_PIE=m CONFIG_NET_SCH_INGRESS=m CONFIG_NET_SCH_PLUG=m @@ -1161,6 +1242,7 @@ CONFIG_NET_CLS_RSVP=m CONFIG_NET_CLS_RSVP6=m CONFIG_NET_CLS_FLOW=m CONFIG_NET_CLS_CGROUP=m +CONFIG_NET_CLS_BPF=m CONFIG_NET_EMATCH=y CONFIG_NET_EMATCH_STACK=32 CONFIG_NET_EMATCH_CMP=m @@ -1190,15 +1272,22 @@ CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m +CONFIG_OPENVSWITCH_GRE=y +CONFIG_OPENVSWITCH_VXLAN=y CONFIG_VSOCKETS=m CONFIG_NETLINK_MMAP=y CONFIG_NETLINK_DIAG=m +CONFIG_NET_MPLS_GSO=m +CONFIG_HSR=m CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y -CONFIG_NETPRIO_CGROUP=m +CONFIG_CGROUP_NET_PRIO=m +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y CONFIG_BPF_JIT=y +CONFIG_NET_FLOW_LIMIT=y # # Network testing @@ -1308,26 +1397,16 @@ CONFIG_REGMAP_I2C=y CONFIG_REGMAP_MMIO=y CONFIG_REGMAP_IRQ=y CONFIG_DMA_SHARED_BUFFER=y -CONFIG_CMA=y -CONFIG_CMA_DEBUG=y - -# -# Default contiguous memory area size: -# -CONFIG_CMA_SIZE_MBYTES=16 -CONFIG_CMA_SIZE_SEL_MBYTES=y -# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set -# CONFIG_CMA_SIZE_SEL_MIN is not set -# CONFIG_CMA_SIZE_SEL_MAX is not set -CONFIG_CMA_ALIGNMENT=8 -CONFIG_CMA_AREAS=7 +# CONFIG_DMA_CMA is not set # # Bus devices # +# CONFIG_IMX_WEIM is not set CONFIG_MVEBU_MBUS=y CONFIG_OMAP_OCP2SCP=y CONFIG_OMAP_INTERCONNECT=y +# CONFIG_ARM_CCI is not set CONFIG_CONNECTOR=y CONFIG_PROC_EVENTS=y CONFIG_MTD=y @@ -1341,7 +1420,6 @@ CONFIG_MTD_OF_PARTS=y # # User Modules And Translation Layers # -# CONFIG_MTD_BLKDEVS is not set # CONFIG_MTD_BLOCK is not set # CONFIG_MTD_BLOCK_RO is not set # CONFIG_FTL is not set @@ -1392,8 +1470,6 @@ CONFIG_MTD_CFI_I2=y # Disk-On-Chip Device Drivers # # CONFIG_MTD_DOCG3 is not set -CONFIG_BCH_CONST_M=13 -CONFIG_BCH_CONST_T=8 CONFIG_MTD_NAND_ECC=y CONFIG_MTD_NAND_ECC_SMC=y CONFIG_MTD_NAND=y @@ -1403,17 +1479,15 @@ CONFIG_MTD_NAND=y # CONFIG_MTD_NAND_GPIO is not set CONFIG_MTD_NAND_OMAP2=y CONFIG_MTD_NAND_OMAP_BCH=m -CONFIG_MTD_NAND_OMAP_BCH8=y -# CONFIG_MTD_NAND_OMAP_BCH4 is not set CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_RICOH is not set # CONFIG_MTD_NAND_DISKONCHIP is not set # CONFIG_MTD_NAND_DOCG4 is not set # CONFIG_MTD_NAND_CAFE is not set +CONFIG_MTD_NAND_PXA3xx=y # CONFIG_MTD_NAND_NANDSIM is not set CONFIG_MTD_NAND_GPMI_NAND=m # CONFIG_MTD_NAND_PLATFORM is not set -# CONFIG_MTD_ALAUDA is not set CONFIG_MTD_NAND_ORION=y CONFIG_MTD_NAND_MXC=m # CONFIG_MTD_ONENAND is not set @@ -1439,13 +1513,12 @@ CONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y -CONFIG_OF_DEVICE=y -CONFIG_OF_I2C=y CONFIG_OF_NET=y CONFIG_OF_MDIO=y CONFIG_OF_PCI=y CONFIG_OF_PCI_IRQ=y CONFIG_OF_MTD=y +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y CONFIG_PARPORT=m # CONFIG_PARPORT_PC is not set # CONFIG_PARPORT_GSC is not set @@ -1453,6 +1526,7 @@ CONFIG_PARPORT=m CONFIG_PARPORT_1284=y CONFIG_PARPORT_NOT_PC=y CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_NULL_BLK is not set # CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set # CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set @@ -1484,7 +1558,6 @@ CONFIG_BLK_DEV_RAM_SIZE=16384 # CONFIG_ATMEL_PWM is not set CONFIG_DUMMY_IRQ=m # CONFIG_PHANTOM is not set -# CONFIG_INTEL_MID_PTI is not set # CONFIG_SGI_IOC4 is not set # CONFIG_TIFM_CORE is not set CONFIG_ICS932S401=m @@ -1515,6 +1588,7 @@ CONFIG_EEPROM_AT24=m CONFIG_EEPROM_LEGACY=m CONFIG_EEPROM_MAX6875=m CONFIG_EEPROM_93CX6=m +CONFIG_EEPROM_SUNXI_SID=y # CONFIG_CB710_CORE is not set # @@ -1527,6 +1601,14 @@ CONFIG_TI_ST=m # Altera FPGA firmware download module # CONFIG_ALTERA_STAPL=m + +# +# Intel MIC Host Driver +# + +# +# Intel MIC Card Driver +# CONFIG_HAVE_IDE=y # CONFIG_IDE is not set @@ -1590,7 +1672,6 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=5000 CONFIG_AIC7XXX_DEBUG_ENABLE=y CONFIG_AIC7XXX_DEBUG_MASK=0 CONFIG_AIC7XXX_REG_PRETTY_PRINT=y -# CONFIG_SCSI_AIC7XXX_OLD is not set CONFIG_SCSI_AIC79XX=m CONFIG_AIC79XX_CMDS_PER_DEVICE=32 CONFIG_AIC79XX_RESET_DELAY_MS=5000 @@ -1604,6 +1685,7 @@ CONFIG_SCSI_MVSAS_DEBUG=y # CONFIG_SCSI_MVSAS_TASKLET is not set CONFIG_SCSI_MVUMI=m CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_ESAS2R=m CONFIG_MEGARAID_NEWGEN=y # CONFIG_MEGARAID_MM is not set CONFIG_MEGARAID_LEGACY=m @@ -1647,7 +1729,7 @@ CONFIG_SCSI_DEBUG=m CONFIG_SCSI_PMCRAID=m CONFIG_SCSI_PM8001=m CONFIG_SCSI_SRP=m -CONFIG_SCSI_BFA_FC=m +# CONFIG_SCSI_BFA_FC is not set CONFIG_SCSI_CHELSIO_FCOE=m CONFIG_SCSI_DH=y CONFIG_SCSI_DH_RDAC=m @@ -1670,6 +1752,7 @@ CONFIG_SATA_PMP=y # CONFIG_SATA_AHCI is not set CONFIG_SATA_AHCI_PLATFORM=m CONFIG_AHCI_IMX=m +CONFIG_AHCI_SUNXI=m # CONFIG_SATA_INIC162X is not set # CONFIG_SATA_ACARD_AHCI is not set # CONFIG_SATA_SIL24 is not set @@ -1691,6 +1774,7 @@ CONFIG_SATA_HIGHBANK=m CONFIG_SATA_MV=m # CONFIG_SATA_NV is not set # CONFIG_SATA_PROMISE is not set +CONFIG_SATA_RCAR=m # CONFIG_SATA_SIL is not set # CONFIG_SATA_SIS is not set # CONFIG_SATA_SVW is not set @@ -1768,14 +1852,14 @@ CONFIG_MD_MULTIPATH=m CONFIG_MD_FAULTY=m CONFIG_BCACHE=m # CONFIG_BCACHE_DEBUG is not set -# CONFIG_BCACHE_EDEBUG is not set # CONFIG_BCACHE_CLOSURES_DEBUG is not set CONFIG_BLK_DEV_DM_BUILTIN=y CONFIG_BLK_DEV_DM=y # CONFIG_DM_DEBUG is not set -CONFIG_DM_BUFIO=m +CONFIG_DM_BUFIO=y CONFIG_DM_BIO_PRISON=m CONFIG_DM_PERSISTENT_DATA=m +# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set CONFIG_DM_CRYPT=m CONFIG_DM_SNAPSHOT=y # CONFIG_DM_THIN_PROVISIONING is not set @@ -1783,8 +1867,8 @@ CONFIG_DM_CACHE=m CONFIG_DM_CACHE_MQ=m CONFIG_DM_CACHE_CLEANER=m CONFIG_DM_MIRROR=y -CONFIG_DM_RAID=m CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_RAID=m CONFIG_DM_ZERO=y CONFIG_DM_MULTIPATH=m CONFIG_DM_MULTIPATH_QL=m @@ -1793,6 +1877,7 @@ CONFIG_DM_MULTIPATH_ST=m CONFIG_DM_UEVENT=y # CONFIG_DM_FLAKEY is not set CONFIG_DM_VERITY=m +CONFIG_DM_SWITCH=m # CONFIG_TARGET_CORE is not set # CONFIG_FUSION is not set @@ -1806,12 +1891,12 @@ CONFIG_FIREWIRE_SBP2=m # CONFIG_FIREWIRE_NOSY is not set # CONFIG_I2O is not set CONFIG_NETDEVICES=y +CONFIG_MII=m CONFIG_NET_CORE=y CONFIG_BONDING=m CONFIG_DUMMY=m # CONFIG_EQUALIZER is not set # CONFIG_NET_FC is not set -CONFIG_MII=m CONFIG_IFB=m # CONFIG_NET_TEAM is not set CONFIG_MACVLAN=m @@ -1830,6 +1915,7 @@ CONFIG_IMQ_BEHAVIOR_AB=y CONFIG_IMQ_NUM_DEVS=2 CONFIG_TUN=m CONFIG_VETH=m +CONFIG_NLMON=m CONFIG_SUNGEM_PHY=m # CONFIG_ARCNET is not set CONFIG_ATM_DRIVERS=y @@ -1874,12 +1960,16 @@ CONFIG_NET_VENDOR_3COM=y CONFIG_TYPHOON=m CONFIG_NET_VENDOR_ADAPTEC=y CONFIG_ADAPTEC_STARFIRE=m +CONFIG_NET_VENDOR_ALLWINNER=y +CONFIG_SUN4I_EMAC=m CONFIG_NET_VENDOR_ALTEON=y CONFIG_ACENIC=m # CONFIG_ACENIC_OMIT_TIGON_I is not set CONFIG_NET_VENDOR_AMD=y CONFIG_AMD8111_ETH=m CONFIG_PCNET32=m +CONFIG_NET_VENDOR_ARC=y +CONFIG_ARC_EMAC=m CONFIG_NET_VENDOR_ATHEROS=y CONFIG_ATL2=m CONFIG_ATL1=m @@ -1954,6 +2044,10 @@ CONFIG_IGBVF=m CONFIG_IXGB=m CONFIG_IXGBE=m CONFIG_IXGBE_HWMON=y +CONFIG_IXGBEVF=m +CONFIG_I40E=m +CONFIG_I40E_VXLAN=y +CONFIG_I40EVF=m CONFIG_NET_VENDOR_I825XX=y CONFIG_IP1000=m CONFIG_JME=m @@ -1970,6 +2064,7 @@ CONFIG_NET_VENDOR_MELLANOX=y CONFIG_MLX4_EN=m CONFIG_MLX4_CORE=m CONFIG_MLX4_DEBUG=y +# CONFIG_MLX5_CORE is not set CONFIG_NET_VENDOR_MICREL=y CONFIG_KS8842=m CONFIG_KS8851_MLL=m @@ -1987,7 +2082,6 @@ CONFIG_NE2K_PCI=m CONFIG_NET_VENDOR_NVIDIA=y CONFIG_FORCEDETH=m CONFIG_NET_VENDOR_OKI=y -CONFIG_PCH_GBE=m CONFIG_ETHOC=m CONFIG_NET_PACKET_ENGINE=y CONFIG_HAMACHI=m @@ -2005,6 +2099,7 @@ CONFIG_8139TOO=m CONFIG_8139TOO_8129=y # CONFIG_8139_OLD_RX_RESET is not set CONFIG_R8169=m +CONFIG_SH_ETH=m CONFIG_NET_VENDOR_RDC=y CONFIG_R6040=m CONFIG_NET_VENDOR_SEEQ=y @@ -2026,6 +2121,7 @@ CONFIG_SMSC9420=m CONFIG_NET_VENDOR_STMICRO=y CONFIG_STMMAC_ETH=m CONFIG_STMMAC_PLATFORM=y +CONFIG_DWMAC_SUNXI=y # CONFIG_STMMAC_PCI is not set # CONFIG_STMMAC_DEBUG_FS is not set # CONFIG_STMMAC_DA is not set @@ -2040,6 +2136,7 @@ CONFIG_NET_VENDOR_TI=y CONFIG_TI_DAVINCI_EMAC=m CONFIG_TI_DAVINCI_MDIO=m CONFIG_TI_DAVINCI_CPDMA=m +CONFIG_TI_CPSW_PHY_SEL=y CONFIG_TI_CPSW=m CONFIG_TI_CPTS=y CONFIG_TLAN=m @@ -2053,6 +2150,8 @@ CONFIG_WIZNET_W5300=m # CONFIG_WIZNET_BUS_DIRECT is not set # CONFIG_WIZNET_BUS_INDIRECT is not set CONFIG_WIZNET_BUS_ANY=y +CONFIG_NET_VENDOR_XILINX=y +CONFIG_XILINX_EMACLITE=m # CONFIG_FDDI is not set # CONFIG_HIPPI is not set CONFIG_PHYLIB=y @@ -2080,9 +2179,11 @@ CONFIG_MICREL_PHY=m CONFIG_FIXED_PHY=y CONFIG_MDIO_BITBANG=m # CONFIG_MDIO_GPIO is not set +CONFIG_MDIO_SUN4I=m CONFIG_MDIO_BUS_MUX=m CONFIG_MDIO_BUS_MUX_GPIO=m CONFIG_MDIO_BUS_MUX_MMIOREG=m +CONFIG_GATEWORKS_GW16083=m # CONFIG_PLIP is not set CONFIG_PPP=m CONFIG_PPP_BSDCOMP=m @@ -2113,8 +2214,11 @@ CONFIG_USB_NET_AX88179_178A=m CONFIG_USB_NET_CDCETHER=m CONFIG_USB_NET_CDC_EEM=m CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_HUAWEI_CDC_NCM=m CONFIG_USB_NET_CDC_MBIM=m CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m CONFIG_USB_NET_SMSC75XX=m CONFIG_USB_NET_SMSC95XX=m CONFIG_USB_NET_GL620A=m @@ -2167,7 +2271,9 @@ CONFIG_ATH9K=m CONFIG_ATH9K_PCI=y CONFIG_ATH9K_AHB=y # CONFIG_ATH9K_DEBUGFS is not set +# CONFIG_ATH9K_WOW is not set # CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set +CONFIG_ATH9K_RFKILL=y CONFIG_ATH9K_HTC=m # CONFIG_ATH9K_HTC_DEBUGFS is not set CONFIG_CARL9170=m @@ -2177,14 +2283,24 @@ CONFIG_CARL9170_WPC=y # CONFIG_ATH6KL is not set CONFIG_AR5523=m # CONFIG_WIL6210 is not set +CONFIG_ATH10K=m +CONFIG_ATH10K_PCI=m +# CONFIG_ATH10K_DEBUG is not set +# CONFIG_ATH10K_DEBUGFS is not set +# CONFIG_ATH10K_TRACING is not set +CONFIG_WCN36XX=m +# CONFIG_WCN36XX_DEBUGFS is not set CONFIG_B43=m +CONFIG_B43_BCMA=y CONFIG_B43_SSB=y CONFIG_B43_PCI_AUTOSELECT=y CONFIG_B43_PCICORE_AUTOSELECT=y CONFIG_B43_SDIO=y +CONFIG_B43_BCMA_PIO=y CONFIG_B43_PIO=y CONFIG_B43_PHY_N=y CONFIG_B43_PHY_LP=y +CONFIG_B43_PHY_HT=y CONFIG_B43_LEDS=y CONFIG_B43_HWRNG=y # CONFIG_B43_DEBUG is not set @@ -2200,6 +2316,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y # CONFIG_B43LEGACY_DMA_MODE is not set # CONFIG_B43LEGACY_PIO_MODE is not set CONFIG_BRCMUTIL=m +CONFIG_BRCMSMAC=m CONFIG_BRCMFMAC=m CONFIG_BRCMFMAC_SDIO=y # CONFIG_BRCMFMAC_USB is not set @@ -2231,7 +2348,6 @@ CONFIG_IWLWIFI_OPMODE_MODULAR=y # # CONFIG_IWLWIFI_DEBUG is not set # CONFIG_IWLWIFI_DEVICE_TRACING is not set -CONFIG_IWLWIFI_P2P=y CONFIG_IWLEGACY=m CONFIG_IWL4965=m CONFIG_IWL3945=m @@ -2266,6 +2382,7 @@ CONFIG_RT73USB=m CONFIG_RT2800USB=m CONFIG_RT2800USB_RT33XX=y CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT3573=y CONFIG_RT2800USB_RT53XX=y CONFIG_RT2800USB_RT55XX=y CONFIG_RT2800USB_UNKNOWN=y @@ -2276,14 +2393,17 @@ CONFIG_RT2X00_LIB_FIRMWARE=y CONFIG_RT2X00_LIB_CRYPTO=y CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set -CONFIG_RTLWIFI=m -# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTL_CARDS=m CONFIG_RTL8192CE=m CONFIG_RTL8192SE=m CONFIG_RTL8192DE=m CONFIG_RTL8723AE=m CONFIG_RTL8188EE=m CONFIG_RTL8192CU=m +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_PCI=m +CONFIG_RTLWIFI_USB=m +# CONFIG_RTLWIFI_DEBUG is not set CONFIG_RTL8192C_COMMON=m CONFIG_WL_TI=y CONFIG_WL1251=m @@ -2299,6 +2419,8 @@ CONFIG_MWIFIEX=m CONFIG_MWIFIEX_SDIO=m CONFIG_MWIFIEX_PCIE=m CONFIG_MWIFIEX_USB=m +CONFIG_CW1200=m +CONFIG_CW1200_WLAN_SDIO=m # # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -2379,8 +2501,8 @@ CONFIG_HISAX_HFC4S8S=m CONFIG_ISDN_CAPI=m CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y CONFIG_CAPI_TRACE=y -CONFIG_ISDN_CAPI_MIDDLEWARE=y CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_MIDDLEWARE=y CONFIG_ISDN_CAPI_CAPIDRV=m # @@ -2443,6 +2565,7 @@ CONFIG_KEYBOARD_IMX=m # CONFIG_KEYBOARD_SAMSUNG is not set # CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_SUN4I_LRADC is not set CONFIG_KEYBOARD_OMAP4=m CONFIG_KEYBOARD_TWL4030=m # CONFIG_KEYBOARD_XTKBD is not set @@ -2475,6 +2598,7 @@ CONFIG_INPUT_MISC=y # CONFIG_INPUT_MMA8450 is not set # CONFIG_INPUT_MPU3050 is not set # CONFIG_INPUT_GP2A is not set +CONFIG_INPUT_GPIO_BEEPER=m # CONFIG_INPUT_GPIO_TILT_POLLED is not set CONFIG_INPUT_ATI_REMOTE2=m CONFIG_INPUT_KEYSPAN_REMOTE=m @@ -2483,11 +2607,11 @@ CONFIG_INPUT_POWERMATE=m CONFIG_INPUT_YEALINK=m CONFIG_INPUT_CM109=m CONFIG_INPUT_RETU_PWRBUTTON=m +CONFIG_INPUT_AXP20X_PEK=y CONFIG_INPUT_TWL4030_PWRBUTTON=m CONFIG_INPUT_TWL4030_VIBRA=m CONFIG_INPUT_UINPUT=m # CONFIG_INPUT_PCF8574 is not set -CONFIG_INPUT_PWM_BEEPER=m CONFIG_INPUT_GPIO_ROTARY_ENCODER=m # CONFIG_INPUT_ADXL34X is not set # CONFIG_INPUT_IMS_PCU is not set @@ -2507,6 +2631,7 @@ CONFIG_SERIO_ALTERA_PS2=m # CONFIG_SERIO_PS2MULT is not set CONFIG_SERIO_ARC_PS2=m CONFIG_SERIO_APBPS2=m +CONFIG_SERIO_OLPC_APSP=m # CONFIG_GAMEPORT is not set # @@ -2535,7 +2660,6 @@ CONFIG_N_HDLC=m CONFIG_N_GSM=m # CONFIG_TRACE_SINK is not set # CONFIG_DEVKMEM is not set -# CONFIG_STALDRV is not set # # Serial drivers @@ -2565,6 +2689,9 @@ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y # CONFIG_SERIAL_MFD_HSU is not set CONFIG_SERIAL_IMX=y CONFIG_SERIAL_IMX_CONSOLE=y +CONFIG_SERIAL_UARTLITE=m +CONFIG_SERIAL_SH_SCI=m +CONFIG_SERIAL_SH_SCI_NR_UARTS=2 CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_JSM is not set @@ -2581,6 +2708,8 @@ CONFIG_SERIAL_SCCNXP=m CONFIG_SERIAL_ARC=m CONFIG_SERIAL_ARC_NR_PORTS=1 # CONFIG_SERIAL_RP2 is not set +CONFIG_SERIAL_FSL_LPUART=m +CONFIG_SERIAL_ST_ASC=m # CONFIG_TTY_PRINTK is not set CONFIG_PRINTER=m CONFIG_LP_CONSOLE=y @@ -2595,6 +2724,8 @@ CONFIG_IPMI_POWEROFF=m CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_TIMERIOMEM=m CONFIG_HW_RANDOM_ATMEL=m +CONFIG_HW_RANDOM_OMAP=y +CONFIG_HW_RANDOM_OMAP3_ROM=y CONFIG_HW_RANDOM_EXYNOS=m CONFIG_NVRAM=y CONFIG_R3964=m @@ -2607,7 +2738,16 @@ CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y CONFIG_I2C_CHARDEV=m -# CONFIG_I2C_MUX is not set +CONFIG_I2C_MUX=y + +# +# Multiplexer I2C Chip support +# +CONFIG_I2C_ARB_GPIO_CHALLENGE=m +CONFIG_I2C_MUX_GPIO=m +CONFIG_I2C_MUX_PCA9541=m +CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_SMBUS=m CONFIG_I2C_ALGOBIT=m @@ -2644,7 +2784,6 @@ CONFIG_I2C_CBUS_GPIO=m # CONFIG_I2C_EG20T is not set CONFIG_I2C_GPIO=m CONFIG_I2C_IMX=m -# CONFIG_I2C_INTEL_MID is not set CONFIG_I2C_MV64XXX=y CONFIG_I2C_NOMADIK=y # CONFIG_I2C_OCORES is not set @@ -2653,6 +2792,7 @@ CONFIG_I2C_PCA_PLATFORM=m # CONFIG_I2C_PXA_PCI is not set CONFIG_I2C_SIMTEC=m CONFIG_I2C_VERSATILE=m +CONFIG_I2C_WMT=m # CONFIG_I2C_XILINX is not set # @@ -2661,6 +2801,7 @@ CONFIG_I2C_VERSATILE=m CONFIG_I2C_DIOLAN_U2C=m CONFIG_I2C_PARPORT=m CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_ROBOTFUZZ_OSIF=m # CONFIG_I2C_TAOS_EVM is not set CONFIG_I2C_TINY_USB=m CONFIG_I2C_VIPERBOARD=m @@ -2673,11 +2814,6 @@ CONFIG_I2C_STUB=m # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set # CONFIG_SPI is not set - -# -# Qualcomm MSM SSBI bus support -# -# CONFIG_SSBI is not set CONFIG_HSI=m CONFIG_HSI_BOARDINFO=y @@ -2712,7 +2848,6 @@ CONFIG_PTP_1588_CLOCK=m # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. # -CONFIG_PTP_1588_CLOCK_PCH=m CONFIG_PINCTRL=y # @@ -2722,14 +2857,17 @@ CONFIG_PINMUX=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_CAPRI is not set CONFIG_PINCTRL_IMX=y CONFIG_PINCTRL_IMX51=y CONFIG_PINCTRL_IMX53=y CONFIG_PINCTRL_IMX6Q=y +CONFIG_PINCTRL_IMX6SL=y +CONFIG_PINCTRL_MSM=y +CONFIG_PINCTRL_MSM8X74=m +CONFIG_PINCTRL_ROCKCHIP=y CONFIG_PINCTRL_SINGLE=y CONFIG_PINCTRL_SUNXI=y -# CONFIG_PINCTRL_EXYNOS is not set -# CONFIG_PINCTRL_EXYNOS5440 is not set CONFIG_PINCTRL_MVEBU=y CONFIG_PINCTRL_ARMADA_370=y CONFIG_PINCTRL_ARMADA_XP=y @@ -2738,8 +2876,8 @@ CONFIG_PINCTRL_WM8850=y CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y CONFIG_ARCH_REQUIRE_GPIOLIB=y -CONFIG_GPIO_DEVRES=y CONFIG_GPIOLIB=y +CONFIG_GPIO_DEVRES=y CONFIG_OF_GPIO=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y @@ -2754,7 +2892,9 @@ CONFIG_GPIO_MVEBU=y CONFIG_GPIO_MXC=y CONFIG_GPIO_PL061=y # CONFIG_GPIO_RCAR is not set +CONFIG_GPIO_SCH311X=m CONFIG_GPIO_TS5500=m +# CONFIG_GPIO_XILINX is not set # CONFIG_GPIO_VX855 is not set # CONFIG_GPIO_GRGPIO is not set @@ -2785,9 +2925,14 @@ CONFIG_GPIO_MCP23S08=m # AC97 GPIO expanders: # +# +# LPC GPIO expanders: +# + # # MODULbus GPIO expanders: # +# CONFIG_GPIO_BCM_KONA is not set # # USB GPIO expanders: @@ -2839,6 +2984,7 @@ CONFIG_BATTERY_88PM860X=m # CONFIG_BATTERY_BQ27x00 is not set # CONFIG_BATTERY_MAX17040 is not set # CONFIG_BATTERY_MAX17042 is not set +CONFIG_BATTERY_TWL4030_MADC=m CONFIG_CHARGER_88PM860X=m # CONFIG_BATTERY_RX51 is not set # CONFIG_CHARGER_ISP1704 is not set @@ -2848,8 +2994,9 @@ CONFIG_CHARGER_TWL4030=y # CONFIG_CHARGER_GPIO is not set # CONFIG_CHARGER_MANAGER is not set # CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24735 is not set # CONFIG_CHARGER_SMB347 is not set -# CONFIG_BATTERY_GOLDFISH is not set CONFIG_POWER_RESET=y CONFIG_POWER_RESET_GPIO=y CONFIG_POWER_RESET_QNAP=y @@ -2886,10 +3033,12 @@ CONFIG_SENSORS_F71805F=m CONFIG_SENSORS_F71882FG=m CONFIG_SENSORS_F75375S=m CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_G762=m CONFIG_SENSORS_GL518SM=m CONFIG_SENSORS_GL520SM=m # CONFIG_SENSORS_GPIO_FAN is not set CONFIG_SENSORS_HIH6130=m +CONFIG_SENSORS_HTU21=m CONFIG_SENSORS_IBMAEM=m CONFIG_SENSORS_IBMPEX=m # CONFIG_SENSORS_IIO_HWMON is not set @@ -2980,6 +3129,7 @@ CONFIG_SENSORS_W83627HF=m CONFIG_SENSORS_W83627EHF=m CONFIG_THERMAL=y CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_OF=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set @@ -2990,6 +3140,15 @@ CONFIG_CPU_THERMAL=y CONFIG_THERMAL_EMULATION=y CONFIG_IMX_THERMAL=m CONFIG_ARMADA_THERMAL=m + +# +# Texas Instruments thermal drivers +# +CONFIG_TI_SOC_THERMAL=m +CONFIG_TI_THERMAL=y +CONFIG_OMAP4_THERMAL=y +CONFIG_OMAP5_THERMAL=y +CONFIG_DRA752_THERMAL=y CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y CONFIG_WATCHDOG_NOWAYOUT=y @@ -2998,16 +3157,18 @@ CONFIG_WATCHDOG_NOWAYOUT=y # Watchdog Device Drivers # CONFIG_SOFT_WATCHDOG=m +CONFIG_GPIO_WATCHDOG=m CONFIG_ARM_SP805_WATCHDOG=m # CONFIG_DW_WATCHDOG is not set -CONFIG_MPCORE_WATCHDOG=m CONFIG_OMAP_WATCHDOG=m +CONFIG_SUNXI_WATCHDOG=m CONFIG_TWL4030_WATCHDOG=m # CONFIG_MAX63XX_WATCHDOG is not set CONFIG_IMX2_WDT=m CONFIG_RETU_WATCHDOG=m # CONFIG_ALIM7101_WDT is not set # CONFIG_I6300ESB_WDT is not set +CONFIG_MEN_A21_WDT=m # # PCI-based Watchdog Cards @@ -3042,20 +3203,30 @@ CONFIG_BCMA_POSSIBLE=y # # Broadcom specific AMBA # -# CONFIG_BCMA is not set +CONFIG_BCMA=m +CONFIG_BCMA_BLOCKIO=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_PCI=y +CONFIG_BCMA_HOST_SOC=y +CONFIG_BCMA_DRIVER_GMAC_CMN=y +CONFIG_BCMA_DRIVER_GPIO=y +# CONFIG_BCMA_DEBUG is not set # # Multifunction device drivers # CONFIG_MFD_CORE=y # CONFIG_MFD_AS3711 is not set +# CONFIG_MFD_AS3722 is not set # CONFIG_PMIC_ADP5520 is not set # CONFIG_MFD_AAT2870_CORE is not set +CONFIG_MFD_AXP20X=y # CONFIG_MFD_CROS_EC is not set # CONFIG_MFD_ASIC3 is not set # CONFIG_PMIC_DA903X is not set # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9063 is not set # CONFIG_MFD_MC13XXX_I2C is not set # CONFIG_HTC_EGPIO is not set # CONFIG_HTC_PASIC3 is not set @@ -3063,9 +3234,11 @@ CONFIG_MFD_CORE=y # CONFIG_LPC_ICH is not set # CONFIG_LPC_SCH is not set # CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_KEMPLD is not set CONFIG_MFD_88PM800=y CONFIG_MFD_88PM805=y CONFIG_MFD_88PM860X=y +# CONFIG_MFD_MAX14577 is not set # CONFIG_MFD_MAX77686 is not set # CONFIG_MFD_MAX77693 is not set # CONFIG_MFD_MAX8907 is not set @@ -3089,6 +3262,7 @@ CONFIG_ABX500_CORE=y # CONFIG_MFD_STMPE is not set CONFIG_MFD_SYSCON=y # CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_MFD_LP3943 is not set # CONFIG_MFD_LP8788 is not set CONFIG_MFD_OMAP_USB_HOST=y # CONFIG_MFD_PALMAS is not set @@ -3124,25 +3298,30 @@ CONFIG_MFD_LM3533=m CONFIG_VEXPRESS_CONFIG=y CONFIG_REGULATOR=y # CONFIG_REGULATOR_DEBUG is not set -# CONFIG_REGULATOR_DUMMY is not set CONFIG_REGULATOR_FIXED_VOLTAGE=y # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set -# CONFIG_REGULATOR_GPIO is not set -# CONFIG_REGULATOR_AD5398 is not set -# CONFIG_REGULATOR_FAN53555 is not set -CONFIG_REGULATOR_ANATOP=m -# CONFIG_REGULATOR_ISL6271A is not set +CONFIG_REGULATOR_88PM800=m CONFIG_REGULATOR_88PM8607=y +# CONFIG_REGULATOR_ACT8865 is not set +# CONFIG_REGULATOR_AD5398 is not set +CONFIG_REGULATOR_ANATOP=m +CONFIG_REGULATOR_AXP20X=y +# CONFIG_REGULATOR_DA9210 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_GPIO is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +CONFIG_REGULATOR_LP8755=m # CONFIG_REGULATOR_MAX1586 is not set # CONFIG_REGULATOR_MAX8649 is not set # CONFIG_REGULATOR_MAX8660 is not set # CONFIG_REGULATOR_MAX8952 is not set # CONFIG_REGULATOR_MAX8973 is not set -# CONFIG_REGULATOR_LP3971 is not set -# CONFIG_REGULATOR_LP3972 is not set -# CONFIG_REGULATOR_LP872X is not set -CONFIG_REGULATOR_LP8755=m +CONFIG_REGULATOR_PFUZE100=y +# CONFIG_REGULATOR_TI_ABB is not set # CONFIG_REGULATOR_TPS51632 is not set # CONFIG_REGULATOR_TPS62360 is not set # CONFIG_REGULATOR_TPS65023 is not set @@ -3176,7 +3355,6 @@ CONFIG_VIDEOBUF2_CORE=m CONFIG_VIDEOBUF2_MEMOPS=m CONFIG_VIDEOBUF2_DMA_CONTIG=m CONFIG_VIDEOBUF2_VMALLOC=m -CONFIG_VIDEO_V4L2_INT_DEVICE=m CONFIG_DVB_CORE=y CONFIG_DVB_NET=y CONFIG_TTPCI_EEPROM=m @@ -3209,6 +3387,7 @@ CONFIG_IR_IGUANA=m CONFIG_IR_TTUSBIR=m CONFIG_RC_LOOPBACK=m CONFIG_IR_GPIO_CIR=m +CONFIG_IR_SUNXI=m CONFIG_MEDIA_USB_SUPPORT=y # @@ -3254,6 +3433,7 @@ CONFIG_USB_GSPCA_SQ905=m CONFIG_USB_GSPCA_SQ905C=m CONFIG_USB_GSPCA_SQ930X=m CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STK1135=m CONFIG_USB_GSPCA_STV0680=m CONFIG_USB_GSPCA_SUNPLUS=m CONFIG_USB_GSPCA_T613=m @@ -3270,7 +3450,7 @@ CONFIG_VIDEO_CPIA2=m CONFIG_USB_ZR364XX=m CONFIG_USB_STKWEBCAM=m CONFIG_USB_S2255=m -CONFIG_USB_SN9C102=m +CONFIG_VIDEO_USBTV=m # # Analog TV USB devices @@ -3282,8 +3462,9 @@ CONFIG_VIDEO_PVRUSB2_DVB=y CONFIG_VIDEO_HDPVR=m CONFIG_VIDEO_TLG2300=m CONFIG_VIDEO_USBVISION=m -CONFIG_VIDEO_STK1160=m +CONFIG_VIDEO_STK1160_COMMON=m # CONFIG_VIDEO_STK1160_AC97 is not set +CONFIG_VIDEO_STK1160=m # # Analog/digital TV USB devices @@ -3352,6 +3533,7 @@ CONFIG_DVB_B2C2_FLEXCOP_USB=m # Webcam, TV (analog/digital) USB devices # CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_V4L2=m CONFIG_VIDEO_EM28XX_ALSA=m CONFIG_VIDEO_EM28XX_DVB=m CONFIG_VIDEO_EM28XX_RC=m @@ -3384,6 +3566,7 @@ CONFIG_VIDEO_CX88=m CONFIG_VIDEO_CX88_ALSA=m CONFIG_VIDEO_CX88_BLACKBIRD=m CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_ENABLE_VP3054=y CONFIG_VIDEO_CX88_VP3054=m CONFIG_VIDEO_CX88_MPEG=m CONFIG_VIDEO_BT848=m @@ -3421,15 +3604,19 @@ CONFIG_VIDEO_OMAP2_VOUT_VRFB=y CONFIG_VIDEO_OMAP2_VOUT=y CONFIG_VIDEO_TIMBERDALE=m CONFIG_SOC_CAMERA=m +CONFIG_SOC_CAMERA_SCALE_CROP=m CONFIG_SOC_CAMERA_PLATFORM=m -CONFIG_MX3_VIDEO=y CONFIG_VIDEO_MX3=m +CONFIG_VIDEO_RCAR_VIN=m # CONFIG_VIDEO_SH_MOBILE_CSI2 is not set # CONFIG_VIDEO_SH_MOBILE_CEU is not set CONFIG_V4L_MEM2MEM_DRIVERS=y # CONFIG_VIDEO_CODA is not set CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m CONFIG_VIDEO_SH_VEU=m +CONFIG_VIDEO_RENESAS_VSP1=m +CONFIG_VIDEO_TI_VPE=m +# CONFIG_VIDEO_TI_VPE_DEBUG is not set # CONFIG_V4L_TEST_DRIVERS is not set # @@ -3456,7 +3643,6 @@ CONFIG_VIDEO_SAA7146=m CONFIG_VIDEO_SAA7146_VV=m CONFIG_SMS_SIANO_MDTV=m CONFIG_SMS_SIANO_RC=y -# CONFIG_SMS_SIANO_DEBUGFS is not set # # Media ancillary drivers (tuners, sensors, i2c, frontends) @@ -3519,7 +3705,12 @@ CONFIG_VIDEO_UPD64031A=m CONFIG_VIDEO_UPD64083=m # -# Miscelaneous helper chips +# Audio/Video compression chips +# +CONFIG_VIDEO_SAA6752HS=m + +# +# Miscellaneous helper chips # CONFIG_VIDEO_M52790=m @@ -3570,6 +3761,7 @@ CONFIG_MEDIA_TUNER_FC0013=m CONFIG_MEDIA_TUNER_TDA18212=m CONFIG_MEDIA_TUNER_E4000=m CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_M88TS2022=m CONFIG_MEDIA_TUNER_TUA9001=m CONFIG_MEDIA_TUNER_IT913X=m CONFIG_MEDIA_TUNER_R820T=m @@ -3581,6 +3773,7 @@ CONFIG_DVB_STB0899=m CONFIG_DVB_STB6100=m CONFIG_DVB_STV090x=m CONFIG_DVB_STV6110x=m +CONFIG_DVB_M88DS3103=m # # Multistandard (cable + terrestrial) frontends @@ -3611,8 +3804,7 @@ CONFIG_DVB_TUNER_CX24113=m CONFIG_DVB_TDA826X=m CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m -CONFIG_DVB_M88DS3103=m -CONFIG_DVB_M88DC2800=m +CONFIG_DVB_CX24117=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m @@ -3693,6 +3885,8 @@ CONFIG_DVB_A8293=m CONFIG_DVB_LGS8GXX=m CONFIG_DVB_ATBM8830=m CONFIG_DVB_TDA665x=m +CONFIG_DVB_DVBSKY_M88DS3103=m +CONFIG_DVB_M88DC2800=m CONFIG_DVB_IX2505V=m CONFIG_DVB_IT913X_FE=m CONFIG_DVB_M88RS2000=m @@ -3711,6 +3905,7 @@ CONFIG_VGA_ARB_MAX_GPUS=16 CONFIG_DRM=m CONFIG_DRM_USB=m CONFIG_DRM_KMS_HELPER=m +CONFIG_DRM_KMS_FB_HELPER=y # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set CONFIG_DRM_GEM_CMA_HELPER=y CONFIG_DRM_KMS_CMA_HELPER=y @@ -3733,16 +3928,23 @@ CONFIG_DRM_EXYNOS_DMABUF=y CONFIG_DRM_EXYNOS_HDMI=y CONFIG_DRM_EXYNOS_VIDI=y CONFIG_DRM_EXYNOS_G2D=y +CONFIG_DRM_EXYNOS_IPP=y +CONFIG_DRM_EXYNOS_FIMC=y +CONFIG_DRM_EXYNOS_ROTATOR=y # CONFIG_DRM_VMWGFX is not set CONFIG_DRM_UDL=m # CONFIG_DRM_AST is not set # CONFIG_DRM_MGAG200 is not set # CONFIG_DRM_CIRRUS_QEMU is not set +CONFIG_DRM_ARMADA=m +CONFIG_DRM_RCAR_DU=m +CONFIG_DRM_RCAR_LVDS=y +CONFIG_DRM_SHMOBILE=m CONFIG_DRM_OMAP=m CONFIG_DRM_OMAP_NUM_CRTCS=2 CONFIG_DRM_TILCDC=m # CONFIG_DRM_QXL is not set -# CONFIG_TEGRA_HOST1X is not set +# CONFIG_DRM_BOCHS is not set # CONFIG_VGASTATE is not set # CONFIG_VIDEO_OUTPUT_CONTROL is not set CONFIG_VIDEOMODE_HELPERS=y @@ -3754,7 +3956,7 @@ CONFIG_FIRMWARE_EDID=y CONFIG_FB_CFB_FILLRECT=m CONFIG_FB_CFB_COPYAREA=m CONFIG_FB_CFB_IMAGEBLIT=m -# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +CONFIG_FB_CFB_REV_PIXELS_IN_BYTE=y CONFIG_FB_SYS_FILLRECT=y CONFIG_FB_SYS_COPYAREA=y CONFIG_FB_SYS_IMAGEBLIT=y @@ -3773,10 +3975,12 @@ CONFIG_FB_TILEBLITTING=y # CONFIG_FB_CIRRUS is not set # CONFIG_FB_PM2 is not set CONFIG_FB_ARMCLCD=m +CONFIG_FB_IMX=m # CONFIG_FB_CYBER2000 is not set # CONFIG_FB_ASILIANT is not set # CONFIG_FB_IMSTT is not set # CONFIG_FB_UVESA is not set +CONFIG_FB_OPENCORES=m # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_NVIDIA is not set # CONFIG_FB_RIVA is not set @@ -3803,7 +4007,9 @@ CONFIG_FB_ARMCLCD=m # CONFIG_FB_SM501 is not set CONFIG_FB_SMSCUFX=m # CONFIG_FB_UDL is not set +CONFIG_FB_XILINX=m # CONFIG_FB_GOLDFISH is not set +CONFIG_FB_DA8XX=m # CONFIG_FB_VIRTUAL is not set # CONFIG_FB_METRONOME is not set # CONFIG_FB_MB862XX is not set @@ -3816,7 +4022,6 @@ CONFIG_OMAP2_DSS=y # CONFIG_OMAP2_DSS_DEBUG is not set # CONFIG_OMAP2_DSS_DEBUGFS is not set CONFIG_OMAP2_DSS_DPI=y -CONFIG_OMAP2_DSS_RFBI=y CONFIG_OMAP2_DSS_VENC=y CONFIG_OMAP4_DSS_HDMI=y CONFIG_OMAP4_DSS_HDMI_AUDIO=y @@ -3829,13 +4034,16 @@ CONFIG_FB_OMAP2_DEBUG_SUPPORT=y CONFIG_FB_OMAP2_NUM_FBS=3 # -# OMAP2/3 Display Device Drivers +# OMAP Display Device Drivers (new device model) # -CONFIG_PANEL_GENERIC_DPI=m -CONFIG_PANEL_TFP410=m -CONFIG_PANEL_SHARP_LS037V7DW01=m -CONFIG_PANEL_PICODLP=m -CONFIG_PANEL_TAAL=m +CONFIG_DISPLAY_ENCODER_TFP410=m +CONFIG_DISPLAY_ENCODER_TPD12S015=m +CONFIG_DISPLAY_CONNECTOR_DVI=m +CONFIG_DISPLAY_CONNECTOR_HDMI=m +CONFIG_DISPLAY_CONNECTOR_ANALOG_TV=m +CONFIG_DISPLAY_PANEL_DPI=m +CONFIG_DISPLAY_PANEL_DSI_CM=m +CONFIG_DISPLAY_PANEL_SHARP_LS037V7DW01=m # CONFIG_EXYNOS_VIDEO is not set CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_LCD_CLASS_DEVICE=m @@ -3847,11 +4055,13 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_ADP8860 is not set # CONFIG_BACKLIGHT_ADP8870 is not set # CONFIG_BACKLIGHT_88PM860X is not set -# CONFIG_BACKLIGHT_LM3630 is not set +# CONFIG_BACKLIGHT_LM3630A is not set # CONFIG_BACKLIGHT_LM3639 is not set # CONFIG_BACKLIGHT_LP855X is not set # CONFIG_BACKLIGHT_PANDORA is not set -# CONFIG_BACKLIGHT_TLC59108 is not set +# CONFIG_BACKLIGHT_GPIO is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set # # Console display driver support @@ -3860,9 +4070,6 @@ CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set @@ -3874,6 +4081,7 @@ CONFIG_SOUND_OSS_CORE_PRECLAIM=y CONFIG_SND=m CONFIG_SND_TIMER=m CONFIG_SND_PCM=m +CONFIG_SND_DMAENGINE_PCM=m CONFIG_SND_HWDEP=m CONFIG_SND_RAWMIDI=m CONFIG_SND_COMPRESS_OFFLOAD=m @@ -3888,6 +4096,7 @@ CONFIG_SND_SEQUENCER_OSS=y CONFIG_SND_HRTIMER=m CONFIG_SND_SEQ_HRTIMER_DEFAULT=y CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_MAX_CARDS=32 # CONFIG_SND_SUPPORT_OLD_API is not set CONFIG_SND_VERBOSE_PROCFS=y CONFIG_SND_VERBOSE_PRINTK=y @@ -3916,7 +4125,6 @@ CONFIG_SND_MPU401=m CONFIG_SND_PORTMAN2X4=m CONFIG_SND_AC97_POWER_SAVE=y CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0 -CONFIG_SND_TEA575X=m CONFIG_SND_PCI=y CONFIG_SND_AD1889=m CONFIG_SND_ALS300=m @@ -3960,28 +4168,26 @@ CONFIG_SND_ENS1371=m CONFIG_SND_ES1938=m CONFIG_SND_ES1968=m CONFIG_SND_ES1968_INPUT=y -CONFIG_SND_ES1968_RADIO=y CONFIG_SND_FM801=m -CONFIG_SND_FM801_TEA575X_BOOL=y CONFIG_SND_HDA_INTEL=m CONFIG_SND_HDA_PREALLOC_SIZE=64 # CONFIG_SND_HDA_HWDEP is not set # CONFIG_SND_HDA_INPUT_BEEP is not set # CONFIG_SND_HDA_INPUT_JACK is not set # CONFIG_SND_HDA_PATCH_LOADER is not set -CONFIG_SND_HDA_CODEC_REALTEK=y -CONFIG_SND_HDA_CODEC_ANALOG=y -CONFIG_SND_HDA_CODEC_SIGMATEL=y -CONFIG_SND_HDA_CODEC_VIA=y -CONFIG_SND_HDA_CODEC_HDMI=y -CONFIG_SND_HDA_CODEC_CIRRUS=y -CONFIG_SND_HDA_CODEC_CONEXANT=y -CONFIG_SND_HDA_CODEC_CA0110=y -CONFIG_SND_HDA_CODEC_CA0132=y +CONFIG_SND_HDA_CODEC_REALTEK=m +CONFIG_SND_HDA_CODEC_ANALOG=m +CONFIG_SND_HDA_CODEC_SIGMATEL=m +CONFIG_SND_HDA_CODEC_VIA=m +CONFIG_SND_HDA_CODEC_HDMI=m +CONFIG_SND_HDA_CODEC_CIRRUS=m +CONFIG_SND_HDA_CODEC_CONEXANT=m +CONFIG_SND_HDA_CODEC_CA0110=m +CONFIG_SND_HDA_CODEC_CA0132=m # CONFIG_SND_HDA_CODEC_CA0132_DSP is not set -CONFIG_SND_HDA_CODEC_CMEDIA=y -CONFIG_SND_HDA_CODEC_SI3054=y -CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_CODEC_CMEDIA=m +CONFIG_SND_HDA_CODEC_SI3054=m +CONFIG_SND_HDA_GENERIC=m CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 CONFIG_SND_HDSP=m CONFIG_SND_HDSPM=m @@ -4015,22 +4221,32 @@ CONFIG_SND_USB_UA101=m CONFIG_SND_USB_CAIAQ=m CONFIG_SND_USB_CAIAQ_INPUT=y CONFIG_SND_USB_6FIRE=m +CONFIG_SND_USB_HIFACE=m CONFIG_SND_FIREWIRE=y +CONFIG_SND_FIREWIRE_LIB=m +CONFIG_SND_DICE=m # CONFIG_SND_FIREWIRE_SPEAKERS is not set # CONFIG_SND_ISIGHT is not set # CONFIG_SND_SCS1X is not set CONFIG_SND_SOC=m -CONFIG_SND_SOC_DMAENGINE_PCM=y CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y +CONFIG_SND_SOC_ADI=m +CONFIG_SND_SOC_ADI_AXI_I2S=m +CONFIG_SND_SOC_ADI_AXI_SPDIF=m CONFIG_SND_ATMEL_SOC=m +CONFIG_SND_DAVINCI_SOC=m +CONFIG_SND_DAVINCI_SOC_MCASP=m +CONFIG_SND_DAVINCI_SOC_GENERIC_EVM=m +CONFIG_SND_AM33XX_SOC_EVM=m CONFIG_SND_DESIGNWARE_I2S=m CONFIG_SND_SOC_FSL_SSI=m -CONFIG_SND_SOC_FSL_UTILS=m +CONFIG_SND_SOC_FSL_SPDIF=m CONFIG_SND_IMX_SOC=m -CONFIG_SND_SOC_IMX_PCM=m -CONFIG_SND_SOC_IMX_PCM_DMA=y +CONFIG_SND_SOC_IMX_PCM_DMA=m CONFIG_SND_SOC_IMX_AUDMUX=m +CONFIG_SND_SOC_IMX_WM8962=m CONFIG_SND_SOC_IMX_SGTL5000=m +CONFIG_SND_SOC_IMX_SPDIF=m CONFIG_SND_OMAP_SOC=m CONFIG_SND_OMAP_SOC_MCBSP=m CONFIG_SND_OMAP_SOC_HDMI=m @@ -4040,12 +4256,12 @@ CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m CONFIG_SND_OMAP_SOC_OMAP_HDMI=m CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m CONFIG_SND_SOC_I2C_AND_SPI=m -# CONFIG_SND_SOC_ALL_CODECS is not set -CONFIG_SND_SOC_OMAP_HDMI_CODEC=m +CONFIG_SND_SOC_HDMI_CODEC=m CONFIG_SND_SOC_SGTL5000=m CONFIG_SND_SOC_TLV320AIC23=m CONFIG_SND_SOC_TLV320AIC3X=m CONFIG_SND_SOC_TWL4030=m +CONFIG_SND_SOC_WM8962=m CONFIG_SND_SOC_TPA6130A2=m CONFIG_SND_SIMPLE_CARD=m # CONFIG_SOUND_PRIME is not set @@ -4076,8 +4292,10 @@ CONFIG_HID_CYPRESS=y # CONFIG_HID_DRAGONRISE is not set # CONFIG_HID_EMS_FF is not set # CONFIG_HID_ELECOM is not set +# CONFIG_HID_ELO is not set CONFIG_HID_EZKEY=y # CONFIG_HID_HOLTEK is not set +# CONFIG_HID_HUION is not set CONFIG_HID_KEYTOUCH=m CONFIG_HID_KYE=y # CONFIG_HID_UCLOGIC is not set @@ -4109,7 +4327,6 @@ CONFIG_HID_PICOLCD_LCD=y CONFIG_HID_PICOLCD_LEDS=y CONFIG_HID_PICOLCD_CIR=y # CONFIG_HID_PRIMAX is not set -# CONFIG_HID_PS3REMOTE is not set CONFIG_HID_ROCCAT=m CONFIG_HID_SAITEK=m CONFIG_HID_SAMSUNG=m @@ -4125,6 +4342,7 @@ CONFIG_HID_THINGM=m # CONFIG_HID_THRUSTMASTER is not set # CONFIG_HID_WACOM is not set # CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_XINMO is not set # CONFIG_HID_ZEROPLUS is not set CONFIG_HID_ZYDACRON=m CONFIG_HID_SENSOR_HUB=m @@ -4140,9 +4358,8 @@ CONFIG_USB_HIDDEV=y # I2C HID support # CONFIG_I2C_HID=m -CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_ARCH_HAS_EHCI=y -CONFIG_USB_ARCH_HAS_XHCI=y CONFIG_USB_SUPPORT=y CONFIG_USB_COMMON=y CONFIG_USB_ARCH_HAS_HCD=y @@ -4179,6 +4396,8 @@ CONFIG_USB_EHCI_HCD_PLATFORM=y # CONFIG_USB_ISP116X_HCD is not set # CONFIG_USB_ISP1760_HCD is not set CONFIG_USB_ISP1362_HCD=m +CONFIG_USB_FUSBH200_HCD=m +CONFIG_USB_FOTG210_HCD=m # CONFIG_USB_OHCI_HCD is not set CONFIG_USB_UHCI_HCD=y CONFIG_USB_UHCI_SUPPORT_NON_PCI_HC=y @@ -4188,7 +4407,9 @@ CONFIG_USB_SL811_HCD=m CONFIG_USB_SL811_HCD_ISO=y # CONFIG_USB_R8A66597_HCD is not set CONFIG_USB_IMX21_HCD=y +CONFIG_USB_HCD_BCMA=m CONFIG_USB_HCD_SSB=m +# CONFIG_USB_HCD_TEST_MODE is not set # # USB Device Class drivers @@ -4227,9 +4448,36 @@ CONFIG_USB_STORAGE_ENE_UB6250=m # CONFIG_USB_MDC800=m CONFIG_USB_MICROTEK=m +CONFIG_USB_MUSB_HDRC=m +CONFIG_USB_MUSB_HOST=y +CONFIG_USB_MUSB_TUSB6010=m +CONFIG_USB_MUSB_OMAP2PLUS=m +CONFIG_USB_MUSB_AM35X=m +CONFIG_USB_MUSB_DSPS=m +CONFIG_USB_MUSB_UX500=m +CONFIG_USB_MUSB_AM335X_CHILD=m +# CONFIG_USB_UX500_DMA is not set +# CONFIG_USB_INVENTRA_DMA is not set +# CONFIG_USB_TI_CPPI41_DMA is not set +# CONFIG_USB_TUSB_OMAP_DMA is not set +CONFIG_MUSB_PIO_ONLY=y CONFIG_USB_DWC3=m CONFIG_USB_DWC3_HOST=y + +# +# Platform Glue Driver Support +# +CONFIG_USB_DWC3_EXYNOS=m +CONFIG_USB_DWC3_PCI=m +CONFIG_USB_DWC3_KEYSTONE=m + +# +# Debugging features +# # CONFIG_USB_DWC3_DEBUG is not set +CONFIG_USB_DWC2=m +# CONFIG_USB_DWC2_DEBUG is not set +# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set CONFIG_USB_CHIPIDEA=m CONFIG_USB_CHIPIDEA_HOST=y # CONFIG_USB_CHIPIDEA_DEBUG is not set @@ -4240,6 +4488,7 @@ CONFIG_USB_CHIPIDEA_HOST=y CONFIG_USB_USS720=m CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_SIMPLE=m CONFIG_USB_SERIAL_AIRCABLE=m CONFIG_USB_SERIAL_ARK3116=m CONFIG_USB_SERIAL_BELKIN=m @@ -4250,7 +4499,6 @@ CONFIG_USB_SERIAL_CP210X=m CONFIG_USB_SERIAL_CYPRESS_M8=m # CONFIG_USB_SERIAL_EMPEG is not set CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_FUNSOFT=m CONFIG_USB_SERIAL_VISOR=m CONFIG_USB_SERIAL_IPAQ=m CONFIG_USB_SERIAL_IR=m @@ -4269,16 +4517,14 @@ CONFIG_USB_SERIAL_MCT_U232=m CONFIG_USB_SERIAL_MOS7720=m CONFIG_USB_SERIAL_MOS7715_PARPORT=y CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_MOTOROLA=m +CONFIG_USB_SERIAL_MXUPORT=m # CONFIG_USB_SERIAL_NAVMAN is not set CONFIG_USB_SERIAL_PL2303=m CONFIG_USB_SERIAL_OTI6858=m CONFIG_USB_SERIAL_QCAUX=m CONFIG_USB_SERIAL_QUALCOMM=m CONFIG_USB_SERIAL_SPCP8X5=m -# CONFIG_USB_SERIAL_HP4X is not set # CONFIG_USB_SERIAL_SAFE is not set -CONFIG_USB_SERIAL_SIEMENS_MPI=m CONFIG_USB_SERIAL_SIERRAWIRELESS=m # CONFIG_USB_SERIAL_SYMBOL is not set # CONFIG_USB_SERIAL_TI is not set @@ -4288,9 +4534,7 @@ CONFIG_USB_SERIAL_WWAN=m CONFIG_USB_SERIAL_OPTION=m # CONFIG_USB_SERIAL_OMNINET is not set # CONFIG_USB_SERIAL_OPTICON is not set -# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set # CONFIG_USB_SERIAL_XSENS_MT is not set -# CONFIG_USB_SERIAL_ZIO is not set # CONFIG_USB_SERIAL_WISHBONE is not set CONFIG_USB_SERIAL_ZTE=m CONFIG_USB_SERIAL_SSU100=m @@ -4319,6 +4563,7 @@ CONFIG_USB_SISUSBVGA_CON=y # CONFIG_USB_TRANCEVIBRATOR is not set CONFIG_USB_IOWARRIOR=m # CONFIG_USB_TEST is not set +# CONFIG_USB_EHSET_TEST_FIXTURE is not set # CONFIG_USB_ISIGHTFW is not set CONFIG_USB_YUREX=m CONFIG_USB_EZUSB_FX2=m @@ -4328,14 +4573,21 @@ CONFIG_USB_SPEEDTOUCH=m CONFIG_USB_CXACRU=m CONFIG_USB_UEAGLEATM=m CONFIG_USB_XUSBATM=m + +# +# USB Physical Layer drivers +# CONFIG_USB_PHY=y -CONFIG_NOP_USB_XCEIV=m +CONFIG_USB_OTG_FSM=m +CONFIG_NOP_USB_XCEIV=y CONFIG_OMAP_CONTROL_USB=y -CONFIG_OMAP_USB2=y CONFIG_OMAP_USB3=m +CONFIG_AM335X_CONTROL_USB=m +CONFIG_AM335X_PHY_USB=m CONFIG_SAMSUNG_USBPHY=m CONFIG_SAMSUNG_USB2PHY=m CONFIG_SAMSUNG_USB3PHY=m +CONFIG_TWL6030_USB=m CONFIG_USB_GPIO_VBUS=m CONFIG_USB_ISP1301=m CONFIG_USB_MXS_PHY=m @@ -4365,6 +4617,7 @@ CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_IO_ACCESSORS=y # CONFIG_MMC_SDHCI_PCI is not set CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_OF_ARASAN=m CONFIG_MMC_SDHCI_ESDHC_IMX=y CONFIG_MMC_SDHCI_PXAV3=m CONFIG_MMC_SDHCI_PXAV2=m @@ -4376,13 +4629,16 @@ CONFIG_MMC_MVSDIO=y # CONFIG_MMC_CB710 is not set # CONFIG_MMC_VIA_SDMMC is not set CONFIG_MMC_DW=m -# CONFIG_MMC_DW_IDMAC is not set +CONFIG_MMC_DW_IDMAC=y CONFIG_MMC_DW_PLTFM=m CONFIG_MMC_DW_EXYNOS=m +CONFIG_MMC_DW_SOCFPGA=m +CONFIG_MMC_DW_K3=m # CONFIG_MMC_DW_PCI is not set CONFIG_MMC_VUB300=m CONFIG_MMC_USHC=m CONFIG_MMC_WMT=m +CONFIG_MMC_SUNXI=y CONFIG_MEMSTICK=m # CONFIG_MEMSTICK_DEBUG is not set @@ -4391,6 +4647,7 @@ CONFIG_MEMSTICK=m # # CONFIG_MEMSTICK_UNSAFE_RESUME is not set CONFIG_MSPRO_BLOCK=m +CONFIG_MS_BLOCK=m # # MemoryStick Host Controller Drivers @@ -4416,17 +4673,19 @@ CONFIG_LEDS_LP55XX_COMMON=m CONFIG_LEDS_LP5521=m CONFIG_LEDS_LP5523=m CONFIG_LEDS_LP5562=m +CONFIG_LEDS_LP8501=m CONFIG_LEDS_PCA955X=m -CONFIG_LEDS_PCA9633=m +CONFIG_LEDS_PCA963X=m +CONFIG_LEDS_PCA9685=m CONFIG_LEDS_PWM=m CONFIG_LEDS_REGULATOR=m CONFIG_LEDS_BD2802=m CONFIG_LEDS_LT3593=m -CONFIG_LEDS_RENESAS_TPU=y CONFIG_LEDS_TCA6507=m CONFIG_LEDS_LM355x=m CONFIG_LEDS_OT200=m CONFIG_LEDS_BLINKM=m +CONFIG_LEDS_TLC59116=m # # LED Triggers @@ -4474,11 +4733,14 @@ CONFIG_RTC_DRV_DS1307=m CONFIG_RTC_DRV_DS1374=m CONFIG_RTC_DRV_DS1672=m CONFIG_RTC_DRV_DS3232=m +CONFIG_RTC_DRV_HYM8563=m CONFIG_RTC_DRV_MAX6900=m CONFIG_RTC_DRV_RS5C372=m CONFIG_RTC_DRV_ISL1208=m CONFIG_RTC_DRV_ISL12022=m +CONFIG_RTC_DRV_ISL12057=m CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF2127=m CONFIG_RTC_DRV_PCF8523=m CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8583=m @@ -4523,9 +4785,11 @@ CONFIG_RTC_DRV_OMAP=y CONFIG_RTC_DRV_PL030=m CONFIG_RTC_DRV_PL031=m CONFIG_RTC_DRV_VT8500=m +CONFIG_RTC_DRV_SUNXI=y CONFIG_RTC_DRV_MV=m CONFIG_RTC_DRV_MXC=m CONFIG_RTC_DRV_SNVS=m +CONFIG_RTC_DRV_MOXART=m # # HID Sensor RTC drivers @@ -4539,16 +4803,20 @@ CONFIG_DMADEVICES=y # CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y CONFIG_AMBA_PL08X=y +CONFIG_DW_DMAC_CORE=m # CONFIG_DW_DMAC is not set +CONFIG_DW_DMAC_PCI=m CONFIG_MV_XOR=y CONFIG_MX3_IPU=y CONFIG_MX3_IPU_IRQS=4 CONFIG_TIMB_DMA=m +CONFIG_TI_EDMA=y CONFIG_PL330_DMA=y CONFIG_IMX_SDMA=y CONFIG_IMX_DMA=y CONFIG_MXS_DMA=y CONFIG_DMA_OMAP=y +CONFIG_TI_CPPI41=m CONFIG_DMA_ENGINE=y CONFIG_DMA_VIRTUAL_CHANNELS=y CONFIG_DMA_OF=y @@ -4558,16 +4826,17 @@ CONFIG_DMA_OF=y # CONFIG_ASYNC_TX_DMA=y # CONFIG_DMATEST is not set +CONFIG_DMA_ENGINE_RAID=y # CONFIG_AUXDISPLAY is not set CONFIG_UIO=m # CONFIG_UIO_CIF is not set -# CONFIG_UIO_PDRV is not set # CONFIG_UIO_PDRV_GENIRQ is not set # CONFIG_UIO_DMEM_GENIRQ is not set # CONFIG_UIO_AEC is not set # CONFIG_UIO_SERCOS3 is not set # CONFIG_UIO_PCI_GENERIC is not set # CONFIG_UIO_NETX is not set +# CONFIG_UIO_MF624 is not set CONFIG_VIRT_DRIVERS=y # @@ -4589,14 +4858,16 @@ CONFIG_USBIP_HOST=m # CONFIG_PRISM2_USB is not set # CONFIG_ECHO is not set # CONFIG_COMEDI is not set -# CONFIG_ASUS_OLED is not set # CONFIG_PANEL is not set # CONFIG_R8187SE is not set # CONFIG_RTL8192U is not set # CONFIG_RTLLIB is not set # CONFIG_R8712U is not set +# CONFIG_R8188EU is not set +# CONFIG_R8821AE is not set CONFIG_RTS5139=m # CONFIG_RTS5139_DEBUG is not set +# CONFIG_RTS5208 is not set # CONFIG_TRANZPORT is not set # CONFIG_IDE_PHISON is not set # CONFIG_LINE6_USB is not set @@ -4671,10 +4942,7 @@ CONFIG_RTS5139=m # Triggers - standalone # # CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set -# CONFIG_IIO_GPIO_TRIGGER is not set -# CONFIG_IIO_SYSFS_TRIGGER is not set # CONFIG_IIO_SIMPLE_DUMMY is not set -# CONFIG_ZSMALLOC is not set # CONFIG_FB_SM7XX is not set # CONFIG_CRYSTALHD is not set # CONFIG_FB_XGI is not set @@ -4696,7 +4964,7 @@ CONFIG_RTS5139=m # CONFIG_ANDROID is not set # CONFIG_USB_WPAN_HCD is not set # CONFIG_WIMAX_GDM72XX is not set -# CONFIG_CSR_WIFI is not set +CONFIG_LTE_GDM724X=m CONFIG_NET_VENDOR_SILICOM=y # CONFIG_SBYPASS is not set # CONFIG_BPCTL is not set @@ -4705,8 +4973,16 @@ CONFIG_DRM_IMX=m # CONFIG_DRM_IMX_FB_HELPER is not set CONFIG_DRM_IMX_PARALLEL_DISPLAY=m # CONFIG_DRM_IMX_TVE is not set +CONFIG_DRM_IMX_LDB=m +CONFIG_DRM_IMX_IPUV3_CORE=m +CONFIG_DRM_IMX_IPUV3=m +CONFIG_DRM_IMX_HDMI=m # CONFIG_DGRP is not set # CONFIG_FIREWIRE_SERIAL is not set +# CONFIG_LUSTRE_FS is not set +# CONFIG_XILLYBUS is not set +# CONFIG_DGNC is not set +# CONFIG_DGAP is not set CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y @@ -4714,13 +4990,21 @@ CONFIG_COMMON_CLK=y # # Common Clock Framework # -# CONFIG_COMMON_CLK_DEBUG is not set CONFIG_COMMON_CLK_VERSATILE=y CONFIG_COMMON_CLK_SI5351=m +CONFIG_COMMON_CLK_SI570=m CONFIG_COMMON_CLK_AXI_CLKGEN=m -CONFIG_MVEBU_CLK_CORE=y +CONFIG_COMMON_CLK_QCOM=m +CONFIG_MSM_GCC_8660=m +CONFIG_MSM_GCC_8960=m +CONFIG_MSM_MMCC_8960=m +CONFIG_MSM_GCC_8974=m +CONFIG_MSM_MMCC_8974=m +CONFIG_MVEBU_CLK_COMMON=y CONFIG_MVEBU_CLK_CPU=y -CONFIG_MVEBU_CLK_GATING=y +CONFIG_MVEBU_CLK_COREDIV=y +CONFIG_ARMADA_370_CLK=y +CONFIG_ARMADA_XP_CLK=y CONFIG_HWSPINLOCK=y # @@ -4729,13 +5013,22 @@ CONFIG_HWSPINLOCK=y CONFIG_HWSPINLOCK_OMAP=y CONFIG_CLKSRC_OF=y CONFIG_CLKSRC_MMIO=y +CONFIG_DW_APB_TIMER=y +CONFIG_DW_APB_TIMER_OF=y CONFIG_ARMADA_370_XP_TIMER=y CONFIG_SUN4I_TIMER=y +CONFIG_SUN5I_HSTIMER=y CONFIG_VT8500_TIMER=y CONFIG_CADENCE_TTC_TIMER=y CONFIG_ARM_ARCH_TIMER=y +CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y +CONFIG_ARM_GLOBAL_TIMER=y +CONFIG_CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK=y CONFIG_MAILBOX=y CONFIG_PL320_MBOX=y +CONFIG_OMAP_MBOX=y +CONFIG_OMAP2PLUS_MBOX=y +CONFIG_OMAP_MBOX_KFIFO_SIZE=256 # CONFIG_IOMMU_SUPPORT is not set # @@ -4750,6 +5043,7 @@ CONFIG_PL320_MBOX=y # CONFIG_EXTCON is not set CONFIG_MEMORY=y # CONFIG_TI_EMIF is not set +CONFIG_MVEBU_DEVBUS=y CONFIG_IIO=m CONFIG_IIO_BUFFER=y CONFIG_IIO_BUFFER_CB=y @@ -4760,6 +5054,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # # Accelerometers # +# CONFIG_BMA180 is not set # CONFIG_HID_SENSOR_ACCEL_3D is not set # CONFIG_IIO_ST_ACCEL_3AXIS is not set @@ -4768,7 +5063,10 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # # CONFIG_EXYNOS_ADC is not set # CONFIG_MAX1363 is not set +# CONFIG_MCP3422 is not set +# CONFIG_NAU7802 is not set # CONFIG_TI_ADC081C is not set +# CONFIG_TWL6030_GPADC is not set # CONFIG_VIPERBOARD_ADC is not set # @@ -4780,7 +5078,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_HID_SENSOR_IIO_COMMON=m CONFIG_HID_SENSOR_IIO_TRIGGER=m -# CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS is not set # # Digital to analog converters @@ -4810,6 +5107,11 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m # CONFIG_IIO_ST_GYRO_3AXIS is not set # CONFIG_ITG3200 is not set +# +# Humidity sensors +# +# CONFIG_DHT11 is not set + # # Inertial measurement units # @@ -4819,20 +5121,52 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m # Light sensors # # CONFIG_ADJD_S311 is not set -# CONFIG_SENSORS_LM3533 is not set -# CONFIG_SENSORS_TSL2563 is not set -# CONFIG_VCNL4000 is not set +# CONFIG_APDS9300 is not set +# CONFIG_CM32181 is not set +# CONFIG_CM36651 is not set +# CONFIG_GP2AP020A00F is not set # CONFIG_HID_SENSOR_ALS is not set +# CONFIG_SENSORS_LM3533 is not set +# CONFIG_TCS3472 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_TSL4531 is not set +# CONFIG_VCNL4000 is not set # # Magnetometer sensors # # CONFIG_AK8975 is not set +# CONFIG_MAG3110 is not set # CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set # CONFIG_IIO_ST_MAGN_3AXIS is not set + +# +# Inclinometer sensors +# +# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set + +# +# Triggers - standalone +# +# CONFIG_IIO_INTERRUPT_TRIGGER is not set +# CONFIG_IIO_SYSFS_TRIGGER is not set + +# +# Pressure sensors +# +# CONFIG_MPL3115 is not set +# CONFIG_IIO_ST_PRESS is not set + +# +# Temperature sensors +# +# CONFIG_TMP006 is not set # CONFIG_VME_BUS is not set CONFIG_PWM=y +CONFIG_PWM_SYSFS=y CONFIG_PWM_IMX=m +# CONFIG_PWM_PCA9685 is not set +CONFIG_PWM_SUNXI=m # CONFIG_PWM_TIECAP is not set # CONFIG_PWM_TIEHRPWM is not set CONFIG_PWM_TWL=m @@ -4842,7 +5176,20 @@ CONFIG_IRQCHIP=y CONFIG_ARM_GIC=y # CONFIG_IPACK_BUS is not set CONFIG_ARCH_HAS_RESET_CONTROLLER=y -# CONFIG_RESET_CONTROLLER is not set +CONFIG_RESET_CONTROLLER=y +# CONFIG_FMC is not set + +# +# PHY Subsystem +# +CONFIG_GENERIC_PHY=y +# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set +CONFIG_OMAP_USB2=y +CONFIG_TWL4030_USB=m +# CONFIG_PHY_EXYNOS_DP_VIDEO is not set +# CONFIG_BCM_KONA_USB2_PHY is not set +CONFIG_PHY_SUN4I_USB=y +# CONFIG_POWERCAP is not set # # File systems @@ -4878,6 +5225,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set # CONFIG_BTRFS_DEBUG is not set +CONFIG_BTRFS_ASSERT=y # CONFIG_NILFS2_FS is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y @@ -4898,7 +5246,6 @@ CONFIG_QUOTACTL=y CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m -CONFIG_GENERIC_ACL=y # # Caches @@ -4980,10 +5327,13 @@ CONFIG_NFS_V3_ACL=y CONFIG_NFS_V4=m # CONFIG_NFS_SWAP is not set CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y CONFIG_PNFS_FILE_LAYOUT=m CONFIG_PNFS_BLOCK=m CONFIG_PNFS_OBJLAYOUT=m CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="ipfire.org" +CONFIG_NFS_V4_1_MIGRATION=y +CONFIG_NFS_V4_SECURITY_LABEL=y CONFIG_NFS_FSCACHE=y # CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_NFS_USE_KERNEL_DNS=y @@ -4992,6 +5342,7 @@ CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y +CONFIG_NFSD_V4_SECURITY_LABEL=y # CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_LOCKD=m CONFIG_LOCKD_V4=y @@ -5075,33 +5426,65 @@ CONFIG_DLM=m # # Kernel hacking # + +# +# printk and dmesg options +# # CONFIG_PRINTK_TIME is not set CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 +# CONFIG_BOOT_PRINTK_DELAY is not set +CONFIG_DYNAMIC_DEBUG=y + +# +# Compile-time checks and compiler options +# +# CONFIG_DEBUG_INFO is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=2048 -# CONFIG_MAGIC_SYSRQ is not set CONFIG_STRIP_ASM_SYMS=y # CONFIG_READABLE_ASM is not set # CONFIG_UNUSED_SYMBOLS is not set CONFIG_DEBUG_FS=y CONFIG_HEADERS_CHECK=y # CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_MAGIC_SYSRQ is not set CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_SHIRQ=y -CONFIG_LOCKUP_DETECTOR=y -# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set -CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 -# CONFIG_PANIC_ON_OOPS is not set -CONFIG_PANIC_ON_OOPS_VALUE=0 -# CONFIG_DETECT_HUNG_TASK is not set -CONFIG_SCHED_DEBUG=y -CONFIG_SCHEDSTATS=y -CONFIG_TIMER_STATS=y + +# +# Memory Debugging +# +# CONFIG_DEBUG_PAGEALLOC is not set # CONFIG_DEBUG_OBJECTS is not set # CONFIG_SLUB_STATS is not set CONFIG_HAVE_DEBUG_KMEMLEAK=y # CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_VM is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_DEBUG_HIGHMEM is not set +CONFIG_DEBUG_SHIRQ=y + +# +# Debug Lockups and Hangs +# +CONFIG_LOCKUP_DETECTOR=y +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_DETECT_HUNG_TASK is not set +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANIC_TIMEOUT=0 +CONFIG_SCHED_DEBUG=y +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_SPINLOCK is not set @@ -5109,21 +5492,13 @@ CONFIG_HAVE_DEBUG_KMEMLEAK=y # CONFIG_DEBUG_ATOMIC_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set CONFIG_STACKTRACE=y -# CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_DEBUG_KOBJECT is not set -# CONFIG_DEBUG_HIGHMEM is not set CONFIG_DEBUG_BUGVERBOSE=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_VM is not set # CONFIG_DEBUG_WRITECOUNT is not set -CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DEBUG_LIST=y -# CONFIG_TEST_LIST_SORT is not set # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_DEBUG_CREDENTIALS is not set -CONFIG_FRAME_POINTER=y -# CONFIG_BOOT_PRINTK_DELAY is not set # # RCU Debugging @@ -5133,14 +5508,9 @@ CONFIG_FRAME_POINTER=y CONFIG_RCU_CPU_STALL_TIMEOUT=21 # CONFIG_RCU_CPU_STALL_INFO is not set # CONFIG_RCU_TRACE is not set -# CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -# CONFIG_DEBUG_PER_CPU_MAPS is not set -# CONFIG_LKDTM is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set # CONFIG_FAULT_INJECTION is not set -# CONFIG_DEBUG_PAGEALLOC is not set CONFIG_NOP_TRACER=y CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y @@ -5177,18 +5547,28 @@ CONFIG_FTRACE_MCOUNT_RECORD=y # CONFIG_FTRACE_STARTUP_TEST is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set + +# +# Runtime Testing +# +# CONFIG_LKDTM is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_BACKTRACE_SELF_TEST is not set CONFIG_RBTREE_TEST=m # CONFIG_INTERVAL_TREE_TEST is not set -# CONFIG_BUILD_DOCSRC is not set -CONFIG_DYNAMIC_DEBUG=y -# CONFIG_DMA_API_DEBUG is not set +# CONFIG_PERCPU_TEST is not set # CONFIG_ATOMIC64_SELFTEST is not set CONFIG_ASYNC_RAID6_TEST=m +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_BUILD_DOCSRC is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_TEST_MODULE is not set +# CONFIG_TEST_USER_COPY is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set -# CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_TEST_KSTRTOX is not set +# CONFIG_ARM_PTDUMP is not set CONFIG_STRICT_DEVMEM=y CONFIG_ARM_UNWIND=y CONFIG_OLD_MCOUNT=y @@ -5196,9 +5576,12 @@ CONFIG_OLD_MCOUNT=y # CONFIG_DEBUG_LL is not set CONFIG_DEBUG_IMX_UART_PORT=1 CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" +# CONFIG_DEBUG_UART_PL01X is not set +# CONFIG_DEBUG_UART_8250 is not set CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" CONFIG_OC_ETM=y # CONFIG_PID_IN_CONTEXTIDR is not set +CONFIG_DEBUG_SET_MODULE_RONX=y # # Security options @@ -5265,14 +5648,16 @@ CONFIG_PAX_USERCOPY=y # Memory Protections # # CONFIG_GRKERNSEC_KMEM is not set -CONFIG_GRKERNSEC_JIT_HARDEN=y # CONFIG_GRKERNSEC_PERF_HARDEN is not set CONFIG_GRKERNSEC_RAND_THREADSTACK=y CONFIG_GRKERNSEC_PROC_MEMMAP=y CONFIG_GRKERNSEC_BRUTE=y CONFIG_GRKERNSEC_MODHARDEN=y CONFIG_GRKERNSEC_HIDESYM=y +CONFIG_GRKERNSEC_RANDSTRUCT=y +CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y CONFIG_GRKERNSEC_KERN_LOCKOUT=y +CONFIG_GRKERNSEC_OLD_ARM_USERLAND=y # # Role Based Access Control Options @@ -5331,12 +5716,12 @@ CONFIG_GRKERNSEC_DMESG=y CONFIG_GRKERNSEC_HARDEN_PTRACE=y CONFIG_GRKERNSEC_PTRACE_READEXEC=y CONFIG_GRKERNSEC_SETXID=y +CONFIG_GRKERNSEC_HARDEN_IPC=y # CONFIG_GRKERNSEC_TPE is not set # # Network Protections # -CONFIG_GRKERNSEC_RANDNET=y CONFIG_GRKERNSEC_BLACKHOLE=y CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y # CONFIG_GRKERNSEC_SOCKET is not set @@ -5357,6 +5742,8 @@ CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y CONFIG_GRKERNSEC_FLOODTIME=10 CONFIG_GRKERNSEC_FLOODBURST=6 CONFIG_KEYS=y +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_BIG_KEYS is not set # CONFIG_ENCRYPTED_KEYS is not set CONFIG_KEYS_DEBUG_PROC_KEYS=y CONFIG_SECURITY_DMESG_RESTRICT=y @@ -5408,6 +5795,7 @@ CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_CRYPTD=y CONFIG_CRYPTO_AUTHENC=m CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_ABLK_HELPER=m # # Authenticated Encryption with Associated Data @@ -5440,6 +5828,7 @@ CONFIG_CRYPTO_VMAC=m # CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32=y +CONFIG_CRYPTO_CRCT10DIF=y CONFIG_CRYPTO_GHASH=m CONFIG_CRYPTO_MD4=m CONFIG_CRYPTO_MD5=y @@ -5451,7 +5840,7 @@ CONFIG_CRYPTO_RMD320=m CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA1_ARM=y CONFIG_CRYPTO_SHA256=y -CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_SHA512=y CONFIG_CRYPTO_TGR192=m CONFIG_CRYPTO_WP512=m @@ -5460,6 +5849,7 @@ CONFIG_CRYPTO_WP512=m # CONFIG_CRYPTO_AES=y CONFIG_CRYPTO_AES_ARM=m +CONFIG_CRYPTO_AES_ARM_BS=m CONFIG_CRYPTO_ANUBIS=m CONFIG_CRYPTO_ARC4=m CONFIG_CRYPTO_BLOWFISH=m @@ -5468,7 +5858,7 @@ CONFIG_CRYPTO_CAMELLIA=m CONFIG_CRYPTO_CAST_COMMON=m CONFIG_CRYPTO_CAST5=m CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_FCRYPT=m CONFIG_CRYPTO_KHAZAD=m CONFIG_CRYPTO_SALSA20=m @@ -5484,6 +5874,8 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m CONFIG_CRYPTO_DEFLATE=m CONFIG_CRYPTO_ZLIB=m CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m # # Random Number Generation @@ -5492,12 +5884,15 @@ CONFIG_CRYPTO_ANSI_CPRNG=m CONFIG_CRYPTO_USER_API=y CONFIG_CRYPTO_USER_API_HASH=y CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_CRYPTO_HASH_INFO=y CONFIG_CRYPTO_HW=y CONFIG_CRYPTO_DEV_MV_CESA=m CONFIG_CRYPTO_DEV_HIFN_795X=m CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y CONFIG_CRYPTO_DEV_OMAP_SHAM=y CONFIG_CRYPTO_DEV_OMAP_AES=y +CONFIG_CRYPTO_DEV_SAHARA=y +CONFIG_CRYPTO_DEV_SUNXI_SS=y CONFIG_ASYMMETRIC_KEY_TYPE=m CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m CONFIG_PUBLIC_KEY_ALGO_RSA=m @@ -5512,9 +5907,11 @@ CONFIG_BITREVERSE=y CONFIG_RATIONAL=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IO=y CONFIG_STMP_DEVICE=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y CONFIG_CRC_CCITT=y CONFIG_CRC16=y CONFIG_CRC_T10DIF=y @@ -5529,10 +5926,14 @@ CONFIG_CRC7=m CONFIG_LIBCRC32C=m CONFIG_CRC8=m CONFIG_AUDIT_GENERIC=y +# CONFIG_RANDOM32_SELFTEST is not set CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y CONFIG_XZ_DEC=y CONFIG_XZ_DEC_X86=y CONFIG_XZ_DEC_POWERPC=y @@ -5547,13 +5948,14 @@ CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_LZMA=y CONFIG_DECOMPRESS_XZ=y CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_BCH=m -CONFIG_BCH_CONST_PARAMS=y CONFIG_TEXTSEARCH=y CONFIG_TEXTSEARCH_KMP=m CONFIG_TEXTSEARCH_BM=m CONFIG_TEXTSEARCH_FSM=m +CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_DMA=y CONFIG_CHECK_SIGNATURE=y @@ -5567,9 +5969,8 @@ CONFIG_CORDIC=m CONFIG_DDR=y CONFIG_MPILIB=m CONFIG_OID_REGISTRY=m +CONFIG_FONT_SUPPORT=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y CONFIG_VIRTUALIZATION=y -CONFIG_KVM_ARM_MAX_VCPUS=0 - -# -# Virtio drivers -# diff --git a/config/kernel/kernel.config.armv5tel-ipfire-rpi b/config/kernel/kernel.config.armv5tel-ipfire-rpi index 2c709ccfc..269c633e7 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-rpi +++ b/config/kernel/kernel.config.armv5tel-ipfire-rpi @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 3.10.38 Kernel Configuration +# Linux/arm 3.14.22 Kernel Configuration # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -16,7 +16,7 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_NEED_DMA_MAP_STATE=y CONFIG_FIQ=y CONFIG_VECTORS_BASE=0xffff0000 -CONFIG_ARM_PATCH_PHYS_VIRT=y +# CONFIG_ARM_PATCH_PHYS_VIRT is not set CONFIG_NEED_MACH_GPIO_H=y CONFIG_NEED_MACH_IO_H=y CONFIG_NEED_MACH_MEMORY_H=y @@ -31,37 +31,38 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" +# CONFIG_COMPILE_TEST is not set CONFIG_LOCALVERSION="" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_LZMA=y CONFIG_HAVE_KERNEL_XZ=y CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_LZ4=y CONFIG_KERNEL_GZIP=y # CONFIG_KERNEL_LZMA is not set # CONFIG_KERNEL_XZ is not set # CONFIG_KERNEL_LZO is not set +# CONFIG_KERNEL_LZ4 is not set CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SWAP=y CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE_SYSCTL=y -# CONFIG_FHANDLE is not set +CONFIG_FHANDLE=y CONFIG_AUDIT=y # CONFIG_AUDITSYSCALL is not set -# CONFIG_AUDIT_LOGINUID_IMMUTABLE is not set -CONFIG_HAVE_GENERIC_HARDIRQS=y # # IRQ subsystem # -CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_CHIP=y CONFIG_IRQ_DOMAIN=y +# CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_IRQ_FORCED_THREADING=y CONFIG_KTIME_SCALAR=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y @@ -80,6 +81,7 @@ CONFIG_HIGH_RES_TIMERS=y # CPU/Task time and stats accounting # CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set # CONFIG_IRQ_TIME_ACCOUNTING is not set CONFIG_BSD_PROCESS_ACCT=y # CONFIG_BSD_PROCESS_ACCT_V3 is not set @@ -96,7 +98,8 @@ CONFIG_TINY_RCU=y # CONFIG_RCU_STALL_COMMON is not set # CONFIG_TREE_RCU_TRACE is not set # CONFIG_IKCONFIG is not set -CONFIG_LOG_BUF_SHIFT=19 +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_GENERIC_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_FREEZER=y @@ -111,16 +114,17 @@ CONFIG_CGROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y # CONFIG_CFS_BANDWIDTH is not set CONFIG_RT_GROUP_SCHED=y -# CONFIG_BLK_CGROUP is not set +CONFIG_BLK_CGROUP=y +# CONFIG_DEBUG_BLK_CGROUP is not set CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y -# CONFIG_PID_NS is not set -# CONFIG_NET_NS is not set -# CONFIG_SCHED_AUTOGROUP is not set -CONFIG_SYSFS_DEPRECATED=y -CONFIG_SYSFS_DEPRECATED_V2=y -# CONFIG_RELAY is not set +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_SCHED_AUTOGROUP=y +# CONFIG_SYSFS_DEPRECATED is not set +CONFIG_RELAY=y CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="" CONFIG_RD_GZIP=y @@ -128,16 +132,16 @@ CONFIG_RD_BZIP2=y CONFIG_RD_LZMA=y CONFIG_RD_XZ=y CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_HAVE_UID16=y -CONFIG_HOTPLUG=y -# CONFIG_EXPERT is not set +CONFIG_EXPERT=y CONFIG_UID16=y # CONFIG_SYSCTL_SYSCALL is not set CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_ALL is not set +CONFIG_KALLSYMS_ALL=y CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y @@ -149,7 +153,7 @@ CONFIG_TIMERFD=y CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_AIO=y -# CONFIG_EMBEDDED is not set +CONFIG_EMBEDDED=y CONFIG_HAVE_PERF_EVENTS=y CONFIG_PERF_USE_VMALLOC=y @@ -163,11 +167,15 @@ CONFIG_SLUB_DEBUG=y # CONFIG_COMPAT_BRK is not set # CONFIG_SLAB is not set CONFIG_SLUB=y +# CONFIG_SLOB is not set +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set CONFIG_JUMP_LABEL=y # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_ARCH_USE_BUILTIN_BSWAP=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y @@ -179,12 +187,21 @@ CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_CLK=y CONFIG_HAVE_DMA_API_DEBUG=y CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_HAVE_ARCH_JUMP_LABEL=y CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y +CONFIG_HAVE_CC_STACKPROTECTOR=y +CONFIG_CC_STACKPROTECTOR=y +# CONFIG_CC_STACKPROTECTOR_NONE is not set +CONFIG_CC_STACKPROTECTOR_REGULAR=y +# CONFIG_CC_STACKPROTECTOR_STRONG is not set CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_REL=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND3=y @@ -193,6 +210,7 @@ CONFIG_OLD_SIGACTION=y # # GCOV-based kernel profiling # +# CONFIG_GCOV_KERNEL is not set CONFIG_HAVE_GENERIC_DMA_COHERENT=y CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y @@ -200,28 +218,31 @@ CONFIG_BASE_SMALL=0 CONFIG_MODULES=y # CONFIG_MODULE_FORCE_LOAD is not set CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_MODVERSIONS is not set -# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODVERSIONS=y +CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_MODULE_SIG is not set CONFIG_STOP_MACHINE=y CONFIG_BLOCK=y CONFIG_LBDAF=y CONFIG_BLK_DEV_BSG=y CONFIG_BLK_DEV_BSGLIB=y -# CONFIG_BLK_DEV_INTEGRITY is not set +CONFIG_BLK_DEV_INTEGRITY=y +CONFIG_BLK_DEV_THROTTLING=y +# CONFIG_BLK_CMDLINE_PARSER is not set # # Partition Types # CONFIG_PARTITION_ADVANCED=y # CONFIG_ACORN_PARTITION is not set +# CONFIG_AIX_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=y -CONFIG_BSD_DISKLABEL=y +# CONFIG_BSD_DISKLABEL is not set # CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set @@ -233,6 +254,7 @@ CONFIG_LDM_PARTITION=y # CONFIG_KARMA_PARTITION is not set CONFIG_EFI_PARTITION=y # CONFIG_SYSV68_PARTITION is not set +# CONFIG_CMDLINE_PARTITION is not set # # IO Schedulers @@ -240,16 +262,17 @@ CONFIG_EFI_PARTITION=y CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_DEADLINE=y CONFIG_IOSCHED_CFQ=y +CONFIG_CFQ_GROUP_IOSCHED=y # CONFIG_DEFAULT_DEADLINE is not set CONFIG_DEFAULT_CFQ=y # CONFIG_DEFAULT_NOOP is not set CONFIG_DEFAULT_IOSCHED="cfq" -CONFIG_ASN1=m CONFIG_INLINE_SPIN_UNLOCK_IRQ=y CONFIG_INLINE_READ_UNLOCK=y CONFIG_INLINE_READ_UNLOCK_IRQ=y CONFIG_INLINE_WRITE_UNLOCK=y CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_FREEZER=y # @@ -281,8 +304,8 @@ CONFIG_ARCH_BCM2708=y # CONFIG_ARCH_W90X900 is not set # CONFIG_ARCH_LPC32XX is not set # CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_MSM is not set -# CONFIG_ARCH_SHMOBILE is not set +# CONFIG_ARCH_MSM_NODT is not set +# CONFIG_ARCH_SHMOBILE_LEGACY is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_S3C24XX is not set @@ -291,12 +314,9 @@ CONFIG_ARCH_BCM2708=y # CONFIG_ARCH_S5PC100 is not set # CONFIG_ARCH_S5PV210 is not set # CONFIG_ARCH_EXYNOS is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_U300 is not set # CONFIG_ARCH_DAVINCI is not set # CONFIG_ARCH_OMAP1 is not set -CONFIG_GPIO_PCA953X=m -CONFIG_KEYBOARD_GPIO_POLLED=m +# CONFIG_GPIO_PCA953X is not set # CONFIG_PLAT_SPEAR is not set # @@ -307,7 +327,6 @@ CONFIG_BCM2708_GPIO=y CONFIG_BCM2708_VCMEM=y # CONFIG_BCM2708_NOL2CACHE is not set CONFIG_BCM2708_SPIDEV=y -CONFIG_BCM2708_DMAER=m # # Processor Type @@ -359,6 +378,13 @@ CONFIG_ARCH_NR_GPIO=0 CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_VOLUNTARY is not set # CONFIG_PREEMPT is not set +CONFIG_HZ_FIXED=0 +CONFIG_HZ_100=y +# CONFIG_HZ_200 is not set +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +# CONFIG_HZ_500 is not set +# CONFIG_HZ_1000 is not set CONFIG_HZ=100 CONFIG_SCHED_HRTICK=y CONFIG_AEABI=y @@ -368,14 +394,16 @@ CONFIG_AEABI=y CONFIG_HAVE_ARCH_PFN_VALID=y # CONFIG_HIGHMEM is not set CONFIG_HW_PERF_EVENTS=y +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_HAVE_MEMBLOCK=y +CONFIG_NO_BOOTMEM=y CONFIG_MEMORY_ISOLATION=y # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4 -# CONFIG_COMPACTION is not set +CONFIG_COMPACTION=y CONFIG_MIGRATION=y # CONFIG_PHYS_ADDR_T_64BIT is not set CONFIG_ZONE_DMA_FLAG=0 @@ -385,27 +413,32 @@ CONFIG_CROSS_MEMORY_ATTACH=y CONFIG_NEED_PER_CPU_KM=y CONFIG_CLEANCACHE=y CONFIG_FRONTSWAP=y +CONFIG_CMA=y +# CONFIG_CMA_DEBUG is not set +# CONFIG_ZBUD is not set +# CONFIG_ZSWAP is not set +# CONFIG_ZSMALLOC is not set CONFIG_FORCE_MAX_ZONEORDER=11 CONFIG_ALIGNMENT_TRAP=y CONFIG_SECCOMP=y -CONFIG_CC_STACKPROTECTOR=y +CONFIG_SWIOTLB=y +CONFIG_IOMMU_HELPER=y # # Boot options # -CONFIG_USE_OF=y +# CONFIG_USE_OF is not set CONFIG_ATAGS=y # CONFIG_DEPRECATED_PARAM_STRUCT is not set CONFIG_ZBOOT_ROM_TEXT=0x0 CONFIG_ZBOOT_ROM_BSS=0x0 -# CONFIG_ARM_APPENDED_DTB is not set -CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 root=/dev/mmcblk0p3 rootwait" +CONFIG_CMDLINE="console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" CONFIG_CMDLINE_FROM_BOOTLOADER=y # CONFIG_CMDLINE_EXTEND is not set # CONFIG_CMDLINE_FORCE is not set # CONFIG_XIP_KERNEL is not set # CONFIG_KEXEC is not set -# CONFIG_CRASH_DUMP is not set +CONFIG_CRASH_DUMP=y # CONFIG_AUTO_ZRELADDR is not set # @@ -416,13 +449,13 @@ CONFIG_CMDLINE_FROM_BOOTLOADER=y # CPU Frequency scaling # CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_TABLE=y CONFIG_CPU_FREQ_GOV_COMMON=y CONFIG_CPU_FREQ_STAT=m -# CONFIG_CPU_FREQ_STAT_DETAILS is not set +CONFIG_CPU_FREQ_STAT_DETAILS=y # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set -CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_POWERSAVE=y @@ -433,15 +466,20 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y # # ARM CPU frequency scaling drivers # -# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set -# CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set -# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set CONFIG_ARM_BCM2835_CPUFREQ=y + +# +# CPU Idle +# CONFIG_CPU_IDLE=y # CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set CONFIG_CPU_IDLE_GOV_LADDER=y CONFIG_CPU_IDLE_GOV_MENU=y + +# +# ARM CPU Idle Drivers +# # CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set # @@ -458,10 +496,10 @@ CONFIG_VFP=y # CONFIG_BINFMT_ELF=y CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y -# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y CONFIG_BINFMT_SCRIPT=y # CONFIG_HAVE_AOUT is not set -# CONFIG_BINFMT_MISC is not set +CONFIG_BINFMT_MISC=y CONFIG_COREDUMP=y # @@ -472,11 +510,12 @@ CONFIG_SUSPEND_FREEZER=y CONFIG_PM_SLEEP=y # CONFIG_PM_AUTOSLEEP is not set # CONFIG_PM_WAKELOCKS is not set -CONFIG_PM_RUNTIME=y +# CONFIG_PM_RUNTIME is not set CONFIG_PM=y # CONFIG_PM_DEBUG is not set # CONFIG_APM_EMULATION is not set CONFIG_PM_CLK=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_CPU_PM=y CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_ARM_CPU_SUSPEND=y @@ -486,13 +525,13 @@ CONFIG_NET=y # Networking options # CONFIG_PACKET=y -# CONFIG_PACKET_DIAG is not set +CONFIG_PACKET_DIAG=y CONFIG_UNIX=y CONFIG_UNIX_DIAG=m CONFIG_XFRM=y -CONFIG_XFRM_ALGO=m -CONFIG_XFRM_USER=m -# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_ALGO=y +CONFIG_XFRM_USER=y +CONFIG_XFRM_SUB_POLICY=y CONFIG_XFRM_MIGRATE=y CONFIG_XFRM_STATISTICS=y CONFIG_XFRM_IPCOMP=m @@ -513,10 +552,9 @@ CONFIG_NET_IP_TUNNEL=m CONFIG_NET_IPGRE=m CONFIG_NET_IPGRE_BROADCAST=y CONFIG_IP_MROUTE=y -# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set +CONFIG_IP_MROUTE_MULTIPLE_TABLES=y CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y -CONFIG_ARPD=y CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=m CONFIG_INET_AH=m @@ -524,16 +562,16 @@ CONFIG_INET_ESP=m CONFIG_INET_IPCOMP=m CONFIG_INET_XFRM_TUNNEL=m CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -CONFIG_INET_XFRM_MODE_BEET=y +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m CONFIG_INET_LRO=y CONFIG_INET_DIAG=m CONFIG_INET_TCP_DIAG=m CONFIG_INET_UDP_DIAG=m CONFIG_TCP_CONG_ADVANCED=y CONFIG_TCP_CONG_BIC=m -CONFIG_TCP_CONG_CUBIC=m +CONFIG_TCP_CONG_CUBIC=y CONFIG_TCP_CONG_WESTWOOD=m CONFIG_TCP_CONG_HTCP=m CONFIG_TCP_CONG_HSTCP=m @@ -544,13 +582,14 @@ CONFIG_TCP_CONG_LP=m CONFIG_TCP_CONG_VENO=m CONFIG_TCP_CONG_YEAH=m CONFIG_TCP_CONG_ILLINOIS=m -CONFIG_DEFAULT_RENO=y -CONFIG_DEFAULT_TCP_CONG="reno" -# CONFIG_TCP_MD5SIG is not set +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +CONFIG_TCP_MD5SIG=y CONFIG_IPV6=y -# CONFIG_IPV6_PRIVACY is not set -# CONFIG_IPV6_ROUTER_PREF is not set -# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y CONFIG_INET6_AH=m CONFIG_INET6_ESP=m CONFIG_INET6_IPCOMP=m @@ -561,17 +600,20 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m CONFIG_INET6_XFRM_MODE_TUNNEL=m CONFIG_INET6_XFRM_MODE_BEET=m CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_VTI=m CONFIG_IPV6_SIT=m -# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_SIT_6RD=y CONFIG_IPV6_NDISC_NODETYPE=y CONFIG_IPV6_TUNNEL=m CONFIG_IPV6_GRE=m CONFIG_IPV6_MULTIPLE_TABLES=y -# CONFIG_IPV6_SUBTREES is not set -# CONFIG_IPV6_MROUTE is not set +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +CONFIG_IPV6_PIMSM_V2=y # CONFIG_NETLABEL is not set -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NETWORK_PHY_TIMESTAMPING=y +CONFIG_NETWORK_SECMARK=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set CONFIG_NETFILTER_ADVANCED=y @@ -586,10 +628,11 @@ CONFIG_NETFILTER_NETLINK_QUEUE=m CONFIG_NETFILTER_NETLINK_LOG=m CONFIG_NF_CONNTRACK=y CONFIG_NF_CONNTRACK_MARK=y -# CONFIG_NF_CONNTRACK_ZONES is not set +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_ZONES=y CONFIG_NF_CONNTRACK_PROCFS=y CONFIG_NF_CONNTRACK_EVENTS=y -# CONFIG_NF_CONNTRACK_TIMEOUT is not set +CONFIG_NF_CONNTRACK_TIMEOUT=y CONFIG_NF_CONNTRACK_TIMESTAMP=y CONFIG_NF_CONNTRACK_LABELS=y CONFIG_NF_CT_PROTO_DCCP=m @@ -621,14 +664,30 @@ CONFIG_NF_NAT_FTP=m CONFIG_NF_NAT_IRC=m CONFIG_NF_NAT_SIP=m CONFIG_NF_NAT_TFTP=m -CONFIG_NETFILTER_TPROXY=m -CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_SYNPROXY=m +CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_INET=m +CONFIG_NFT_EXTHDR=m +CONFIG_NFT_META=m +CONFIG_NFT_CT=m +CONFIG_NFT_RBTREE=m +CONFIG_NFT_HASH=m +CONFIG_NFT_COUNTER=m +CONFIG_NFT_LOG=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_NAT=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m +CONFIG_NFT_COMPAT=m +CONFIG_NETFILTER_XTABLES=y # # Xtables combined modules # CONFIG_NETFILTER_XT_MARK=m CONFIG_NETFILTER_XT_CONNMARK=m +CONFIG_NETFILTER_XT_SET=m # # Xtables targets @@ -637,6 +696,7 @@ CONFIG_NETFILTER_XT_TARGET_AUDIT=m CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m CONFIG_NETFILTER_XT_TARGET_CT=m CONFIG_NETFILTER_XT_TARGET_DSCP=m CONFIG_NETFILTER_XT_TARGET_HL=m @@ -655,6 +715,7 @@ CONFIG_NETFILTER_XT_TARGET_REDIRECT=m CONFIG_NETFILTER_XT_TARGET_TEE=m CONFIG_NETFILTER_XT_TARGET_TPROXY=m CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETFILTER_XT_TARGET_SECMARK=m CONFIG_NETFILTER_XT_TARGET_TCPMSS=m CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m @@ -663,6 +724,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m # CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m CONFIG_NETFILTER_XT_MATCH_CLUSTER=m CONFIG_NETFILTER_XT_MATCH_COMMENT=m CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m @@ -679,8 +741,10 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m CONFIG_NETFILTER_XT_MATCH_HELPER=m CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m CONFIG_NETFILTER_XT_MATCH_IPRANGE=m CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_L2TP=m CONFIG_NETFILTER_XT_MATCH_LAYER7=m # CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set CONFIG_NETFILTER_XT_MATCH_LENGTH=m @@ -706,7 +770,21 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m CONFIG_NETFILTER_XT_MATCH_TCPMSS=m CONFIG_NETFILTER_XT_MATCH_TIME=m CONFIG_NETFILTER_XT_MATCH_U32=m -# CONFIG_IP_SET is not set +CONFIG_IP_SET=m +CONFIG_IP_SET_MAX=256 +CONFIG_IP_SET_BITMAP_IP=m +CONFIG_IP_SET_BITMAP_IPMAC=m +CONFIG_IP_SET_BITMAP_PORT=m +CONFIG_IP_SET_HASH_IP=m +CONFIG_IP_SET_HASH_IPPORT=m +CONFIG_IP_SET_HASH_IPPORTIP=m +CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_NETPORTNET=m +CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETNET=m +CONFIG_IP_SET_HASH_NETPORT=m +CONFIG_IP_SET_HASH_NETIFACE=m +CONFIG_IP_SET_LIST_SET=m CONFIG_IP_VS=m CONFIG_IP_VS_IPV6=y # CONFIG_IP_VS_DEBUG is not set @@ -751,16 +829,22 @@ CONFIG_IP_VS_PE_SIP=m # # IP: Netfilter Configuration # -CONFIG_NF_DEFRAG_IPV4=m -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -CONFIG_IP_NF_IPTABLES=m +CONFIG_NF_DEFRAG_IPV4=y +CONFIG_NF_CONNTRACK_IPV4=y +# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set +CONFIG_NF_TABLES_IPV4=m +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NF_TABLES_ARP=m +CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_AH=m CONFIG_IP_NF_MATCH_ECN=m CONFIG_IP_NF_MATCH_RPFILTER=m CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_FILTER=m CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m CONFIG_IP_NF_TARGET_ULOG=m CONFIG_NF_NAT_IPV4=m CONFIG_IP_NF_TARGET_MASQUERADE=m @@ -784,9 +868,13 @@ CONFIG_IP_NF_MATCH_IPP2P=m # # IPv6: Netfilter Configuration # -CONFIG_NF_DEFRAG_IPV6=m -CONFIG_NF_CONNTRACK_IPV6=m -CONFIG_IP6_NF_IPTABLES=m +CONFIG_NF_DEFRAG_IPV6=y +CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_NF_TABLES_IPV6=m +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_REJECT_IPV6=m +CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m CONFIG_IP6_NF_MATCH_FRAG=m @@ -799,10 +887,14 @@ CONFIG_IP6_NF_MATCH_RT=m CONFIG_IP6_NF_TARGET_HL=m CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_RAW=m CONFIG_IP6_NF_SECURITY=m -# CONFIG_NF_NAT_IPV6 is not set +CONFIG_NF_NAT_IPV6=m +CONFIG_IP6_NF_TARGET_MASQUERADE=m +CONFIG_IP6_NF_TARGET_NPT=m +CONFIG_NF_TABLES_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m @@ -826,43 +918,45 @@ CONFIG_BRIDGE_EBT_LOG=m CONFIG_BRIDGE_EBT_ULOG=m CONFIG_BRIDGE_EBT_NFLOG=m # CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set +CONFIG_IP_SCTP=m +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set +CONFIG_SCTP_COOKIE_HMAC_MD5=y +CONFIG_SCTP_COOKIE_HMAC_SHA1=y # CONFIG_RDS is not set # CONFIG_TIPC is not set CONFIG_ATM=m CONFIG_ATM_CLIP=m -CONFIG_ATM_CLIP_NO_ICMP=y +# CONFIG_ATM_CLIP_NO_ICMP is not set # CONFIG_ATM_LANE is not set CONFIG_ATM_BR2684=m # CONFIG_ATM_BR2684_IPFILTER is not set CONFIG_L2TP=m +# CONFIG_L2TP_DEBUGFS is not set CONFIG_L2TP_V3=y CONFIG_L2TP_IP=m CONFIG_L2TP_ETH=m -CONFIG_STP=m +CONFIG_STP=y CONFIG_GARP=m -CONFIG_BRIDGE=m +CONFIG_BRIDGE=y CONFIG_BRIDGE_IGMP_SNOOPING=y CONFIG_BRIDGE_VLAN_FILTERING=y CONFIG_HAVE_NET_DSA=y -CONFIG_NET_DSA=y -CONFIG_NET_DSA_TAG_DSA=y -CONFIG_NET_DSA_TAG_EDSA=y -CONFIG_NET_DSA_TAG_TRAILER=y CONFIG_VLAN_8021Q=m CONFIG_VLAN_8021Q_GVRP=y # CONFIG_VLAN_8021Q_MVRP is not set # CONFIG_DECNET is not set -CONFIG_LLC=m +CONFIG_LLC=y # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_PHONET is not set -CONFIG_IEEE802154=m -CONFIG_IEEE802154_6LOWPAN=m -CONFIG_MAC802154=m +# CONFIG_IEEE802154 is not set +CONFIG_6LOWPAN_IPHC=m CONFIG_NET_SCHED=y # @@ -888,6 +982,8 @@ CONFIG_NET_SCH_CHOKE=m CONFIG_NET_SCH_QFQ=m CONFIG_NET_SCH_CODEL=m CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_HHF=m CONFIG_NET_SCH_PIE=m CONFIG_NET_SCH_INGRESS=m CONFIG_NET_SCH_PLUG=m @@ -907,6 +1003,7 @@ CONFIG_NET_CLS_RSVP=m CONFIG_NET_CLS_RSVP6=m CONFIG_NET_CLS_FLOW=m CONFIG_NET_CLS_CGROUP=m +CONFIG_NET_CLS_BPF=m CONFIG_NET_EMATCH=y CONFIG_NET_EMATCH_STACK=32 CONFIG_NET_EMATCH_CMP=m @@ -914,6 +1011,7 @@ CONFIG_NET_EMATCH_NBYTE=m CONFIG_NET_EMATCH_U32=m CONFIG_NET_EMATCH_META=m CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_EMATCH_IPSET=m CONFIG_NET_CLS_ACT=y CONFIG_NET_ACT_POLICE=m CONFIG_NET_ACT_GACT=m @@ -935,10 +1033,15 @@ CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m -# CONFIG_VSOCKETS is not set -# CONFIG_NETLINK_MMAP is not set +CONFIG_OPENVSWITCH_GRE=y +CONFIG_VSOCKETS=m +CONFIG_NETLINK_MMAP=y CONFIG_NETLINK_DIAG=m -CONFIG_NETPRIO_CGROUP=m +CONFIG_NET_MPLS_GSO=m +CONFIG_HSR=m +CONFIG_CGROUP_NET_PRIO=m +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y CONFIG_BPF_JIT=y @@ -976,9 +1079,8 @@ CONFIG_BT_HCIVHCI=m CONFIG_BT_MRVL=m CONFIG_BT_MRVL_SDIO=m CONFIG_BT_ATH3K=m -CONFIG_AF_RXRPC=m -# CONFIG_AF_RXRPC_DEBUG is not set -CONFIG_RXKAD=m +CONFIG_BT_WILINK=m +# CONFIG_AF_RXRPC is not set CONFIG_FIB_RULES=y CONFIG_WIRELESS=y CONFIG_WIRELESS_EXT=y @@ -990,7 +1092,9 @@ CONFIG_CFG80211=m # CONFIG_NL80211_TESTMODE is not set # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set # CONFIG_CFG80211_REG_DEBUG is not set +# CONFIG_CFG80211_CERTIFICATION_ONUS is not set # CONFIG_CFG80211_DEFAULT_PS is not set +# CONFIG_CFG80211_DEBUGFS is not set # CONFIG_CFG80211_INTERNAL_REGDB is not set CONFIG_CFG80211_WEXT=y CONFIG_LIB80211=m @@ -1000,25 +1104,25 @@ CONFIG_LIB80211_CRYPT_TKIP=m # CONFIG_LIB80211_DEBUG is not set CONFIG_MAC80211=m CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_RC_PID=y CONFIG_MAC80211_RC_MINSTREL=y CONFIG_MAC80211_RC_MINSTREL_HT=y +# CONFIG_MAC80211_RC_DEFAULT_PID is not set CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" CONFIG_MAC80211_MESH=y CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUGFS is not set # CONFIG_MAC80211_MESSAGE_TRACING is not set # CONFIG_MAC80211_DEBUG_MENU is not set # CONFIG_WIMAX is not set CONFIG_RFKILL=m CONFIG_RFKILL_LEDS=y CONFIG_RFKILL_INPUT=y -CONFIG_RFKILL_REGULATOR=m CONFIG_RFKILL_GPIO=m # CONFIG_NET_9P is not set # CONFIG_CAIF is not set -CONFIG_CEPH_LIB=m -# CONFIG_CEPH_LIB_PRETTYDEBUG is not set -# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set +# CONFIG_CEPH_LIB is not set # CONFIG_NFC is not set CONFIG_HAVE_BPF_JIT=y @@ -1029,11 +1133,11 @@ CONFIG_HAVE_BPF_JIT=y # # Generic Driver Options # -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_UEVENT_HELPER_PATH="" CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y -# CONFIG_STANDALONE is not set -# CONFIG_PREVENT_FIRMWARE_BUILD is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=y # CONFIG_FIRMWARE_IN_KERNEL is not set CONFIG_EXTRA_FIRMWARE="" @@ -1047,13 +1151,12 @@ CONFIG_REGMAP_I2C=m CONFIG_REGMAP_SPI=m CONFIG_REGMAP_MMIO=m CONFIG_DMA_SHARED_BUFFER=y -CONFIG_CMA=y -# CONFIG_CMA_DEBUG is not set +CONFIG_DMA_CMA=y # # Default contiguous memory area size: # -CONFIG_CMA_SIZE_MBYTES=16 +CONFIG_CMA_SIZE_MBYTES=5 CONFIG_CMA_SIZE_SEL_MBYTES=y # CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set # CONFIG_CMA_SIZE_SEL_MIN is not set @@ -1064,137 +1167,30 @@ CONFIG_CMA_AREAS=7 # # Bus devices # +# CONFIG_ARM_CCI is not set CONFIG_CONNECTOR=m -CONFIG_MTD=m -# CONFIG_MTD_TESTS is not set -# CONFIG_MTD_REDBOOT_PARTS is not set -CONFIG_MTD_CMDLINE_PARTS=m -# CONFIG_MTD_AFS_PARTS is not set -CONFIG_MTD_OF_PARTS=m -# CONFIG_MTD_AR7_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_BLKDEVS=m -CONFIG_MTD_BLOCK=m -# CONFIG_MTD_BLOCK_RO is not set -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set -# CONFIG_SM_FTL is not set -# CONFIG_MTD_OOPS is not set -# CONFIG_MTD_SWAP is not set - -# -# RAM/ROM/Flash chip drivers -# -# CONFIG_MTD_CFI is not set -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_PHYSMAP=m -# CONFIG_MTD_PHYSMAP_COMPAT is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SST25L is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOCG3 is not set -CONFIG_MTD_NAND_ECC=m -# CONFIG_MTD_NAND_ECC_SMC is not set -CONFIG_MTD_NAND=m -# CONFIG_MTD_NAND_ECC_BCH is not set -# CONFIG_MTD_SM_COMMON is not set -# CONFIG_MTD_NAND_DENALI is not set -# CONFIG_MTD_NAND_GPIO is not set -CONFIG_MTD_NAND_IDS=m -# CONFIG_MTD_NAND_DISKONCHIP is not set -# CONFIG_MTD_NAND_DOCG4 is not set -# CONFIG_MTD_NAND_NANDSIM is not set -CONFIG_MTD_NAND_PLATFORM=m -# CONFIG_MTD_ALAUDA is not set -# CONFIG_MTD_ONENAND is not set - -# -# LPDDR flash memory drivers -# -CONFIG_MTD_LPDDR=m -CONFIG_MTD_QINFO_PROBE=m -CONFIG_MTD_UBI=m -CONFIG_MTD_UBI_WL_THRESHOLD=4096 -CONFIG_MTD_UBI_BEB_LIMIT=20 -# CONFIG_MTD_UBI_FASTMAP is not set -# CONFIG_MTD_UBI_GLUEBI is not set -CONFIG_DTC=y -CONFIG_OF=y - -# -# Device Tree and Open Firmware support -# -CONFIG_PROC_DEVICETREE=y -# CONFIG_OF_SELFTEST is not set -CONFIG_OF_FLATTREE=y -CONFIG_OF_EARLY_FLATTREE=y -CONFIG_OF_ADDRESS=y -CONFIG_OF_IRQ=y -CONFIG_OF_DEVICE=y -CONFIG_OF_I2C=y -CONFIG_OF_NET=y -CONFIG_OF_MDIO=y -CONFIG_OF_MTD=y -CONFIG_PARPORT=m -# CONFIG_PARPORT_PC is not set -# CONFIG_PARPORT_GSC is not set -CONFIG_PARPORT_AX88796=m -CONFIG_PARPORT_1284=y -CONFIG_PARPORT_NOT_PC=y +# CONFIG_MTD is not set +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y +# CONFIG_PARPORT is not set CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_NULL_BLK is not set # CONFIG_BLK_DEV_COW_COMMON is not set CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 CONFIG_BLK_DEV_CRYPTOLOOP=m -# CONFIG_BLK_DEV_DRBD is not set +CONFIG_BLK_DEV_DRBD=m +# CONFIG_DRBD_FAULT_INJECTION is not set CONFIG_BLK_DEV_NBD=m -CONFIG_BLK_DEV_OSD=m CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=8 -CONFIG_BLK_DEV_RAM_SIZE=16384 +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 # CONFIG_BLK_DEV_XIP is not set -# CONFIG_CDROM_PKTCDVD is not set +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set CONFIG_ATA_OVER_ETH=m -CONFIG_MG_DISK=m -CONFIG_MG_DISK_RES=0 -CONFIG_BLK_DEV_RBD=m +# CONFIG_MG_DISK is not set +# CONFIG_BLK_DEV_RBD is not set # # Misc devices @@ -1202,10 +1198,10 @@ CONFIG_BLK_DEV_RBD=m # CONFIG_SENSORS_LIS3LV02D is not set # CONFIG_AD525X_DPOT is not set # CONFIG_ATMEL_PWM is not set -CONFIG_DUMMY_IRQ=m +# CONFIG_DUMMY_IRQ is not set # CONFIG_ICS932S401 is not set # CONFIG_ATMEL_SSC is not set -CONFIG_ENCLOSURE_SERVICES=m +# CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_APDS9802ALS is not set # CONFIG_ISL29003 is not set # CONFIG_ISL29020 is not set @@ -1214,11 +1210,11 @@ CONFIG_ENCLOSURE_SERVICES=m # CONFIG_SENSORS_BH1770 is not set # CONFIG_SENSORS_APDS990X is not set # CONFIG_HMC6352 is not set -CONFIG_DS1682=m +# CONFIG_DS1682 is not set # CONFIG_TI_DAC7512 is not set # CONFIG_BMP085_I2C is not set # CONFIG_BMP085_SPI is not set -CONFIG_USB_SWITCH_FSA9480=m +# CONFIG_USB_SWITCH_FSA9480 is not set # CONFIG_LATTICE_ECP3_CONFIG is not set # CONFIG_SRAM is not set # CONFIG_C2PORT is not set @@ -1228,15 +1224,15 @@ CONFIG_USB_SWITCH_FSA9480=m # CONFIG_EEPROM_AT24=m # CONFIG_EEPROM_AT25 is not set -CONFIG_EEPROM_LEGACY=m -CONFIG_EEPROM_MAX6875=m +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set CONFIG_EEPROM_93CX6=m # CONFIG_EEPROM_93XX46 is not set # # Texas Instruments shared transport line discipline # -# CONFIG_TI_ST is not set +CONFIG_TI_ST=m # CONFIG_SENSORS_LIS3_SPI is not set # CONFIG_SENSORS_LIS3_I2C is not set @@ -1246,28 +1242,35 @@ CONFIG_EEPROM_93CX6=m # CONFIG_ALTERA_STAPL is not set CONFIG_BCM2708_VCHIQ=y +# +# Intel MIC Host Driver +# + +# +# Intel MIC Card Driver +# + # # SCSI device support # CONFIG_SCSI_MOD=y -CONFIG_RAID_ATTRS=m +# CONFIG_RAID_ATTRS is not set CONFIG_SCSI=y CONFIG_SCSI_DMA=y # CONFIG_SCSI_TGT is not set -CONFIG_SCSI_NETLINK=y -CONFIG_SCSI_PROC_FS=y +# CONFIG_SCSI_NETLINK is not set +# CONFIG_SCSI_PROC_FS is not set # # SCSI support type (disk, tape, CD-ROM) # CONFIG_BLK_DEV_SD=y -# CONFIG_CHR_DEV_ST is not set -# CONFIG_CHR_DEV_OSST is not set +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m CONFIG_BLK_DEV_SR=m -CONFIG_BLK_DEV_SR_VENDOR=y +# CONFIG_BLK_DEV_SR_VENDOR is not set CONFIG_CHR_DEV_SG=m -CONFIG_CHR_DEV_SCH=m -CONFIG_SCSI_ENCLOSURE=m +# CONFIG_CHR_DEV_SCH is not set CONFIG_SCSI_MULTI_LUN=y # CONFIG_SCSI_CONSTANTS is not set # CONFIG_SCSI_LOGGING is not set @@ -1276,41 +1279,22 @@ CONFIG_SCSI_MULTI_LUN=y # # SCSI Transports # -CONFIG_SCSI_SPI_ATTRS=m -CONFIG_SCSI_FC_ATTRS=m -CONFIG_SCSI_ISCSI_ATTRS=m -CONFIG_SCSI_SAS_ATTRS=m -CONFIG_SCSI_SAS_LIBSAS=m -CONFIG_SCSI_SAS_ATA=y -CONFIG_SCSI_SAS_HOST_SMP=y -CONFIG_SCSI_SRP_ATTRS=m +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +CONFIG_SCSI_ISCSI_ATTRS=y +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set CONFIG_SCSI_LOWLEVEL=y CONFIG_ISCSI_TCP=m CONFIG_ISCSI_BOOT_SYSFS=m -CONFIG_SCSI_UFSHCD=m -CONFIG_SCSI_UFSHCD_PLATFORM=m -CONFIG_LIBFC=m -CONFIG_LIBFCOE=m +# CONFIG_SCSI_UFSHCD is not set +# CONFIG_LIBFC is not set +# CONFIG_LIBFCOE is not set # CONFIG_SCSI_DEBUG is not set -CONFIG_SCSI_DH=m -CONFIG_SCSI_DH_RDAC=m -CONFIG_SCSI_DH_HP_SW=m -CONFIG_SCSI_DH_EMC=m -CONFIG_SCSI_DH_ALUA=m -CONFIG_SCSI_OSD_INITIATOR=m -CONFIG_SCSI_OSD_ULD=m -CONFIG_SCSI_OSD_DPRINT_SENSE=1 -# CONFIG_SCSI_OSD_DEBUG is not set -CONFIG_ATA=m -# CONFIG_ATA_NONSTANDARD is not set -CONFIG_ATA_VERBOSE_ERROR=y -CONFIG_SATA_PMP=y - -# -# Controllers with non-SFF native interface -# -# CONFIG_SATA_AHCI_PLATFORM is not set -# CONFIG_ATA_SFF is not set +# CONFIG_SCSI_DH is not set +# CONFIG_SCSI_OSD_INITIATOR is not set +# CONFIG_ATA is not set CONFIG_MD=y CONFIG_BLK_DEV_MD=m CONFIG_MD_LINEAR=m @@ -1318,56 +1302,43 @@ CONFIG_MD_RAID0=m CONFIG_MD_RAID1=m CONFIG_MD_RAID10=m CONFIG_MD_RAID456=m -CONFIG_MD_MULTIPATH=m +# CONFIG_MD_MULTIPATH is not set # CONFIG_MD_FAULTY is not set -CONFIG_BCACHE=m -# CONFIG_BCACHE_DEBUG is not set -# CONFIG_BCACHE_EDEBUG is not set -# CONFIG_BCACHE_CLOSURES_DEBUG is not set +# CONFIG_BCACHE is not set CONFIG_BLK_DEV_DM_BUILTIN=y CONFIG_BLK_DEV_DM=m # CONFIG_DM_DEBUG is not set CONFIG_DM_BUFIO=m -CONFIG_DM_BIO_PRISON=m -CONFIG_DM_PERSISTENT_DATA=m CONFIG_DM_CRYPT=m CONFIG_DM_SNAPSHOT=m -CONFIG_DM_THIN_PROVISIONING=m -# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set -CONFIG_DM_CACHE=m -CONFIG_DM_CACHE_MQ=m -CONFIG_DM_CACHE_CLEANER=m +# CONFIG_DM_THIN_PROVISIONING is not set +# CONFIG_DM_CACHE is not set CONFIG_DM_MIRROR=m -CONFIG_DM_RAID=m CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_RAID=m CONFIG_DM_ZERO=m -CONFIG_DM_MULTIPATH=m -CONFIG_DM_MULTIPATH_QL=m -CONFIG_DM_MULTIPATH_ST=m +# CONFIG_DM_MULTIPATH is not set CONFIG_DM_DELAY=m -CONFIG_DM_UEVENT=y -CONFIG_DM_FLAKEY=m -CONFIG_DM_VERITY=m +# CONFIG_DM_UEVENT is not set +# CONFIG_DM_FLAKEY is not set +# CONFIG_DM_VERITY is not set +# CONFIG_DM_SWITCH is not set # CONFIG_TARGET_CORE is not set CONFIG_NETDEVICES=y +CONFIG_MII=y CONFIG_NET_CORE=y CONFIG_BONDING=m CONFIG_DUMMY=m -CONFIG_EQUALIZER=m -CONFIG_MII=m +# CONFIG_EQUALIZER is not set CONFIG_IFB=m -CONFIG_NET_TEAM=m -CONFIG_NET_TEAM_MODE_BROADCAST=m -CONFIG_NET_TEAM_MODE_ROUNDROBIN=m -CONFIG_NET_TEAM_MODE_RANDOM=m -CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m -CONFIG_NET_TEAM_MODE_LOADBALANCE=m +# CONFIG_NET_TEAM is not set CONFIG_MACVLAN=m -CONFIG_MACVTAP=m -CONFIG_VXLAN=m -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_MACVTAP is not set +# CONFIG_VXLAN is not set +CONFIG_NETCONSOLE=m +CONFIG_NETPOLL=y +# CONFIG_NETPOLL_TRAP is not set +CONFIG_NET_POLL_CONTROLLER=y CONFIG_IMQ=m # CONFIG_IMQ_BEHAVIOR_AA is not set CONFIG_IMQ_BEHAVIOR_AB=y @@ -1376,9 +1347,10 @@ CONFIG_IMQ_BEHAVIOR_AB=y CONFIG_IMQ_NUM_DEVS=2 CONFIG_TUN=m CONFIG_VETH=m +# CONFIG_NLMON is not set CONFIG_ATM_DRIVERS=y # CONFIG_ATM_DUMMY is not set -CONFIG_ATM_TCP=m +# CONFIG_ATM_TCP is not set # # CAIF transport drivers @@ -1387,89 +1359,77 @@ CONFIG_ATM_TCP=m # # Distributed Switch Architecture drivers # -CONFIG_NET_DSA_MV88E6XXX=y -CONFIG_NET_DSA_MV88E6060=y -CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y -CONFIG_NET_DSA_MV88E6131=y -CONFIG_NET_DSA_MV88E6123_61_65=y +# CONFIG_NET_DSA_MV88E6XXX is not set +# CONFIG_NET_DSA_MV88E6060 is not set +# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set +# CONFIG_NET_DSA_MV88E6131 is not set +# CONFIG_NET_DSA_MV88E6123_61_65 is not set CONFIG_ETHERNET=y +CONFIG_NET_VENDOR_ARC=y CONFIG_NET_CADENCE=y -CONFIG_ARM_AT91_ETHER=m -CONFIG_MACB=m +# CONFIG_ARM_AT91_ETHER is not set +# CONFIG_MACB is not set CONFIG_NET_VENDOR_BROADCOM=y -CONFIG_B44=m -CONFIG_NET_CALXEDA_XGMAC=m +# CONFIG_B44 is not set +# CONFIG_NET_CALXEDA_XGMAC is not set CONFIG_NET_VENDOR_CIRRUS=y -CONFIG_CS89x0=m -CONFIG_CS89x0_PLATFORM=y -CONFIG_DM9000=m -# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set -CONFIG_DNET=m +# CONFIG_CS89x0 is not set +# CONFIG_DM9000 is not set +# CONFIG_DNET is not set CONFIG_NET_VENDOR_FARADAY=y -CONFIG_FTMAC100=m -CONFIG_FTGMAC100=m +# CONFIG_FTMAC100 is not set +# CONFIG_FTGMAC100 is not set CONFIG_NET_VENDOR_INTEL=y CONFIG_NET_VENDOR_I825XX=y CONFIG_NET_VENDOR_MARVELL=y -CONFIG_MVMDIO=m +# CONFIG_MVMDIO is not set CONFIG_NET_VENDOR_MICREL=y -CONFIG_KS8842=m -CONFIG_KS8851=m -CONFIG_KS8851_MLL=m +# CONFIG_KS8842 is not set +# CONFIG_KS8851 is not set +# CONFIG_KS8851_MLL is not set CONFIG_NET_VENDOR_MICROCHIP=y -CONFIG_ENC28J60=m -# CONFIG_ENC28J60_WRITEVERIFY is not set +# CONFIG_ENC28J60 is not set CONFIG_NET_VENDOR_NATSEMI=y CONFIG_NET_VENDOR_8390=y -CONFIG_AX88796=m -CONFIG_AX88796_93CX6=y -CONFIG_ETHOC=m +# CONFIG_AX88796 is not set +# CONFIG_ETHOC is not set +# CONFIG_SH_ETH is not set CONFIG_NET_VENDOR_SEEQ=y CONFIG_NET_VENDOR_SMSC=y -CONFIG_SMC91X=m -CONFIG_SMC911X=m -CONFIG_SMSC911X=m -# CONFIG_SMSC911X_ARCH_HOOKS is not set +# CONFIG_SMC91X is not set +# CONFIG_SMC911X is not set +# CONFIG_SMSC911X is not set CONFIG_NET_VENDOR_STMICRO=y -CONFIG_STMMAC_ETH=m -CONFIG_STMMAC_PLATFORM=y -# CONFIG_STMMAC_DA is not set +# CONFIG_STMMAC_ETH is not set +CONFIG_NET_VENDOR_VIA=y CONFIG_NET_VENDOR_WIZNET=y -CONFIG_WIZNET_W5100=m -CONFIG_WIZNET_W5300=m -# CONFIG_WIZNET_BUS_DIRECT is not set -# CONFIG_WIZNET_BUS_INDIRECT is not set -CONFIG_WIZNET_BUS_ANY=y -CONFIG_PHYLIB=y +# CONFIG_WIZNET_W5100 is not set +# CONFIG_WIZNET_W5300 is not set +CONFIG_PHYLIB=m # # MII PHY device drivers # -CONFIG_AT803X_PHY=m -CONFIG_AMD_PHY=m -CONFIG_MARVELL_PHY=m -CONFIG_DAVICOM_PHY=m -CONFIG_QSEMI_PHY=m -CONFIG_LXT_PHY=m -CONFIG_CICADA_PHY=m -CONFIG_VITESSE_PHY=m -CONFIG_SMSC_PHY=m -CONFIG_BROADCOM_PHY=m -CONFIG_BCM87XX_PHY=m -CONFIG_ICPLUS_PHY=m -CONFIG_REALTEK_PHY=m -CONFIG_NATIONAL_PHY=m -CONFIG_STE10XP=m -CONFIG_LSI_ET1011C_PHY=m -CONFIG_MICREL_PHY=m -# CONFIG_FIXED_PHY is not set +# CONFIG_AT803X_PHY is not set +# CONFIG_AMD_PHY is not set +# CONFIG_MARVELL_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_QSEMI_PHY is not set +# CONFIG_LXT_PHY is not set +# CONFIG_CICADA_PHY is not set +# CONFIG_VITESSE_PHY is not set +# CONFIG_SMSC_PHY is not set +# CONFIG_BROADCOM_PHY is not set +# CONFIG_BCM87XX_PHY is not set +# CONFIG_ICPLUS_PHY is not set +# CONFIG_REALTEK_PHY is not set +# CONFIG_NATIONAL_PHY is not set +# CONFIG_STE10XP is not set +# CONFIG_LSI_ET1011C_PHY is not set +# CONFIG_MICREL_PHY is not set CONFIG_MDIO_BITBANG=m -CONFIG_MDIO_GPIO=m -CONFIG_MDIO_BUS_MUX=m -CONFIG_MDIO_BUS_MUX_GPIO=m -CONFIG_MDIO_BUS_MUX_MMIOREG=m -# CONFIG_MICREL_KS8995MA is not set -# CONFIG_PLIP is not set +# CONFIG_MDIO_GPIO is not set +CONFIG_MICREL_KS8995MA=m CONFIG_PPP=m CONFIG_PPP_BSDCOMP=m CONFIG_PPP_DEFLATE=m @@ -1478,15 +1438,12 @@ CONFIG_PPP_MPPE=m CONFIG_PPP_MULTILINK=y CONFIG_PPPOATM=m CONFIG_PPPOE=m -CONFIG_PPTP=m +# CONFIG_PPTP is not set CONFIG_PPPOL2TP=m CONFIG_PPP_ASYNC=m CONFIG_PPP_SYNC_TTY=m -CONFIG_SLIP=m +# CONFIG_SLIP is not set CONFIG_SLHC=m -CONFIG_SLIP_COMPRESSED=y -CONFIG_SLIP_SMART=y -CONFIG_SLIP_MODE_SLIP6=y # # USB Network Adapters @@ -1496,16 +1453,19 @@ CONFIG_USB_KAWETH=m CONFIG_USB_PEGASUS=m CONFIG_USB_RTL8150=m CONFIG_USB_RTL8152=m -CONFIG_USB_USBNET=m +CONFIG_USB_USBNET=y CONFIG_USB_NET_AX8817X=m CONFIG_USB_NET_AX88179_178A=m CONFIG_USB_NET_CDCETHER=m CONFIG_USB_NET_CDC_EEM=m CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_HUAWEI_CDC_NCM=m CONFIG_USB_NET_CDC_MBIM=m CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m CONFIG_USB_NET_SMSC75XX=m -CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_SMSC95XX=y CONFIG_USB_NET_GL620A=m CONFIG_USB_NET_NET1080=m CONFIG_USB_NET_PLUSB=m @@ -1524,7 +1484,7 @@ CONFIG_USB_NET_KALMIA=m CONFIG_USB_NET_QMI_WWAN=m CONFIG_USB_HSO=m CONFIG_USB_NET_INT51X1=m -# CONFIG_USB_IPHETH is not set +CONFIG_USB_IPHETH=m CONFIG_USB_SIERRA_NET=m CONFIG_USB_VL600=m CONFIG_WLAN=y @@ -1537,7 +1497,7 @@ CONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m CONFIG_RTL8187=m CONFIG_RTL8187_LEDS=y -# CONFIG_MAC80211_HWSIM is not set +CONFIG_MAC80211_HWSIM=m CONFIG_ATH_COMMON=m CONFIG_ATH_CARDS=m # CONFIG_ATH_DEBUG is not set @@ -1547,27 +1507,31 @@ CONFIG_ATH9K_BTCOEX_SUPPORT=y CONFIG_ATH9K=m # CONFIG_ATH9K_AHB is not set # CONFIG_ATH9K_DEBUGFS is not set -CONFIG_ATH9K_LEGACY_RATE_CONTROL=y +# CONFIG_ATH9K_WOW is not set +# CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set +CONFIG_ATH9K_RFKILL=y CONFIG_ATH9K_HTC=m +# CONFIG_ATH9K_HTC_DEBUGFS is not set CONFIG_CARL9170=m CONFIG_CARL9170_LEDS=y CONFIG_CARL9170_WPC=y -CONFIG_CARL9170_HWRNG=y +# CONFIG_CARL9170_HWRNG is not set CONFIG_ATH6KL=m -CONFIG_ATH6KL_SDIO=m +# CONFIG_ATH6KL_SDIO is not set CONFIG_ATH6KL_USB=m # CONFIG_ATH6KL_DEBUG is not set CONFIG_AR5523=m +# CONFIG_ATH10K is not set +# CONFIG_WCN36XX is not set CONFIG_B43=m CONFIG_B43_BCMA=y -# CONFIG_B43_BCMA_EXTRA is not set CONFIG_B43_SSB=y # CONFIG_B43_SDIO is not set CONFIG_B43_BCMA_PIO=y CONFIG_B43_PIO=y # CONFIG_B43_PHY_N is not set CONFIG_B43_PHY_LP=y -# CONFIG_B43_PHY_HT is not set +CONFIG_B43_PHY_HT=y CONFIG_B43_LEDS=y CONFIG_B43_HWRNG=y # CONFIG_B43_DEBUG is not set @@ -1584,12 +1548,11 @@ CONFIG_BRCMUTIL=m CONFIG_BRCMSMAC=m CONFIG_BRCMFMAC=m CONFIG_BRCMFMAC_SDIO=y -# CONFIG_BRCMFMAC_USB is not set +CONFIG_BRCMFMAC_USB=y # CONFIG_BRCM_TRACING is not set # CONFIG_BRCMDBG is not set CONFIG_HOSTAP=m -CONFIG_HOSTAP_FIRMWARE=y -# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +# CONFIG_HOSTAP_FIRMWARE is not set CONFIG_LIBERTAS=m CONFIG_LIBERTAS_USB=m CONFIG_LIBERTAS_SDIO=m @@ -1607,6 +1570,7 @@ CONFIG_RT73USB=m CONFIG_RT2800USB=m CONFIG_RT2800USB_RT33XX=y CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT3573=y CONFIG_RT2800USB_RT53XX=y CONFIG_RT2800USB_RT55XX=y CONFIG_RT2800USB_UNKNOWN=y @@ -1617,14 +1581,20 @@ CONFIG_RT2X00_LIB_FIRMWARE=y CONFIG_RT2X00_LIB_CRYPTO=y CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set +CONFIG_RTL_CARDS=m +CONFIG_RTL8192CU=m +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_USB=m +CONFIG_RTLWIFI_DEBUG=y +CONFIG_RTL8192C_COMMON=m CONFIG_WL_TI=y CONFIG_WL1251=m # CONFIG_WL1251_SPI is not set -CONFIG_WL1251_SDIO=m +# CONFIG_WL1251_SDIO is not set CONFIG_WL12XX=m CONFIG_WL18XX=m CONFIG_WLCORE=m -# CONFIG_WLCORE_SPI is not set +CONFIG_WLCORE_SPI=m CONFIG_WLCORE_SDIO=m CONFIG_WILINK_PLATFORM_DATA=y CONFIG_ZD1211RW=m @@ -1632,101 +1602,21 @@ CONFIG_ZD1211RW=m CONFIG_MWIFIEX=m CONFIG_MWIFIEX_SDIO=m CONFIG_MWIFIEX_USB=m -CONFIG_RTL8192CU=m +CONFIG_CW1200=m +CONFIG_CW1200_WLAN_SDIO=m +CONFIG_CW1200_WLAN_SPI=m # # Enable WiMAX (Networking options) to see the WiMAX drivers # -CONFIG_WAN=y -CONFIG_HDLC=m -CONFIG_HDLC_RAW=m -CONFIG_HDLC_RAW_ETH=m -CONFIG_HDLC_CISCO=m -CONFIG_HDLC_FR=m -CONFIG_HDLC_PPP=m - -# -# X.25/LAPB support is disabled -# -CONFIG_DLCI=m -CONFIG_DLCI_MAX=8 -CONFIG_IEEE802154_DRIVERS=m -CONFIG_IEEE802154_FAKEHARD=m -CONFIG_IEEE802154_FAKELB=m -# CONFIG_IEEE802154_AT86RF230 is not set -# CONFIG_IEEE802154_MRF24J40 is not set +# CONFIG_WAN is not set CONFIG_ISDN=y -CONFIG_ISDN_I4L=m -CONFIG_ISDN_PPP=y -CONFIG_ISDN_PPP_VJ=y -CONFIG_ISDN_MPP=y -CONFIG_IPPP_FILTER=y -CONFIG_ISDN_PPP_BSDCOMP=m -CONFIG_ISDN_AUDIO=y -CONFIG_ISDN_TTY_FAX=y - -# -# ISDN feature submodules -# -# CONFIG_ISDN_DRV_LOOP is not set -CONFIG_ISDN_DIVERSION=m - -# -# ISDN4Linux hardware drivers -# - -# -# Passive cards -# -CONFIG_ISDN_DRV_HISAX=m - -# -# D-channel protocol features -# -CONFIG_HISAX_EURO=y -CONFIG_DE_AOC=y -# CONFIG_HISAX_NO_SENDCOMPLETE is not set -# CONFIG_HISAX_NO_LLC is not set -# CONFIG_HISAX_NO_KEYPAD is not set -CONFIG_HISAX_1TR6=y -CONFIG_HISAX_NI1=y -CONFIG_HISAX_MAX_CARDS=8 - -# -# HiSax supported cards -# -CONFIG_HISAX_16_3=y -CONFIG_HISAX_S0BOX=y -CONFIG_HISAX_FRITZPCI=y -CONFIG_HISAX_AVM_A1_PCMCIA=y -CONFIG_HISAX_ELSA=y -CONFIG_HISAX_DIEHLDIVA=y -CONFIG_HISAX_SEDLBAUER=y -CONFIG_HISAX_NICCY=y -CONFIG_HISAX_GAZEL=y -CONFIG_HISAX_HFC_SX=y -CONFIG_HISAX_DEBUG=y - -# -# HiSax PCMCIA card service modules -# - -# -# HiSax sub driver modules -# -CONFIG_HISAX_ST5481=m -CONFIG_HISAX_HFCUSB=m -CONFIG_HISAX_HFC4S8S=m - -# -# Active cards -# +# CONFIG_ISDN_I4L is not set CONFIG_ISDN_CAPI=m CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y CONFIG_CAPI_TRACE=y -CONFIG_ISDN_CAPI_MIDDLEWARE=y CONFIG_ISDN_CAPI_CAPI20=m -CONFIG_ISDN_CAPI_CAPIDRV=m +CONFIG_ISDN_CAPI_MIDDLEWARE=y # # CAPI hardware drivers @@ -1735,7 +1625,6 @@ CONFIG_CAPI_AVM=y CONFIG_CAPI_EICON=y CONFIG_ISDN_DRV_GIGASET=m CONFIG_GIGASET_CAPI=y -# CONFIG_GIGASET_I4L is not set # CONFIG_GIGASET_DUMMYLL is not set CONFIG_GIGASET_BASE=m CONFIG_GIGASET_M105=m @@ -1749,7 +1638,6 @@ CONFIG_MISDN_L1OIP=m # mISDN hardware drivers # CONFIG_MISDN_HFCUSB=m -CONFIG_ISDN_HDLC=m # # Input device support @@ -1757,8 +1645,8 @@ CONFIG_ISDN_HDLC=m CONFIG_INPUT=y CONFIG_INPUT_FF_MEMLESS=m CONFIG_INPUT_POLLDEV=m -CONFIG_INPUT_SPARSEKMAP=m -CONFIG_INPUT_MATRIXKMAP=m +# CONFIG_INPUT_SPARSEKMAP is not set +# CONFIG_INPUT_MATRIXKMAP is not set # # Userland interfaces @@ -1767,41 +1655,48 @@ CONFIG_INPUT_MOUSEDEV=y # CONFIG_INPUT_MOUSEDEV_PSAUX is not set CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_EVDEV=m # CONFIG_INPUT_EVBUG is not set # # Input Device Drivers # -CONFIG_INPUT_KEYBOARD=y -CONFIG_KEYBOARD_ADP5588=m -CONFIG_KEYBOARD_ADP5589=m -CONFIG_KEYBOARD_ATKBD=y -CONFIG_KEYBOARD_QT1070=m -CONFIG_KEYBOARD_QT2160=m -CONFIG_KEYBOARD_LKKBD=m -CONFIG_KEYBOARD_GPIO=m -CONFIG_KEYBOARD_TCA6416=m -CONFIG_KEYBOARD_TCA8418=m -CONFIG_KEYBOARD_MATRIX=m -CONFIG_KEYBOARD_LM8323=m -CONFIG_KEYBOARD_LM8333=m -CONFIG_KEYBOARD_MAX7359=m -CONFIG_KEYBOARD_MCS=m -CONFIG_KEYBOARD_MPR121=m -CONFIG_KEYBOARD_NEWTON=m -CONFIG_KEYBOARD_OPENCORES=m -CONFIG_KEYBOARD_SAMSUNG=m -CONFIG_KEYBOARD_STOWAWAY=m -CONFIG_KEYBOARD_SUNKBD=m -CONFIG_KEYBOARD_XTKBD=m +# CONFIG_INPUT_KEYBOARD is not set # CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_JOYSTICK=y +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_GRIP_MP is not set +# CONFIG_JOYSTICK_GUILLEMOT is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_TMDC is not set +CONFIG_JOYSTICK_IFORCE=m +CONFIG_JOYSTICK_IFORCE_USB=y +# CONFIG_JOYSTICK_IFORCE_232 is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_TWIDJOY is not set +# CONFIG_JOYSTICK_ZHENHUA is not set +# CONFIG_JOYSTICK_AS5011 is not set +# CONFIG_JOYSTICK_JOYDUMP is not set +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +# CONFIG_JOYSTICK_XPAD_LEDS is not set # CONFIG_INPUT_TABLET is not set # CONFIG_INPUT_TOUCHSCREEN is not set CONFIG_INPUT_MISC=y -# CONFIG_INPUT_AD714X is not set +CONFIG_INPUT_AD714X=m +CONFIG_INPUT_AD714X_I2C=m +CONFIG_INPUT_AD714X_SPI=m # CONFIG_INPUT_BMA150 is not set # CONFIG_INPUT_MMA8450 is not set # CONFIG_INPUT_MPU3050 is not set @@ -1810,31 +1705,33 @@ CONFIG_INPUT_MISC=y CONFIG_INPUT_ATI_REMOTE2=m CONFIG_INPUT_KEYSPAN_REMOTE=m # CONFIG_INPUT_KXTJ9 is not set -# CONFIG_INPUT_POWERMATE is not set -# CONFIG_INPUT_YEALINK is not set -# CONFIG_INPUT_CM109 is not set -# CONFIG_INPUT_UINPUT is not set +CONFIG_INPUT_POWERMATE=m +CONFIG_INPUT_YEALINK=m +CONFIG_INPUT_CM109=m +CONFIG_INPUT_UINPUT=m # CONFIG_INPUT_PCF8574 is not set -CONFIG_INPUT_PWM_BEEPER=m -# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set -# CONFIG_INPUT_ADXL34X is not set +CONFIG_INPUT_GPIO_ROTARY_ENCODER=m +CONFIG_INPUT_ADXL34X=m +CONFIG_INPUT_ADXL34X_I2C=m +CONFIG_INPUT_ADXL34X_SPI=m # CONFIG_INPUT_IMS_PCU is not set -# CONFIG_INPUT_CMA3000 is not set +CONFIG_INPUT_CMA3000=m +# CONFIG_INPUT_CMA3000_I2C is not set # # Hardware I/O ports # -CONFIG_SERIO=y -CONFIG_SERIO_SERPORT=y -# CONFIG_SERIO_PARKBD is not set -CONFIG_SERIO_AMBAKMI=m -CONFIG_SERIO_LIBPS2=y -# CONFIG_SERIO_RAW is not set -CONFIG_SERIO_ALTERA_PS2=m -CONFIG_SERIO_PS2MULT=m -CONFIG_SERIO_ARC_PS2=m -CONFIG_SERIO_APBPS2=m -# CONFIG_GAMEPORT is not set +CONFIG_SERIO=m +CONFIG_SERIO_SERPORT=m +# CONFIG_SERIO_AMBAKMI is not set +# CONFIG_SERIO_LIBPS2 is not set +CONFIG_SERIO_RAW=m +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT is not set +# CONFIG_SERIO_ARC_PS2 is not set +CONFIG_GAMEPORT=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GAMEPORT_L4=m # # Character devices @@ -1845,76 +1742,54 @@ CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_VT_CONSOLE_SLEEP=y CONFIG_HW_CONSOLE=y -# CONFIG_VT_HW_CONSOLE_BINDING is not set +CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y -# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y # CONFIG_LEGACY_PTYS is not set # CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_N_GSM=m +# CONFIG_N_GSM is not set # CONFIG_TRACE_SINK is not set -CONFIG_DEVKMEM=y +# CONFIG_DEVKMEM is not set # # Serial drivers # -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_DMA=y -CONFIG_SERIAL_8250_NR_UARTS=4 -CONFIG_SERIAL_8250_RUNTIME_UARTS=4 -CONFIG_SERIAL_8250_EXTENDED=y -CONFIG_SERIAL_8250_MANY_PORTS=y -CONFIG_SERIAL_8250_SHARE_IRQ=y -CONFIG_SERIAL_8250_DETECT_IRQ=y -CONFIG_SERIAL_8250_RSA=y -CONFIG_SERIAL_8250_DW=m -CONFIG_SERIAL_8250_EM=m +# CONFIG_SERIAL_8250 is not set # # Non-8250 serial port support # -CONFIG_SERIAL_AMBA_PL010=y -CONFIG_SERIAL_AMBA_PL010_CONSOLE=y +# CONFIG_SERIAL_AMBA_PL010 is not set CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y # CONFIG_SERIAL_MAX3100 is not set # CONFIG_SERIAL_MAX310X is not set +# CONFIG_SERIAL_SH_SCI is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_SERIAL_OF_PLATFORM=y -CONFIG_SERIAL_SCCNXP=m -CONFIG_SERIAL_TIMBERDALE=m -CONFIG_SERIAL_ALTERA_JTAGUART=m -CONFIG_SERIAL_ALTERA_UART=m -CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4 -CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200 +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set # CONFIG_SERIAL_IFX6X60 is not set -CONFIG_SERIAL_XILINX_PS_UART=m -CONFIG_SERIAL_ARC=m -CONFIG_SERIAL_ARC_NR_PORTS=1 -CONFIG_PRINTER=m -# CONFIG_LP_CONSOLE is not set -CONFIG_PPDEV=m +# CONFIG_SERIAL_ARC is not set +# CONFIG_SERIAL_FSL_LPUART is not set +# CONFIG_SERIAL_ST_ASC is not set +CONFIG_TTY_PRINTK=y # CONFIG_HVC_DCC is not set -CONFIG_IPMI_HANDLER=m -CONFIG_IPMI_PANIC_EVENT=y -# CONFIG_IPMI_PANIC_STRING is not set -CONFIG_IPMI_DEVICE_INTERFACE=m -CONFIG_IPMI_SI=m -CONFIG_IPMI_WATCHDOG=m -CONFIG_IPMI_POWEROFF=m +# CONFIG_IPMI_HANDLER is not set CONFIG_HW_RANDOM=y # CONFIG_HW_RANDOM_TIMERIOMEM is not set # CONFIG_HW_RANDOM_ATMEL is not set # CONFIG_HW_RANDOM_EXYNOS is not set CONFIG_HW_RANDOM_BCM2708=y -CONFIG_NVRAM=m # CONFIG_R3964 is not set -# CONFIG_RAW_DRIVER is not set +CONFIG_RAW_DRIVER=y +CONFIG_MAX_RAW_DEVS=256 # CONFIG_TCG_TPM is not set CONFIG_BRCM_CHAR_DRIVERS=y CONFIG_BCM_VC_CMA=y +# CONFIG_BCM_VC_SM is not set CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y @@ -1924,14 +1799,11 @@ CONFIG_I2C_MUX=m # # Multiplexer I2C Chip support # -# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set -CONFIG_I2C_MUX_GPIO=m -CONFIG_I2C_MUX_PCA9541=m -CONFIG_I2C_MUX_PCA954x=m +# CONFIG_I2C_MUX_GPIO is not set +# CONFIG_I2C_MUX_PCA9541 is not set +# CONFIG_I2C_MUX_PCA954x is not set CONFIG_I2C_HELPER_AUTO=y -CONFIG_I2C_SMBUS=m CONFIG_I2C_ALGOBIT=m -CONFIG_I2C_ALGOPCA=m # # I2C Hardware Bus support @@ -1940,32 +1812,31 @@ CONFIG_I2C_ALGOPCA=m # # I2C system bus drivers (mostly embedded / system-on-chip) # -CONFIG_I2C_BCM2708=m +CONFIG_I2C_BCM2708=y CONFIG_I2C_BCM2708_BAUDRATE=100000 -CONFIG_I2C_CBUS_GPIO=m -CONFIG_I2C_DESIGNWARE_CORE=m -CONFIG_I2C_DESIGNWARE_PLATFORM=m -CONFIG_I2C_GPIO=m -CONFIG_I2C_NOMADIK=m -CONFIG_I2C_OCORES=m -CONFIG_I2C_PCA_PLATFORM=m +# CONFIG_I2C_CBUS_GPIO is not set +# CONFIG_I2C_DESIGNWARE_PLATFORM is not set +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_NOMADIK is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PCA_PLATFORM is not set # CONFIG_I2C_PXA_PCI is not set -CONFIG_I2C_SIMTEC=m -CONFIG_I2C_XILINX=m +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set # # External I2C/SMBus adapter drivers # -CONFIG_I2C_DIOLAN_U2C=m -CONFIG_I2C_PARPORT=m -CONFIG_I2C_PARPORT_LIGHT=m -CONFIG_I2C_TAOS_EVM=m -CONFIG_I2C_TINY_USB=m +# CONFIG_I2C_DIOLAN_U2C is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_ROBOTFUZZ_OSIF is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set # # Other I2C/SMBus bus drivers # -CONFIG_I2C_STUB=m +# CONFIG_I2C_STUB is not set # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set @@ -1978,13 +1849,10 @@ CONFIG_SPI_MASTER=y # # CONFIG_SPI_ALTERA is not set CONFIG_SPI_BCM2708=m -CONFIG_SPI_BITBANG=m -# CONFIG_SPI_BUTTERFLY is not set -CONFIG_SPI_GPIO=m -# CONFIG_SPI_LM70_LLP is not set -# CONFIG_SPI_FSL_SPI is not set -CONFIG_SPI_OC_TINY=m -CONFIG_SPI_PL022=m +# CONFIG_SPI_BITBANG is not set +# CONFIG_SPI_GPIO is not set +# CONFIG_SPI_OC_TINY is not set +# CONFIG_SPI_PL022 is not set # CONFIG_SPI_PXA2XX_PCI is not set # CONFIG_SPI_SC18IS602 is not set # CONFIG_SPI_XCOMM is not set @@ -1994,34 +1862,14 @@ CONFIG_SPI_PL022=m # # SPI Protocol Masters # -# CONFIG_SPI_SPIDEV is not set +CONFIG_SPI_SPIDEV=y # CONFIG_SPI_TLE62X0 is not set - -# -# Qualcomm MSM SSBI bus support -# -# CONFIG_SSBI is not set -CONFIG_HSI=m -CONFIG_HSI_BOARDINFO=y - -# -# HSI clients -# -CONFIG_HSI_CHAR=m +# CONFIG_HSI is not set # # PPS support # -CONFIG_PPS=m -# CONFIG_PPS_DEBUG is not set - -# -# PPS clients support -# -# CONFIG_PPS_CLIENT_KTIMER is not set -# CONFIG_PPS_CLIENT_LDISC is not set -# CONFIG_PPS_CLIENT_PARPORT is not set -# CONFIG_PPS_CLIENT_GPIO is not set +# CONFIG_PPS is not set # # PPS generators support @@ -2030,38 +1878,35 @@ CONFIG_PPS=m # # PTP clock support # -CONFIG_PTP_1588_CLOCK=m -# CONFIG_DP83640_PHY is not set -# CONFIG_PTP_1588_CLOCK_PCH is not set +# CONFIG_PTP_1588_CLOCK is not set + +# +# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. +# CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y CONFIG_ARCH_REQUIRE_GPIOLIB=y -CONFIG_GPIO_DEVRES=y CONFIG_GPIOLIB=y -CONFIG_OF_GPIO=y +CONFIG_GPIO_DEVRES=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y -CONFIG_GPIO_GENERIC=m -CONFIG_GPIO_MAX730X=m # # Memory mapped GPIO drivers: # -CONFIG_GPIO_GENERIC_PLATFORM=m -# CONFIG_GPIO_EM is not set -CONFIG_GPIO_PL061=y -CONFIG_GPIO_RCAR=m -CONFIG_GPIO_TS5500=m -CONFIG_GPIO_GRGPIO=m +# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_PL061 is not set +# CONFIG_GPIO_RCAR is not set +# CONFIG_GPIO_SCH311X is not set +# CONFIG_GPIO_TS5500 is not set # # I2C GPIO expanders: # -CONFIG_GPIO_MAX7300=m -CONFIG_GPIO_MAX732X=m -CONFIG_GPIO_PCF857X=m +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCF857X is not set # CONFIG_GPIO_SX150X is not set -CONFIG_GPIO_ADP5588=m -CONFIG_GPIO_ADNP=m +# CONFIG_GPIO_ADP5588 is not set # # PCI GPIO expanders: @@ -2070,15 +1915,17 @@ CONFIG_GPIO_ADNP=m # # SPI GPIO expanders: # -CONFIG_GPIO_MAX7301=m -CONFIG_GPIO_MCP23S08=m -CONFIG_GPIO_MC33880=m -CONFIG_GPIO_74X164=m +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MC33880 is not set # # AC97 GPIO expanders: # +# +# LPC GPIO expanders: +# + # # MODULbus GPIO expanders: # @@ -2108,7 +1955,7 @@ CONFIG_W1_SLAVE_DS2413=m CONFIG_W1_SLAVE_DS2423=m CONFIG_W1_SLAVE_DS2431=m CONFIG_W1_SLAVE_DS2433=m -CONFIG_W1_SLAVE_DS2433_CRC=y +# CONFIG_W1_SLAVE_DS2433_CRC is not set CONFIG_W1_SLAVE_DS2760=m CONFIG_W1_SLAVE_DS2780=m CONFIG_W1_SLAVE_DS2781=m @@ -2117,9 +1964,8 @@ CONFIG_W1_SLAVE_BQ27000=m CONFIG_POWER_SUPPLY=y # CONFIG_POWER_SUPPLY_DEBUG is not set # CONFIG_PDA_POWER is not set -# CONFIG_GENERIC_ADC_BATTERY is not set # CONFIG_TEST_POWER is not set -# CONFIG_BATTERY_DS2760 is not set +CONFIG_BATTERY_DS2760=m # CONFIG_BATTERY_DS2780 is not set # CONFIG_BATTERY_DS2781 is not set # CONFIG_BATTERY_DS2782 is not set @@ -2130,10 +1976,10 @@ CONFIG_POWER_SUPPLY=y # CONFIG_CHARGER_MAX8903 is not set # CONFIG_CHARGER_LP8727 is not set # CONFIG_CHARGER_GPIO is not set -# CONFIG_CHARGER_MANAGER is not set # CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24735 is not set # CONFIG_CHARGER_SMB347 is not set -# CONFIG_BATTERY_GOLDFISH is not set # CONFIG_POWER_RESET is not set # CONFIG_POWER_RESET_RESTART is not set # CONFIG_POWER_AVS is not set @@ -2169,13 +2015,12 @@ CONFIG_SENSORS_F71805F=m CONFIG_SENSORS_F71882FG=m CONFIG_SENSORS_F75375S=m CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_G762=m CONFIG_SENSORS_GL518SM=m CONFIG_SENSORS_GL520SM=m CONFIG_SENSORS_GPIO_FAN=m CONFIG_SENSORS_HIH6130=m -CONFIG_SENSORS_IBMAEM=m -CONFIG_SENSORS_IBMPEX=m -CONFIG_SENSORS_IIO_HWMON=m +CONFIG_SENSORS_HTU21=m CONFIG_SENSORS_IT87=m CONFIG_SENSORS_JC42=m CONFIG_SENSORS_LINEAGE=m @@ -2263,12 +2108,15 @@ CONFIG_THERMAL=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set -CONFIG_THERMAL_GOV_FAIR_SHARE=y +# CONFIG_THERMAL_GOV_FAIR_SHARE is not set CONFIG_THERMAL_GOV_STEP_WISE=y -CONFIG_THERMAL_GOV_USER_SPACE=y -CONFIG_CPU_THERMAL=y +# CONFIG_THERMAL_GOV_USER_SPACE is not set # CONFIG_THERMAL_EMULATION is not set CONFIG_THERMAL_BCM2835=y + +# +# Texas Instruments thermal drivers +# CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y # CONFIG_WATCHDOG_NOWAYOUT is not set @@ -2276,16 +2124,17 @@ CONFIG_WATCHDOG_CORE=y # # Watchdog Device Drivers # -CONFIG_SOFT_WATCHDOG=m +# CONFIG_SOFT_WATCHDOG is not set # CONFIG_ARM_SP805_WATCHDOG is not set # CONFIG_DW_WATCHDOG is not set # CONFIG_MAX63XX_WATCHDOG is not set CONFIG_BCM2708_WDT=m +# CONFIG_MEN_A21_WDT is not set # # USB-based Watchdog Cards # -CONFIG_USBPCWATCHDOG=m +# CONFIG_USBPCWATCHDOG is not set CONFIG_SSB_POSSIBLE=y # @@ -2294,18 +2143,20 @@ CONFIG_SSB_POSSIBLE=y CONFIG_SSB=m CONFIG_SSB_BLOCKIO=y CONFIG_SSB_SDIOHOST_POSSIBLE=y -CONFIG_SSB_SDIOHOST=y +# CONFIG_SSB_SDIOHOST is not set +# CONFIG_SSB_SILENT is not set # CONFIG_SSB_DEBUG is not set -CONFIG_SSB_DRIVER_GPIO=y +# CONFIG_SSB_DRIVER_GPIO is not set CONFIG_BCMA_POSSIBLE=y # # Broadcom specific AMBA # -CONFIG_BCMA=y +CONFIG_BCMA=m CONFIG_BCMA_BLOCKIO=y -CONFIG_BCMA_DRIVER_GMAC_CMN=y -CONFIG_BCMA_DRIVER_GPIO=y +# CONFIG_BCMA_HOST_SOC is not set +# CONFIG_BCMA_DRIVER_GMAC_CMN is not set +# CONFIG_BCMA_DRIVER_GPIO is not set # CONFIG_BCMA_DEBUG is not set # @@ -2321,14 +2172,17 @@ CONFIG_MFD_CORE=m # CONFIG_MFD_DA9052_SPI is not set # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9063 is not set # CONFIG_MFD_MC13XXX_SPI is not set # CONFIG_MFD_MC13XXX_I2C is not set # CONFIG_HTC_EGPIO is not set # CONFIG_HTC_PASIC3 is not set # CONFIG_HTC_I2CPLD is not set +# CONFIG_MFD_KEMPLD is not set # CONFIG_MFD_88PM800 is not set # CONFIG_MFD_88PM805 is not set # CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_MAX14577 is not set # CONFIG_MFD_MAX77686 is not set # CONFIG_MFD_MAX77693 is not set # CONFIG_MFD_MAX8907 is not set @@ -2349,6 +2203,7 @@ CONFIG_MFD_CORE=m # CONFIG_MFD_STMPE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_MFD_LP3943 is not set # CONFIG_MFD_LP8788 is not set # CONFIG_MFD_PALMAS is not set # CONFIG_TPS6105X is not set @@ -2364,7 +2219,7 @@ CONFIG_MFD_CORE=m # CONFIG_MFD_TPS80031 is not set # CONFIG_TWL4030_CORE is not set # CONFIG_TWL6040_CORE is not set -# CONFIG_MFD_WL1273_CORE is not set +CONFIG_MFD_WL1273_CORE=m # CONFIG_MFD_LM3533 is not set # CONFIG_MFD_TC3589X is not set # CONFIG_MFD_TMIO is not set @@ -2378,30 +2233,8 @@ CONFIG_MFD_CORE=m # CONFIG_MFD_WM831X_SPI is not set # CONFIG_MFD_WM8350_I2C is not set # CONFIG_MFD_WM8994 is not set -CONFIG_REGULATOR=y -# CONFIG_REGULATOR_DEBUG is not set -# CONFIG_REGULATOR_DUMMY is not set -CONFIG_REGULATOR_FIXED_VOLTAGE=m -# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set -# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set -CONFIG_REGULATOR_GPIO=m -# CONFIG_REGULATOR_AD5398 is not set -# CONFIG_REGULATOR_FAN53555 is not set -# CONFIG_REGULATOR_ISL6271A is not set -# CONFIG_REGULATOR_MAX1586 is not set -# CONFIG_REGULATOR_MAX8649 is not set -# CONFIG_REGULATOR_MAX8660 is not set -# CONFIG_REGULATOR_MAX8952 is not set -# CONFIG_REGULATOR_MAX8973 is not set -# CONFIG_REGULATOR_LP3971 is not set -# CONFIG_REGULATOR_LP3972 is not set -# CONFIG_REGULATOR_LP872X is not set -# CONFIG_REGULATOR_LP8755 is not set -# CONFIG_REGULATOR_TPS51632 is not set -# CONFIG_REGULATOR_TPS62360 is not set -# CONFIG_REGULATOR_TPS65023 is not set -# CONFIG_REGULATOR_TPS6507X is not set -# CONFIG_REGULATOR_TPS6524X is not set +# CONFIG_VEXPRESS_CONFIG is not set +# CONFIG_REGULATOR is not set CONFIG_MEDIA_SUPPORT=m # @@ -2425,7 +2258,6 @@ CONFIG_VIDEOBUF_DVB=m CONFIG_VIDEOBUF2_CORE=m CONFIG_VIDEOBUF2_MEMOPS=m CONFIG_VIDEOBUF2_VMALLOC=m -CONFIG_VIDEO_V4L2_INT_DEVICE=m CONFIG_DVB_CORE=m CONFIG_DVB_NET=y CONFIG_TTPCI_EEPROM=m @@ -2503,6 +2335,7 @@ CONFIG_USB_GSPCA_SQ905=m CONFIG_USB_GSPCA_SQ905C=m CONFIG_USB_GSPCA_SQ930X=m CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STK1135=m CONFIG_USB_GSPCA_STV0680=m CONFIG_USB_GSPCA_SUNPLUS=m CONFIG_USB_GSPCA_T613=m @@ -2519,7 +2352,7 @@ CONFIG_VIDEO_CPIA2=m CONFIG_USB_ZR364XX=m CONFIG_USB_STKWEBCAM=m CONFIG_USB_S2255=m -CONFIG_USB_SN9C102=m +CONFIG_VIDEO_USBTV=m # # Analog TV USB devices @@ -2531,8 +2364,9 @@ CONFIG_VIDEO_PVRUSB2_DVB=y CONFIG_VIDEO_HDPVR=m CONFIG_VIDEO_TLG2300=m CONFIG_VIDEO_USBVISION=m +CONFIG_VIDEO_STK1160_COMMON=m +# CONFIG_VIDEO_STK1160_AC97 is not set CONFIG_VIDEO_STK1160=m -CONFIG_VIDEO_STK1160_AC97=y # # Analog/digital TV USB devices @@ -2540,7 +2374,7 @@ CONFIG_VIDEO_STK1160_AC97=y CONFIG_VIDEO_AU0828=m CONFIG_VIDEO_AU0828_V4L2=y CONFIG_VIDEO_CX231XX=m -# CONFIG_VIDEO_CX231XX_RC is not set +CONFIG_VIDEO_CX231XX_RC=y CONFIG_VIDEO_CX231XX_ALSA=m CONFIG_VIDEO_CX231XX_DVB=m CONFIG_VIDEO_TM6000=m @@ -2554,7 +2388,7 @@ CONFIG_DVB_USB=m # CONFIG_DVB_USB_DEBUG is not set CONFIG_DVB_USB_A800=m CONFIG_DVB_USB_DIBUSB_MB=m -# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set +CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y CONFIG_DVB_USB_DIBUSB_MC=m CONFIG_DVB_USB_DIB0700=m CONFIG_DVB_USB_UMT_010=m @@ -2593,12 +2427,13 @@ CONFIG_DVB_USB_RTL28XXU=m CONFIG_DVB_USB_DVBSKY=m CONFIG_SMS_USB_DRV=m CONFIG_DVB_B2C2_FLEXCOP_USB=m -CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG=y +# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set # # Webcam, TV (analog/digital) USB devices # CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_V4L2=m CONFIG_VIDEO_EM28XX_ALSA=m CONFIG_VIDEO_EM28XX_DVB=m CONFIG_VIDEO_EM28XX_RC=m @@ -2614,7 +2449,6 @@ CONFIG_VIDEO_BCM2835_MMAL=m # Supported MMC/SDIO adapters # # CONFIG_SMS_SDIO_DRV is not set -# CONFIG_MEDIA_PARPORT_SUPPORT is not set # CONFIG_RADIO_ADAPTERS is not set CONFIG_MEDIA_COMMON_OPTIONS=y @@ -2625,7 +2459,6 @@ CONFIG_VIDEO_CX2341X=m CONFIG_VIDEO_TVEEPROM=m CONFIG_CYPRESS_FIRMWARE=m CONFIG_DVB_B2C2_FLEXCOP=m -CONFIG_DVB_B2C2_FLEXCOP_DEBUG=y CONFIG_SMS_SIANO_MDTV=m CONFIG_SMS_SIANO_RC=y @@ -2676,7 +2509,11 @@ CONFIG_VIDEO_MT9V011=m # # -# Miscelaneous helper chips +# Audio/Video compression chips +# + +# +# Miscellaneous helper chips # # @@ -2709,6 +2546,7 @@ CONFIG_MEDIA_TUNER_FC0013=m CONFIG_MEDIA_TUNER_TDA18212=m CONFIG_MEDIA_TUNER_E4000=m CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_M88TS2022=m CONFIG_MEDIA_TUNER_TUA9001=m CONFIG_MEDIA_TUNER_IT913X=m CONFIG_MEDIA_TUNER_R820T=m @@ -2720,6 +2558,7 @@ CONFIG_DVB_STB0899=m CONFIG_DVB_STB6100=m CONFIG_DVB_STV090x=m CONFIG_DVB_STV6110x=m +CONFIG_DVB_M88DS3103=m # # Multistandard (cable + terrestrial) frontends @@ -2744,7 +2583,6 @@ CONFIG_DVB_TUNER_ITD1000=m CONFIG_DVB_TUNER_CX24113=m CONFIG_DVB_TDA826X=m CONFIG_DVB_CX24116=m -CONFIG_DVB_M88DS3103=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m @@ -2814,6 +2652,7 @@ CONFIG_DVB_ISL6423=m CONFIG_DVB_A8293=m CONFIG_DVB_LGS8GXX=m CONFIG_DVB_ATBM8830=m +CONFIG_DVB_DVBSKY_M88DS3103=m CONFIG_DVB_IX2505V=m CONFIG_DVB_IT913X_FE=m CONFIG_DVB_M88RS2000=m @@ -2827,52 +2666,39 @@ CONFIG_DVB_AF9033=m # # Graphics support # -CONFIG_DRM=m -CONFIG_DRM_USB=m -CONFIG_DRM_KMS_HELPER=m -# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set - -# -# I2C encoder or helper chips -# -# CONFIG_DRM_I2C_CH7006 is not set -# CONFIG_DRM_I2C_SIL164 is not set -CONFIG_DRM_I2C_NXP_TDA998X=m -CONFIG_DRM_UDL=m -# CONFIG_DRM_TILCDC is not set +# CONFIG_DRM is not set # CONFIG_VGASTATE is not set -CONFIG_VIDEO_OUTPUT_CONTROL=m -CONFIG_HDMI=y +# CONFIG_VIDEO_OUTPUT_CONTROL is not set CONFIG_FB=y -CONFIG_FIRMWARE_EDID=y +# CONFIG_FIRMWARE_EDID is not set # CONFIG_FB_DDC is not set # CONFIG_FB_BOOT_VESA_SUPPORT is not set CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_IMAGEBLIT=y # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set -CONFIG_FB_SYS_FILLRECT=m -CONFIG_FB_SYS_COPYAREA=m -CONFIG_FB_SYS_IMAGEBLIT=m +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set # CONFIG_FB_FOREIGN_ENDIAN is not set -CONFIG_FB_SYS_FOPS=m -CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SYS_FOPS is not set # CONFIG_FB_SVGALIB is not set # CONFIG_FB_MACMODES is not set # CONFIG_FB_BACKLIGHT is not set -CONFIG_FB_MODE_HELPERS=y -CONFIG_FB_TILEBLITTING=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set # # Frame buffer hardware drivers # CONFIG_FB_BCM2708=y -CONFIG_FB_ARMCLCD=y -CONFIG_FB_UVESA=m +# CONFIG_FB_ARMCLCD is not set +# CONFIG_FB_UVESA is not set +# CONFIG_FB_OPENCORES is not set # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_TMIO is not set -CONFIG_FB_SMSCUFX=m -CONFIG_FB_UDL=m +# CONFIG_FB_SMSCUFX is not set +# CONFIG_FB_UDL is not set # CONFIG_FB_GOLDFISH is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FB_METRONOME is not set @@ -2880,29 +2706,50 @@ CONFIG_FB_UDL=m # CONFIG_FB_AUO_K190X is not set # CONFIG_FB_SIMPLE is not set # CONFIG_EXYNOS_VIDEO is not set -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +# CONFIG_LCD_L4F00242T03 is not set +# CONFIG_LCD_LMS283GF05 is not set +# CONFIG_LCD_LTV350QV is not set +# CONFIG_LCD_ILI922X is not set +# CONFIG_LCD_ILI9320 is not set +# CONFIG_LCD_TDO24M is not set +# CONFIG_LCD_VGG2432A4 is not set +# CONFIG_LCD_PLATFORM is not set +# CONFIG_LCD_S6E63M0 is not set +# CONFIG_LCD_LD9040 is not set +# CONFIG_LCD_AMS369FG06 is not set +# CONFIG_LCD_LMS501KF03 is not set +# CONFIG_LCD_HX8357 is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=m +# CONFIG_BACKLIGHT_GENERIC is not set +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_ADP8870 is not set +# CONFIG_BACKLIGHT_LM3630A is not set +# CONFIG_BACKLIGHT_LM3639 is not set +# CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_GPIO is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set # # Console display driver support # CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y CONFIG_LOGO=y -CONFIG_LOGO_LINUX_MONO=y -CONFIG_LOGO_LINUX_VGA16=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set CONFIG_LOGO_LINUX_CLUT224=y -# CONFIG_FB_SSD1307 is not set -CONFIG_SOUND=m +CONFIG_SOUND=y CONFIG_SOUND_OSS_CORE=y CONFIG_SOUND_OSS_CORE_PRECLAIM=y CONFIG_SND=m CONFIG_SND_TIMER=m CONFIG_SND_PCM=m +CONFIG_SND_DMAENGINE_PCM=m CONFIG_SND_HWDEP=m CONFIG_SND_RAWMIDI=m CONFIG_SND_COMPRESS_OFFLOAD=m @@ -2916,8 +2763,8 @@ CONFIG_SND_PCM_OSS_PLUGINS=y CONFIG_SND_SEQUENCER_OSS=y CONFIG_SND_HRTIMER=m CONFIG_SND_SEQ_HRTIMER_DEFAULT=y -CONFIG_SND_DYNAMIC_MINORS=y -# CONFIG_SND_SUPPORT_OLD_API is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y CONFIG_SND_VERBOSE_PROCFS=y # CONFIG_SND_VERBOSE_PRINTK is not set # CONFIG_SND_DEBUG is not set @@ -2934,14 +2781,11 @@ CONFIG_SND_DUMMY=m CONFIG_SND_ALOOP=m CONFIG_SND_VIRMIDI=m CONFIG_SND_MTPAV=m -CONFIG_SND_MTS64=m CONFIG_SND_SERIAL_U16550=m CONFIG_SND_MPU401=m -CONFIG_SND_PORTMAN2X4=m -CONFIG_SND_AC97_POWER_SAVE=y -CONFIG_SND_AC97_POWER_SAVE_DEFAULT=60 +# CONFIG_SND_AC97_POWER_SAVE is not set CONFIG_SND_ARM=y -CONFIG_SND_ARMAACI=m +# CONFIG_SND_ARMAACI is not set CONFIG_SND_BCM2835=m CONFIG_SND_SPI=y CONFIG_SND_USB=y @@ -2950,24 +2794,25 @@ CONFIG_SND_USB_UA101=m CONFIG_SND_USB_CAIAQ=m CONFIG_SND_USB_CAIAQ_INPUT=y CONFIG_SND_USB_6FIRE=m +# CONFIG_SND_USB_HIFACE is not set CONFIG_SND_SOC=m -CONFIG_SND_SOC_DMAENGINE_PCM=y CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_ATMEL_SOC is not set CONFIG_SND_BCM2708_SOC_I2S=m CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC=m +# CONFIG_SND_BCM2708_SOC_HIFIBERRY_DACPLUS is not set CONFIG_SND_BCM2708_SOC_HIFIBERRY_DIGI=m +CONFIG_SND_BCM2708_SOC_HIFIBERRY_AMP=m CONFIG_SND_BCM2708_SOC_RPI_DAC=m # CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC is not set -CONFIG_SND_DESIGNWARE_I2S=m +# CONFIG_SND_DESIGNWARE_I2S is not set CONFIG_SND_SOC_I2C_AND_SPI=m -# CONFIG_SND_SOC_ALL_CODECS is not set CONFIG_SND_SOC_PCM1794A=m CONFIG_SND_SOC_PCM5102A=m -# CONFIG_SND_SOC_PCM512x is not set +CONFIG_SND_SOC_TAS5713=m CONFIG_SND_SOC_WM8804=m CONFIG_SND_SIMPLE_CARD=m -# CONFIG_SOUND_PRIME is not set +CONFIG_SOUND_PRIME=m CONFIG_AC97_BUS=m # @@ -2975,50 +2820,52 @@ CONFIG_AC97_BUS=m # CONFIG_HID=y # CONFIG_HID_BATTERY_STRENGTH is not set -# CONFIG_HIDRAW is not set +CONFIG_HIDRAW=y # CONFIG_UHID is not set CONFIG_HID_GENERIC=y # # Special HID drivers # -CONFIG_HID_A4TECH=y +CONFIG_HID_A4TECH=m CONFIG_HID_ACRUX=m # CONFIG_HID_ACRUX_FF is not set -CONFIG_HID_APPLE=y +CONFIG_HID_APPLE=m # CONFIG_HID_APPLEIR is not set -CONFIG_HID_AUREAL=m -CONFIG_HID_BELKIN=y -CONFIG_HID_CHERRY=y -CONFIG_HID_CHICONY=y -CONFIG_HID_PRODIKEYS=m -CONFIG_HID_CYPRESS=y +# CONFIG_HID_AUREAL is not set +CONFIG_HID_BELKIN=m +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +# CONFIG_HID_PRODIKEYS is not set +CONFIG_HID_CYPRESS=m CONFIG_HID_DRAGONRISE=m # CONFIG_DRAGONRISE_FF is not set -# CONFIG_HID_EMS_FF is not set +CONFIG_HID_EMS_FF=m CONFIG_HID_ELECOM=m -CONFIG_HID_EZKEY=y +CONFIG_HID_ELO=m +CONFIG_HID_EZKEY=m CONFIG_HID_HOLTEK=m # CONFIG_HOLTEK_FF is not set +# CONFIG_HID_HUION is not set CONFIG_HID_KEYTOUCH=m CONFIG_HID_KYE=m CONFIG_HID_UCLOGIC=m CONFIG_HID_WALTOP=m CONFIG_HID_GYRATION=m -CONFIG_HID_ICADE=m +# CONFIG_HID_ICADE is not set CONFIG_HID_TWINHAN=m -CONFIG_HID_KENSINGTON=y +CONFIG_HID_KENSINGTON=m CONFIG_HID_LCPOWER=m -CONFIG_HID_LENOVO_TPKBD=m -CONFIG_HID_LOGITECH=y -CONFIG_HID_LOGITECH_DJ=m +# CONFIG_HID_LENOVO_TPKBD is not set +CONFIG_HID_LOGITECH=m +# CONFIG_HID_LOGITECH_DJ is not set # CONFIG_LOGITECH_FF is not set # CONFIG_LOGIRUMBLEPAD2_FF is not set # CONFIG_LOGIG940_FF is not set # CONFIG_LOGIWHEELS_FF is not set CONFIG_HID_MAGICMOUSE=m -CONFIG_HID_MICROSOFT=y -CONFIG_HID_MONTEREY=y +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MONTEREY=m CONFIG_HID_MULTITOUCH=m CONFIG_HID_NTRIG=m CONFIG_HID_ORTEK=m @@ -3026,49 +2873,49 @@ CONFIG_HID_PANTHERLORD=m # CONFIG_PANTHERLORD_FF is not set CONFIG_HID_PETALYNX=m CONFIG_HID_PICOLCD=m -CONFIG_HID_PICOLCD_FB=y -CONFIG_HID_PICOLCD_LEDS=y -CONFIG_HID_PICOLCD_CIR=y -CONFIG_HID_PRIMAX=m -CONFIG_HID_PS3REMOTE=m +# CONFIG_HID_PICOLCD_FB is not set +# CONFIG_HID_PICOLCD_BACKLIGHT is not set +# CONFIG_HID_PICOLCD_LCD is not set +# CONFIG_HID_PICOLCD_LEDS is not set +# CONFIG_HID_PICOLCD_CIR is not set +# CONFIG_HID_PRIMAX is not set CONFIG_HID_ROCCAT=m -CONFIG_HID_SAITEK=m +# CONFIG_HID_SAITEK is not set CONFIG_HID_SAMSUNG=m CONFIG_HID_SONY=m +# CONFIG_SONY_FF is not set CONFIG_HID_SPEEDLINK=m -CONFIG_HID_STEELSERIES=m +# CONFIG_HID_STEELSERIES is not set CONFIG_HID_SUNPLUS=m CONFIG_HID_GREENASIA=m # CONFIG_GREENASIA_FF is not set CONFIG_HID_SMARTJOYPLUS=m # CONFIG_SMARTJOYPLUS_FF is not set -CONFIG_HID_TIVO=m +# CONFIG_HID_TIVO is not set CONFIG_HID_TOPSEED=m CONFIG_HID_THINGM=m CONFIG_HID_THRUSTMASTER=m # CONFIG_THRUSTMASTER_FF is not set CONFIG_HID_WACOM=m CONFIG_HID_WIIMOTE=m -CONFIG_HID_WIIMOTE_EXT=y +CONFIG_HID_XINMO=m CONFIG_HID_ZEROPLUS=m # CONFIG_ZEROPLUS_FF is not set CONFIG_HID_ZYDACRON=m -CONFIG_HID_SENSOR_HUB=m +# CONFIG_HID_SENSOR_HUB is not set # # USB HID support # -CONFIG_USB_HID=m -# CONFIG_HID_PID is not set +CONFIG_USB_HID=y +CONFIG_HID_PID=y CONFIG_USB_HIDDEV=y # # I2C HID support # -CONFIG_I2C_HID=m -# CONFIG_USB_ARCH_HAS_OHCI is not set -# CONFIG_USB_ARCH_HAS_EHCI is not set -# CONFIG_USB_ARCH_HAS_XHCI is not set +# CONFIG_I2C_HID is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_SUPPORT=y CONFIG_USB_COMMON=y CONFIG_USB_ARCH_HAS_HCD=y @@ -3080,25 +2927,32 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # Miscellaneous USB options # CONFIG_USB_DEFAULT_PERSIST=y -CONFIG_USB_DYNAMIC_MINORS=y -# CONFIG_USB_OTG is not set -# CONFIG_USB_MON is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +CONFIG_USB_MON=m # CONFIG_USB_WUSB_CBAF is not set # # USB Host Controller Drivers # # CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_XHCI_HCD is not set +# CONFIG_USB_EHCI_HCD is not set # CONFIG_USB_OXU210HP_HCD is not set # CONFIG_USB_ISP116X_HCD is not set # CONFIG_USB_ISP1760_HCD is not set # CONFIG_USB_ISP1362_HCD is not set +# CONFIG_USB_FUSBH200_HCD is not set +# CONFIG_USB_FOTG210_HCD is not set +# CONFIG_USB_OHCI_HCD is not set # CONFIG_USB_U132_HCD is not set # CONFIG_USB_SL811_HCD is not set # CONFIG_USB_R8A66597_HCD is not set CONFIG_USB_DWCOTG=y -CONFIG_USB_HCD_BCMA=y +# CONFIG_USB_HCD_BCMA is not set # CONFIG_USB_HCD_SSB is not set +# CONFIG_USB_HCD_TEST_MODE is not set # # USB Device Class drivers @@ -3106,7 +2960,7 @@ CONFIG_USB_HCD_BCMA=y CONFIG_USB_ACM=m CONFIG_USB_PRINTER=m CONFIG_USB_WDM=m -CONFIG_USB_TMC=m +# CONFIG_USB_TMC is not set # # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may @@ -3115,10 +2969,9 @@ CONFIG_USB_TMC=m # # also be needed; see USB_STORAGE Help for more info # -CONFIG_USB_STORAGE=m +CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_DEBUG is not set CONFIG_USB_STORAGE_REALTEK=m -CONFIG_REALTEK_AUTOPM=y CONFIG_USB_STORAGE_DATAFAB=m CONFIG_USB_STORAGE_FREECOM=m CONFIG_USB_STORAGE_ISD200=m @@ -3135,17 +2988,18 @@ CONFIG_USB_STORAGE_ENE_UB6250=m # # USB Imaging devices # -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +# CONFIG_USB_MUSB_HDRC is not set # CONFIG_USB_DWC3 is not set -# CONFIG_USB_CHIPIDEA is not set +# CONFIG_USB_DWC2 is not set # # USB port drivers # -CONFIG_USB_USS720=m CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_SIMPLE is not set CONFIG_USB_SERIAL_AIRCABLE=m CONFIG_USB_SERIAL_ARK3116=m CONFIG_USB_SERIAL_BELKIN=m @@ -3156,7 +3010,6 @@ CONFIG_USB_SERIAL_CP210X=m CONFIG_USB_SERIAL_CYPRESS_M8=m CONFIG_USB_SERIAL_EMPEG=m CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_FUNSOFT=m CONFIG_USB_SERIAL_VISOR=m CONFIG_USB_SERIAL_IPAQ=m CONFIG_USB_SERIAL_IR=m @@ -3173,19 +3026,16 @@ CONFIG_USB_SERIAL_KOBIL_SCT=m CONFIG_USB_SERIAL_MCT_U232=m CONFIG_USB_SERIAL_METRO=m CONFIG_USB_SERIAL_MOS7720=m -# CONFIG_USB_SERIAL_MOS7715_PARPORT is not set CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_MOTOROLA=m +# CONFIG_USB_SERIAL_MXUPORT is not set CONFIG_USB_SERIAL_NAVMAN=m CONFIG_USB_SERIAL_PL2303=m CONFIG_USB_SERIAL_OTI6858=m CONFIG_USB_SERIAL_QCAUX=m CONFIG_USB_SERIAL_QUALCOMM=m CONFIG_USB_SERIAL_SPCP8X5=m -CONFIG_USB_SERIAL_HP4X=m CONFIG_USB_SERIAL_SAFE=m # CONFIG_USB_SERIAL_SAFE_PADDED is not set -CONFIG_USB_SERIAL_SIEMENS_MPI=m CONFIG_USB_SERIAL_SIERRAWIRELESS=m CONFIG_USB_SERIAL_SYMBOL=m CONFIG_USB_SERIAL_TI=m @@ -3195,45 +3045,57 @@ CONFIG_USB_SERIAL_WWAN=m CONFIG_USB_SERIAL_OPTION=m CONFIG_USB_SERIAL_OMNINET=m CONFIG_USB_SERIAL_OPTICON=m -CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m CONFIG_USB_SERIAL_XSENS_MT=m -CONFIG_USB_SERIAL_ZIO=m CONFIG_USB_SERIAL_WISHBONE=m CONFIG_USB_SERIAL_ZTE=m CONFIG_USB_SERIAL_SSU100=m CONFIG_USB_SERIAL_QT2=m -# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_SERIAL_DEBUG=m # # USB Miscellaneous drivers # CONFIG_USB_EMI62=m CONFIG_USB_EMI26=m -# CONFIG_USB_ADUTUX is not set +CONFIG_USB_ADUTUX=m CONFIG_USB_SEVSEG=m -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m CONFIG_USB_LCD=m CONFIG_USB_LED=m CONFIG_USB_CYPRESS_CY7C63=m CONFIG_USB_CYTHERM=m -# CONFIG_USB_IDMOUSE is not set +CONFIG_USB_IDMOUSE=m CONFIG_USB_FTDI_ELAN=m -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set +CONFIG_USB_APPLEDISPLAY=m +CONFIG_USB_LD=m +CONFIG_USB_TRANCEVIBRATOR=m CONFIG_USB_IOWARRIOR=m -# CONFIG_USB_TEST is not set +CONFIG_USB_TEST=m +# CONFIG_USB_EHSET_TEST_FIXTURE is not set CONFIG_USB_ISIGHTFW=m CONFIG_USB_YUREX=m CONFIG_USB_EZUSB_FX2=m -CONFIG_USB_HSIC_USB3503=m +# CONFIG_USB_HSIC_USB3503 is not set CONFIG_USB_ATM=m CONFIG_USB_SPEEDTOUCH=m CONFIG_USB_CXACRU=m CONFIG_USB_UEAGLEATM=m CONFIG_USB_XUSBATM=m + +# +# USB Physical Layer drivers +# # CONFIG_USB_PHY is not set +# CONFIG_USB_OTG_FSM is not set +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_AM335X_PHY_USB is not set +# CONFIG_SAMSUNG_USB2PHY is not set +# CONFIG_SAMSUNG_USB3PHY is not set +# CONFIG_USB_GPIO_VBUS is not set +# CONFIG_USB_ISP1301 is not set +# CONFIG_USB_RCAR_PHY is not set +# CONFIG_USB_ULPI is not set # CONFIG_USB_GADGET is not set CONFIG_MMC=y # CONFIG_MMC_DEBUG is not set @@ -3244,80 +3106,65 @@ CONFIG_MMC=y # MMC/SD/SDIO Card Drivers # CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_MINORS=8 +CONFIG_MMC_BLOCK_MINORS=32 CONFIG_MMC_BLOCK_BOUNCE=y -CONFIG_SDIO_UART=m -CONFIG_MMC_TEST=m +# CONFIG_SDIO_UART is not set +# CONFIG_MMC_TEST is not set # # MMC/SD/SDIO Host Controller Drivers # -CONFIG_MMC_ARMMMCI=m +# CONFIG_MMC_ARMMMCI is not set CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_IO_ACCESSORS=y -CONFIG_MMC_SDHCI_PLTFM=m -CONFIG_MMC_SDHCI_PXAV3=m -CONFIG_MMC_SDHCI_PXAV2=m +CONFIG_MMC_SDHCI_PLTFM=y +# CONFIG_MMC_SDHCI_PXAV3 is not set +# CONFIG_MMC_SDHCI_PXAV2 is not set CONFIG_MMC_SDHCI_BCM2708=y -CONFIG_MMC_SDHCI_BCM2708_DMA=y -# CONFIG_MMC_SPI is not set -CONFIG_MMC_DW=m -# CONFIG_MMC_DW_IDMAC is not set -CONFIG_MMC_DW_PLTFM=m -CONFIG_MMC_DW_EXYNOS=m -CONFIG_MMC_VUB300=m -CONFIG_MMC_USHC=m -CONFIG_MEMSTICK=m -# CONFIG_MEMSTICK_DEBUG is not set - -# -# MemoryStick drivers -# -# CONFIG_MEMSTICK_UNSAFE_RESUME is not set -CONFIG_MSPRO_BLOCK=m - -# -# MemoryStick Host Controller Drivers -# +# CONFIG_MMC_SDHCI_BCM2708_DMA is not set +CONFIG_MMC_BCM2835=y +# CONFIG_MMC_BCM2835_DMA is not set +CONFIG_MMC_SPI=m +# CONFIG_MMC_DW is not set +# CONFIG_MMC_VUB300 is not set +# CONFIG_MMC_USHC is not set +# CONFIG_MEMSTICK is not set CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS=m # # LED drivers # -CONFIG_LEDS_LM3530=m -CONFIG_LEDS_LM3642=m -CONFIG_LEDS_PCA9532=m -CONFIG_LEDS_PCA9532_GPIO=y +# CONFIG_LEDS_LM3530 is not set +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_PCA9532 is not set CONFIG_LEDS_GPIO=m -CONFIG_LEDS_LP3944=m -CONFIG_LEDS_LP55XX_COMMON=m -CONFIG_LEDS_LP5521=m -CONFIG_LEDS_LP5523=m -CONFIG_LEDS_LP5562=m -CONFIG_LEDS_PCA955X=m -CONFIG_LEDS_PCA9633=m -CONFIG_LEDS_DAC124S085=m -CONFIG_LEDS_PWM=m -CONFIG_LEDS_REGULATOR=m -CONFIG_LEDS_BD2802=m -CONFIG_LEDS_LT3593=m -# CONFIG_LEDS_RENESAS_TPU is not set -CONFIG_LEDS_TCA6507=m -CONFIG_LEDS_LM355x=m -CONFIG_LEDS_OT200=m -CONFIG_LEDS_BLINKM=m +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP5521 is not set +# CONFIG_LEDS_LP5523 is not set +# CONFIG_LEDS_LP5562 is not set +# CONFIG_LEDS_LP8501 is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_PCA963X is not set +# CONFIG_LEDS_PCA9685 is not set +# CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_LT3593 is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_OT200 is not set +# CONFIG_LEDS_BLINKM is not set # # LED Triggers # CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=m -CONFIG_LEDS_TRIGGER_ONESHOT=m -CONFIG_LEDS_TRIGGER_HEARTBEAT=m -CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y CONFIG_LEDS_TRIGGER_CPU=y -CONFIG_LEDS_TRIGGER_GPIO=m +CONFIG_LEDS_TRIGGER_GPIO=y CONFIG_LEDS_TRIGGER_DEFAULT_ON=y # @@ -3331,7 +3178,8 @@ CONFIG_LEDS_TRIGGER_NETDEV=m CONFIG_RTC_LIB=y CONFIG_RTC_CLASS=y # CONFIG_RTC_HCTOSYS is not set -# CONFIG_RTC_SYSTOHC is not set +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" # CONFIG_RTC_DEBUG is not set # @@ -3354,12 +3202,14 @@ CONFIG_RTC_DRV_MAX6900=m CONFIG_RTC_DRV_RS5C372=m CONFIG_RTC_DRV_ISL1208=m CONFIG_RTC_DRV_ISL12022=m +# CONFIG_RTC_DRV_ISL12057 is not set CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF2127=m CONFIG_RTC_DRV_PCF8523=m CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8583=m CONFIG_RTC_DRV_M41T80=m -CONFIG_RTC_DRV_M41T80_WDT=y +# CONFIG_RTC_DRV_M41T80_WDT is not set CONFIG_RTC_DRV_BQ32K=m CONFIG_RTC_DRV_S35390A=m CONFIG_RTC_DRV_FM3130=m @@ -3385,58 +3235,56 @@ CONFIG_RTC_DRV_RX4581=m # # Platform RTC drivers # -CONFIG_RTC_DRV_CMOS=m -CONFIG_RTC_DRV_DS1286=m -CONFIG_RTC_DRV_DS1511=m -CONFIG_RTC_DRV_DS1553=m -CONFIG_RTC_DRV_DS1742=m -CONFIG_RTC_DRV_STK17TA8=m -CONFIG_RTC_DRV_M48T86=m -CONFIG_RTC_DRV_M48T35=m -CONFIG_RTC_DRV_M48T59=m -CONFIG_RTC_DRV_MSM6242=m -CONFIG_RTC_DRV_BQ4802=m -CONFIG_RTC_DRV_RP5C01=m -CONFIG_RTC_DRV_V3020=m -CONFIG_RTC_DRV_DS2404=m +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set +# CONFIG_RTC_DRV_DS2404 is not set # # on-CPU RTC drivers # -CONFIG_RTC_DRV_PL030=m -CONFIG_RTC_DRV_PL031=m -CONFIG_RTC_DRV_SNVS=m +# CONFIG_RTC_DRV_PL030 is not set +# CONFIG_RTC_DRV_PL031 is not set +# CONFIG_RTC_DRV_MOXART is not set # # HID Sensor RTC drivers # -CONFIG_RTC_DRV_HID_SENSOR_TIME=m +# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set CONFIG_DMADEVICES=y # CONFIG_DMADEVICES_DEBUG is not set # # DMA Devices # -CONFIG_AMBA_PL08X=y -CONFIG_DW_DMAC=y -# CONFIG_DW_DMAC_BIG_ENDIAN_IO is not set +# CONFIG_AMBA_PL08X is not set +# CONFIG_DW_DMAC_CORE is not set +# CONFIG_DW_DMAC is not set # CONFIG_TIMB_DMA is not set -CONFIG_PL330_DMA=y -CONFIG_DMA_BCM2708=y +# CONFIG_PL330_DMA is not set +CONFIG_DMA_BCM2835=y CONFIG_DMA_ENGINE=y CONFIG_DMA_VIRTUAL_CHANNELS=y -CONFIG_DMA_OF=y # # DMA Clients # -CONFIG_ASYNC_TX_DMA=y -CONFIG_DMATEST=m +# CONFIG_ASYNC_TX_DMA is not set +# CONFIG_DMATEST is not set # CONFIG_AUXDISPLAY is not set CONFIG_UIO=m -CONFIG_UIO_PDRV=m CONFIG_UIO_PDRV_GENIRQ=m -CONFIG_UIO_DMEM_GENIRQ=m +# CONFIG_UIO_DMEM_GENIRQ is not set # CONFIG_VIRT_DRIVERS is not set # @@ -3448,120 +3296,19 @@ CONFIG_UIO_DMEM_GENIRQ=m # Microsoft Hyper-V guest support # CONFIG_STAGING=y -CONFIG_USBIP_CORE=m -CONFIG_USBIP_VHCI_HCD=m -CONFIG_USBIP_HOST=m -# CONFIG_USBIP_DEBUG is not set -# CONFIG_W35UND is not set -# CONFIG_PRISM2_USB is not set -CONFIG_ECHO=m +# CONFIG_USBIP_CORE is not set +CONFIG_W35UND=m +CONFIG_PRISM2_USB=m +# CONFIG_ECHO is not set # CONFIG_COMEDI is not set -# CONFIG_ASUS_OLED is not set -# CONFIG_PANEL is not set # CONFIG_RTLLIB is not set -# CONFIG_R8712U is not set -CONFIG_RTS5139=m -# CONFIG_RTS5139_DEBUG is not set +CONFIG_R8712U=m +# CONFIG_R8188EU is not set +# CONFIG_RTS5139 is not set # CONFIG_TRANZPORT is not set # CONFIG_LINE6_USB is not set # CONFIG_USB_SERIAL_QUATECH2 is not set -# CONFIG_VT6656 is not set - -# -# IIO staging drivers -# - -# -# Accelerometers -# -# CONFIG_ADIS16201 is not set -# CONFIG_ADIS16203 is not set -# CONFIG_ADIS16204 is not set -# CONFIG_ADIS16209 is not set -# CONFIG_ADIS16220 is not set -# CONFIG_ADIS16240 is not set -# CONFIG_LIS3L02DQ is not set - -# -# Analog to digital converters -# -# CONFIG_AD7291 is not set -# CONFIG_AD7606 is not set -# CONFIG_AD799X is not set -# CONFIG_AD7780 is not set -# CONFIG_AD7816 is not set -# CONFIG_AD7192 is not set -# CONFIG_AD7280 is not set - -# -# Analog digital bi-direction converters -# -# CONFIG_ADT7316 is not set - -# -# Capacitance to digital converters -# -# CONFIG_AD7150 is not set -# CONFIG_AD7152 is not set -# CONFIG_AD7746 is not set - -# -# Direct Digital Synthesis -# -# CONFIG_AD5930 is not set -# CONFIG_AD9832 is not set -# CONFIG_AD9834 is not set -# CONFIG_AD9850 is not set -# CONFIG_AD9852 is not set -# CONFIG_AD9910 is not set -# CONFIG_AD9951 is not set - -# -# Digital gyroscope sensors -# -# CONFIG_ADIS16060 is not set -# CONFIG_ADIS16130 is not set -# CONFIG_ADIS16260 is not set - -# -# Network Analyzer, Impedance Converters -# -# CONFIG_AD5933 is not set - -# -# Light sensors -# -# CONFIG_SENSORS_ISL29018 is not set -# CONFIG_SENSORS_ISL29028 is not set -# CONFIG_TSL2583 is not set -# CONFIG_TSL2x7x is not set - -# -# Magnetometer sensors -# -# CONFIG_SENSORS_HMC5843 is not set - -# -# Active energy metering IC -# -# CONFIG_ADE7753 is not set -# CONFIG_ADE7754 is not set -# CONFIG_ADE7758 is not set -# CONFIG_ADE7759 is not set -# CONFIG_ADE7854 is not set - -# -# Resolver to digital converters -# -# CONFIG_AD2S90 is not set -# CONFIG_AD2S1200 is not set -# CONFIG_AD2S1210 is not set - -# -# Triggers - standalone -# -# CONFIG_IIO_SIMPLE_DUMMY is not set -# CONFIG_ZSMALLOC is not set +CONFIG_VT6656=m # CONFIG_USB_ENESTORAGE is not set # CONFIG_BCM_WIMAX is not set # CONFIG_FT1000 is not set @@ -3569,10 +3316,35 @@ CONFIG_RTS5139=m # # Speakup console speech # -# CONFIG_SPEAKUP is not set +CONFIG_SPEAKUP=m +# CONFIG_SPEAKUP_SYNTH_ACNTSA is not set +# CONFIG_SPEAKUP_SYNTH_APOLLO is not set +# CONFIG_SPEAKUP_SYNTH_AUDPTR is not set +# CONFIG_SPEAKUP_SYNTH_BNS is not set +# CONFIG_SPEAKUP_SYNTH_DECTLK is not set +# CONFIG_SPEAKUP_SYNTH_DECEXT is not set +# CONFIG_SPEAKUP_SYNTH_LTLK is not set +CONFIG_SPEAKUP_SYNTH_SOFT=m +# CONFIG_SPEAKUP_SYNTH_SPKOUT is not set +# CONFIG_SPEAKUP_SYNTH_TXPRT is not set +# CONFIG_SPEAKUP_SYNTH_DUMMY is not set # CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set # CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set -# CONFIG_STAGING_MEDIA is not set +CONFIG_STAGING_MEDIA=y +CONFIG_DVB_AS102=m +# CONFIG_VIDEO_GO7007 is not set +# CONFIG_USB_MSI3101 is not set +# CONFIG_VIDEO_TCM825X is not set +CONFIG_USB_SN9C102=m +CONFIG_LIRC_STAGING=y +CONFIG_LIRC_IGORPLUGUSB=m +CONFIG_LIRC_IMON=m +CONFIG_LIRC_RPI=m +CONFIG_LIRC_SASEM=m +CONFIG_LIRC_SERIAL=m +CONFIG_LIRC_SERIAL_TRANSMITTER=y +# CONFIG_LIRC_SIR is not set +# CONFIG_LIRC_ZILOG is not set # # Android @@ -3580,10 +3352,11 @@ CONFIG_RTS5139=m # CONFIG_ANDROID is not set # CONFIG_USB_WPAN_HCD is not set # CONFIG_WIMAX_GDM72XX is not set -# CONFIG_CSR_WIFI is not set +# CONFIG_LTE_GDM724X is not set # CONFIG_CED1401 is not set # CONFIG_DGRP is not set -# CONFIG_ZCACHE is not set +# CONFIG_LUSTRE_FS is not set +# CONFIG_DGAP is not set CONFIG_CLKDEV_LOOKUP=y # @@ -3603,110 +3376,18 @@ CONFIG_CLKDEV_LOOKUP=y # CONFIG_PM_DEVFREQ is not set # CONFIG_EXTCON is not set # CONFIG_MEMORY is not set -CONFIG_IIO=m -# CONFIG_IIO_BUFFER is not set -# CONFIG_IIO_TRIGGER is not set - -# -# Accelerometers -# -# CONFIG_HID_SENSOR_ACCEL_3D is not set -# CONFIG_KXSD9 is not set -# CONFIG_IIO_ST_ACCEL_3AXIS is not set - -# -# Analog to digital converters -# -# CONFIG_AD7266 is not set -# CONFIG_AD7298 is not set -# CONFIG_AD7923 is not set -# CONFIG_AD7791 is not set -# CONFIG_AD7793 is not set -# CONFIG_AD7476 is not set -# CONFIG_AD7887 is not set -# CONFIG_EXYNOS_ADC is not set -# CONFIG_MAX1363 is not set -# CONFIG_TI_ADC081C is not set - -# -# Amplifiers -# -# CONFIG_AD8366 is not set - -# -# Hid Sensor IIO Common -# -CONFIG_HID_SENSOR_IIO_COMMON=m -# CONFIG_HID_SENSOR_IIO_TRIGGER is not set -# CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS is not set - -# -# Digital to analog converters -# -# CONFIG_AD5064 is not set -# CONFIG_AD5360 is not set -# CONFIG_AD5380 is not set -# CONFIG_AD5421 is not set -# CONFIG_AD5624R_SPI is not set -# CONFIG_AD5446 is not set -# CONFIG_AD5449 is not set -# CONFIG_AD5504 is not set -# CONFIG_AD5755 is not set -# CONFIG_AD5764 is not set -# CONFIG_AD5791 is not set -# CONFIG_AD5686 is not set -# CONFIG_MAX517 is not set -# CONFIG_MCP4725 is not set - -# -# Frequency Synthesizers DDS/PLL -# - -# -# Clock Generator/Distribution -# -# CONFIG_AD9523 is not set - -# -# Phase-Locked Loop (PLL) frequency synthesizers -# -# CONFIG_ADF4350 is not set - -# -# Digital gyroscope sensors -# -# CONFIG_ADIS16080 is not set -# CONFIG_ADIS16136 is not set -# CONFIG_ADXRS450 is not set -# CONFIG_HID_SENSOR_GYRO_3D is not set -# CONFIG_IIO_ST_GYRO_3AXIS is not set -# CONFIG_ITG3200 is not set - -# -# Inertial measurement units -# -# CONFIG_ADIS16400 is not set -# CONFIG_ADIS16480 is not set -# CONFIG_INV_MPU6050_IIO is not set - -# -# Light sensors -# -# CONFIG_ADJD_S311 is not set -# CONFIG_SENSORS_TSL2563 is not set -# CONFIG_VCNL4000 is not set -# CONFIG_HID_SENSOR_ALS is not set - -# -# Magnetometer sensors -# -# CONFIG_AK8975 is not set -# CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set -# CONFIG_IIO_ST_MAGN_3AXIS is not set -CONFIG_PWM=y -CONFIG_IRQCHIP=y +# CONFIG_IIO is not set +# CONFIG_PWM is not set # CONFIG_IPACK_BUS is not set # CONFIG_RESET_CONTROLLER is not set +# CONFIG_FMC is not set + +# +# PHY Subsystem +# +# CONFIG_GENERIC_PHY is not set +# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set +# CONFIG_POWERCAP is not set # # File systems @@ -3720,6 +3401,7 @@ CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y # CONFIG_EXT4_DEBUG is not set CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS=m # CONFIG_REISERFS_CHECK is not set @@ -3744,9 +3426,10 @@ CONFIG_BTRFS_FS_POSIX_ACL=y # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set # CONFIG_BTRFS_DEBUG is not set +# CONFIG_BTRFS_ASSERT is not set # CONFIG_NILFS2_FS is not set CONFIG_FS_POSIX_ACL=y -CONFIG_EXPORTFS=m +CONFIG_EXPORTFS=y CONFIG_FILE_LOCKING=y CONFIG_FSNOTIFY=y CONFIG_DNOTIFY=y @@ -3764,7 +3447,6 @@ CONFIG_QUOTACTL=y CONFIG_AUTOFS4_FS=m CONFIG_FUSE_FS=m CONFIG_CUSE=m -CONFIG_GENERIC_ACL=y # # Caches @@ -3818,22 +3500,6 @@ CONFIG_ECRYPT_FS=m # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set -CONFIG_JFFS2_FS=m -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_FS_WBUF_VERIFY is not set -# CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set -CONFIG_JFFS2_COMPRESSION_OPTIONS=y -CONFIG_JFFS2_ZLIB=y -# CONFIG_JFFS2_LZO is not set -CONFIG_JFFS2_RTIME=y -CONFIG_JFFS2_RUBIN=y -# CONFIG_JFFS2_CMODE_NONE is not set -CONFIG_JFFS2_CMODE_PRIORITY=y -# CONFIG_JFFS2_CMODE_SIZE is not set -# CONFIG_JFFS2_CMODE_FAVOURLZO is not set -# CONFIG_UBIFS_FS is not set # CONFIG_LOGFS is not set # CONFIG_CRAMFS is not set # CONFIG_SQUASHFS is not set @@ -3849,7 +3515,6 @@ CONFIG_JFFS2_CMODE_PRIORITY=y CONFIG_UFS_FS=m # CONFIG_UFS_FS_WRITE is not set # CONFIG_UFS_DEBUG is not set -# CONFIG_EXOFS_FS is not set # CONFIG_F2FS_FS is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=m @@ -3867,6 +3532,7 @@ CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y +CONFIG_NFSD_V4_SECURITY_LABEL=y # CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_LOCKD=m CONFIG_LOCKD_V4=y @@ -3948,58 +3614,81 @@ CONFIG_NLS_UTF8=y # # Kernel hacking # + +# +# printk and dmesg options +# # CONFIG_PRINTK_TIME is not set CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 -# CONFIG_ENABLE_WARN_DEPRECATED is not set +CONFIG_BOOT_PRINTK_DELAY=y +# CONFIG_DYNAMIC_DEBUG is not set + +# +# Compile-time checks and compiler options +# +# CONFIG_DEBUG_INFO is not set +CONFIG_ENABLE_WARN_DEPRECATED=y CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=1024 -# CONFIG_MAGIC_SYSRQ is not set -CONFIG_STRIP_ASM_SYMS=y +# CONFIG_STRIP_ASM_SYMS is not set # CONFIG_READABLE_ASM is not set # CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set +CONFIG_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set # CONFIG_DEBUG_SECTION_MISMATCH is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_MAGIC_SYSRQ is not set CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SHIRQ is not set -# CONFIG_LOCKUP_DETECTOR is not set -# CONFIG_PANIC_ON_OOPS is not set -CONFIG_PANIC_ON_OOPS_VALUE=0 -CONFIG_DETECT_HUNG_TASK=y -CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 -# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set -CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 -CONFIG_SCHED_DEBUG=y -# CONFIG_SCHEDSTATS is not set -CONFIG_TIMER_STATS=y + +# +# Memory Debugging +# +# CONFIG_DEBUG_PAGEALLOC is not set # CONFIG_DEBUG_OBJECTS is not set # CONFIG_SLUB_DEBUG_ON is not set # CONFIG_SLUB_STATS is not set CONFIG_HAVE_DEBUG_KMEMLEAK=y # CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_VM is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_SHIRQ is not set + +# +# Debug Lockups and Hangs +# +# CONFIG_LOCKUP_DETECTOR is not set +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANIC_TIMEOUT=0 +CONFIG_SCHED_DEBUG=y +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set # CONFIG_DEBUG_LOCK_ALLOC is not set # CONFIG_PROVE_LOCKING is not set # CONFIG_LOCK_STAT is not set # CONFIG_DEBUG_ATOMIC_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_DEBUG_KOBJECT is not set CONFIG_DEBUG_BUGVERBOSE=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_VM is not set # CONFIG_DEBUG_WRITECOUNT is not set -CONFIG_DEBUG_MEMORY_INIT=y -# CONFIG_DEBUG_LIST is not set -# CONFIG_TEST_LIST_SORT is not set +CONFIG_DEBUG_LIST=y # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_DEBUG_CREDENTIALS is not set -CONFIG_FRAME_POINTER=y -# CONFIG_BOOT_PRINTK_DELAY is not set # # RCU Debugging @@ -4007,12 +3696,9 @@ CONFIG_FRAME_POINTER=y # CONFIG_SPARSE_RCU_POINTER is not set # CONFIG_RCU_TORTURE_TEST is not set # CONFIG_RCU_TRACE is not set -# CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set # CONFIG_FAULT_INJECTION is not set -# CONFIG_DEBUG_PAGEALLOC is not set CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y CONFIG_HAVE_DYNAMIC_FTRACE=y @@ -4020,30 +3706,51 @@ CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_HAVE_C_RECORDMCOUNT=y CONFIG_TRACING_SUPPORT=y -# CONFIG_FTRACE is not set +CONFIG_FTRACE=y +# CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set +# CONFIG_FTRACE_SYSCALLS is not set +# CONFIG_TRACER_SNAPSHOT is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_STACK_TRACER is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_PROBE_EVENTS is not set + +# +# Runtime Testing +# +# CONFIG_LKDTM is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_RBTREE_TEST is not set # CONFIG_INTERVAL_TREE_TEST is not set -# CONFIG_DMA_API_DEBUG is not set +# CONFIG_PERCPU_TEST is not set # CONFIG_ATOMIC64_SELFTEST is not set -CONFIG_ASYNC_RAID6_TEST=m +# CONFIG_ASYNC_RAID6_TEST is not set +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_TEST_MODULE is not set +# CONFIG_TEST_USER_COPY is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set -# CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_TEST_KSTRTOX is not set -# CONFIG_STRICT_DEVMEM is not set -# CONFIG_ARM_UNWIND is not set +# CONFIG_ARM_PTDUMP is not set +CONFIG_STRICT_DEVMEM=y +CONFIG_ARM_UNWIND=y # CONFIG_DEBUG_USER is not set -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_LL_UART_NONE is not set -# CONFIG_DEBUG_ICEDCC is not set -# CONFIG_DEBUG_SEMIHOSTING is not set -CONFIG_DEBUG_BCM2708_UART0=y +# CONFIG_DEBUG_LL is not set CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" +# CONFIG_DEBUG_UART_PL01X is not set +# CONFIG_DEBUG_UART_8250 is not set CONFIG_UNCOMPRESS_INCLUDE="mach/uncompress.h" -CONFIG_EARLY_PRINTK=y # CONFIG_OC_ETM is not set # CONFIG_PID_IN_CONTEXTIDR is not set +# CONFIG_DEBUG_SET_MODULE_RONX is not set # # Security options @@ -4109,14 +3816,16 @@ CONFIG_PAX_USERCOPY=y # Memory Protections # # CONFIG_GRKERNSEC_KMEM is not set -CONFIG_GRKERNSEC_JIT_HARDEN=y # CONFIG_GRKERNSEC_PERF_HARDEN is not set CONFIG_GRKERNSEC_RAND_THREADSTACK=y CONFIG_GRKERNSEC_PROC_MEMMAP=y CONFIG_GRKERNSEC_BRUTE=y CONFIG_GRKERNSEC_MODHARDEN=y CONFIG_GRKERNSEC_HIDESYM=y +CONFIG_GRKERNSEC_RANDSTRUCT=y +CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y CONFIG_GRKERNSEC_KERN_LOCKOUT=y +CONFIG_GRKERNSEC_OLD_ARM_USERLAND=y # # Role Based Access Control Options @@ -4175,12 +3884,12 @@ CONFIG_GRKERNSEC_DMESG=y CONFIG_GRKERNSEC_HARDEN_PTRACE=y CONFIG_GRKERNSEC_PTRACE_READEXEC=y CONFIG_GRKERNSEC_SETXID=y +CONFIG_GRKERNSEC_HARDEN_IPC=y # CONFIG_GRKERNSEC_TPE is not set # # Network Protections # -CONFIG_GRKERNSEC_RANDNET=y CONFIG_GRKERNSEC_BLACKHOLE=y CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y # CONFIG_GRKERNSEC_SOCKET is not set @@ -4201,6 +3910,8 @@ CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y CONFIG_GRKERNSEC_FLOODTIME=10 CONFIG_GRKERNSEC_FLOODBURST=6 CONFIG_KEYS=y +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_BIG_KEYS is not set # CONFIG_ENCRYPTED_KEYS is not set CONFIG_KEYS_DEBUG_PROC_KEYS=y CONFIG_SECURITY_DMESG_RESTRICT=y @@ -4232,7 +3943,7 @@ CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ALGAPI2=y CONFIG_CRYPTO_AEAD=m CONFIG_CRYPTO_AEAD2=y -CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_BLKCIPHER=y CONFIG_CRYPTO_BLKCIPHER2=y CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH2=y @@ -4255,13 +3966,13 @@ CONFIG_CRYPTO_AUTHENC=m # Authenticated Encryption with Associated Data # CONFIG_CRYPTO_CCM=m -CONFIG_CRYPTO_GCM=m +# CONFIG_CRYPTO_GCM is not set CONFIG_CRYPTO_SEQIV=m # # Block modes # -CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_CBC=y CONFIG_CRYPTO_CTR=m CONFIG_CRYPTO_CTS=m CONFIG_CRYPTO_ECB=m @@ -4282,15 +3993,16 @@ CONFIG_CRYPTO_VMAC=m # CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32=m +CONFIG_CRYPTO_CRCT10DIF=y CONFIG_CRYPTO_GHASH=m CONFIG_CRYPTO_MD4=m -CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_MD5=y CONFIG_CRYPTO_MICHAEL_MIC=m CONFIG_CRYPTO_RMD128=m CONFIG_CRYPTO_RMD160=m CONFIG_CRYPTO_RMD256=m CONFIG_CRYPTO_RMD320=m -CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA1_ARM=m CONFIG_CRYPTO_SHA256=y CONFIG_CRYPTO_SHA512=m @@ -4310,7 +4022,7 @@ CONFIG_CRYPTO_CAMELLIA=m CONFIG_CRYPTO_CAST_COMMON=m CONFIG_CRYPTO_CAST5=m CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_FCRYPT=m CONFIG_CRYPTO_KHAZAD=m CONFIG_CRYPTO_SALSA20=m @@ -4323,9 +4035,11 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m # # Compression # -CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_DEFLATE=m CONFIG_CRYPTO_ZLIB=m CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m # # Random Number Generation @@ -4334,11 +4048,10 @@ CONFIG_CRYPTO_ANSI_CPRNG=m CONFIG_CRYPTO_USER_API=m CONFIG_CRYPTO_USER_API_HASH=m CONFIG_CRYPTO_USER_API_SKCIPHER=m -CONFIG_CRYPTO_HW=y +# CONFIG_CRYPTO_HW is not set CONFIG_ASYMMETRIC_KEY_TYPE=m -CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m -CONFIG_PUBLIC_KEY_ALGO_RSA=m -CONFIG_X509_CERTIFICATE_PARSER=m +# CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE is not set +# CONFIG_PUBLIC_KEY_ALGO_RSA is not set # CONFIG_BINARY_PRINTF is not set # @@ -4348,12 +4061,14 @@ CONFIG_RAID6_PQ=m CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IO=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y CONFIG_CRC_CCITT=m CONFIG_CRC16=y -CONFIG_CRC_T10DIF=m -CONFIG_CRC_ITU_T=m +CONFIG_CRC_T10DIF=y +CONFIG_CRC_ITU_T=y CONFIG_CRC32=y # CONFIG_CRC32_SELFTEST is not set CONFIG_CRC32_SLICEBY8=y @@ -4361,20 +4076,24 @@ CONFIG_CRC32_SLICEBY8=y # CONFIG_CRC32_SARWATE is not set # CONFIG_CRC32_BIT is not set CONFIG_CRC7=m -CONFIG_LIBCRC32C=m +CONFIG_LIBCRC32C=y CONFIG_CRC8=m CONFIG_AUDIT_GENERIC=y +# CONFIG_RANDOM32_SELFTEST is not set CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y +CONFIG_ZLIB_DEFLATE=m CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y CONFIG_XZ_DEC=y -CONFIG_XZ_DEC_X86=y -CONFIG_XZ_DEC_POWERPC=y -CONFIG_XZ_DEC_IA64=y +# CONFIG_XZ_DEC_X86 is not set +# CONFIG_XZ_DEC_POWERPC is not set +# CONFIG_XZ_DEC_IA64 is not set CONFIG_XZ_DEC_ARM=y CONFIG_XZ_DEC_ARMTHUMB=y -CONFIG_XZ_DEC_SPARC=y +# CONFIG_XZ_DEC_SPARC is not set CONFIG_XZ_DEC_BCJ=y # CONFIG_XZ_DEC_TEST is not set CONFIG_DECOMPRESS_GZIP=y @@ -4382,10 +4101,12 @@ CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_LZMA=y CONFIG_DECOMPRESS_XZ=y CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y CONFIG_TEXTSEARCH=y CONFIG_TEXTSEARCH_KMP=m CONFIG_TEXTSEARCH_BM=m CONFIG_TEXTSEARCH_FSM=m +CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_DMA=y @@ -4393,10 +4114,13 @@ CONFIG_DQL=y CONFIG_NLATTR=y CONFIG_GENERIC_ATOMIC64=y CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y +CONFIG_LRU_CACHE=m CONFIG_AVERAGE=y -CONFIG_CLZ_TAB=y CONFIG_CORDIC=m # CONFIG_DDR is not set -CONFIG_MPILIB=m CONFIG_OID_REGISTRY=m +CONFIG_FONT_SUPPORT=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y # CONFIG_VIRTUALIZATION is not set diff --git a/lfs/linux b/lfs/linux index f90fd828f..52efdbc0a 100644 --- a/lfs/linux +++ b/lfs/linux @@ -26,8 +26,8 @@ include Config VER = 3.14.22 -RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -#GRS_PATCHES = grsecurity-2.9.1-3.10.58-ipfire1.patch.xz +RPI_PATCHES = 3.14.22-grsec-ipfire1 +A7M_PATCHES = 3.14.22-grsec-ipfire1 GRS_PATCHES = grsecurity-3.0-3.14.22-201410192047.patch.xz THISAPP = linux-$(VER) @@ -68,16 +68,19 @@ endif ############################################################################### objects =$(DL_FILE) \ rpi-patches-$(RPI_PATCHES).patch.xz \ + arm7-multi-patches-$(A7M_PATCHES).patch.xz \ $(GRS_PATCHES) -$(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) -rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz -$(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) +$(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) +rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz +arm7-multi-patches-$(A7M_PATCHES).patch.xz = $(URL_IPFIRE)/arm7-multi-patches-$(A7M_PATCHES).patch.xz +$(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = cb00fadd0a720cc2d1690792e72e0134 -rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = a63b899587068885951e762ad53f5b50 +$(DL_FILE)_MD5 = cb00fadd0a720cc2d1690792e72e0134 +rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = 75adff006d9dbc9be76e6c44eb80698f +arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = 06cdc33ba0c28b4b5ec876d8f8297b82 +$(GRS_PATCHES)_MD5 = a63b899587068885951e762ad53f5b50 install : $(TARGET) @@ -157,76 +160,14 @@ endif cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.32.27_mcs7830-fix-driver-name.patch ifeq "$(KCFG)" "-kirkwood" - # Add dreamplug,guruplug and icy 62x0 support on ARM-kirkwood - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.10-arm_kirkwood_setups.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.10-mv_cesa_disable_failing_hmac_sha1.patch endif ifeq "$(KCFG)" "-multi" - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.27-fs-exec-atomic64-operand-requires-impossible-reload.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-smsc95xx-add_mac_addr_param.patch - # Patchset for Omap (beagle/panda). - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch - - # Patchset for Wandboard. - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0001-imx6qdl-wandboard-dts-backport.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0002-ARM-dts-imx6qdl-wandboard-add-gpio-lines-to-wandboar.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0003-ARM-dts-imx6qdl-wandboard-Add-support-for-i2c1.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0004-ARM-dts-wandboard-add-binding-for-wand-rfkill-driver.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0005-ARM-dts-imx6qdl-add-pcie-device-node.patch - - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0001-i2c-imx-retry-on-NAK.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0002-i.MX6-Wandboard-add-CKO1-clock-output.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0003-thermal-add-imx-thermal-driver-support.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0004-ARM-i.MX6-Wandboard-add-wifi-bt-rfkill-driver.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0005-Add-IMX6Q-AHCI-support.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0006-imx-Add-IMX53-AHCI-support.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0007-imx6-enable-sata-clk-if-SATA_AHCI_PLATFORM.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0008-ARM-imx6q-update-the-sata-bits-definitions-of-gpr13.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0009-ahci_imx-add-ahci-sata-support-on-imx-platforms.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0010-ahci_imx-depend-on-CONFIG_MFD_SYSCON.patch - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0011-add-pcie-designware.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0012-pcie-backport-fixes.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0013-of-pci-Provide-support-for-parsing-PCI-DT-ranges-pro.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0014-ARM-imx6q-Add-PCIe-bits-to-GPR-syscon-definition.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0015-PCI-imx6-Add-support-for-i.MX6-PCIe-controller.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0016-imx6-pci-tweaks.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0017-ARM-imx-Add-LVDS-general-purpose-clocks-to-i.MX6Q.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0018-ARM-imx6q-clock-and-Kconfig-update-for-PCIe-support.patch - - # Patchset for Compulab Utilite. - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/utilite/linux-3.10-compulab-utilite-support.patch + # Apply Arm7-multiarch kernel patches. + cd $(DIR_APP) && xzcat $(DIR_DL)/arm7-multi-patches-$(A7M_PATCHES).patch.xz | patch -Np1 endif ifeq "$(KCFG)" "-rpi" From 22820bf25673d6d709f674796e64890af5578f2d Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 1 Nov 2014 19:57:51 +0100 Subject: [PATCH 187/297] kernel: use correct external modules at initrd build. --- config/rootfiles/common/i586/linux-initrd | 1 + config/rootfiles/common/i586/linux-initrd-pae | 1 + lfs/linux | 14 ++-- lfs/linux-initrd | 70 +++++++++++++++++++ make.sh | 6 +- 5 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 config/rootfiles/common/i586/linux-initrd create mode 100644 config/rootfiles/common/i586/linux-initrd-pae create mode 100644 lfs/linux-initrd diff --git a/config/rootfiles/common/i586/linux-initrd b/config/rootfiles/common/i586/linux-initrd new file mode 100644 index 000000000..567955063 --- /dev/null +++ b/config/rootfiles/common/i586/linux-initrd @@ -0,0 +1 @@ +#boot/initramfs-KVER-ipfire.img diff --git a/config/rootfiles/common/i586/linux-initrd-pae b/config/rootfiles/common/i586/linux-initrd-pae new file mode 100644 index 000000000..083efc245 --- /dev/null +++ b/config/rootfiles/common/i586/linux-initrd-pae @@ -0,0 +1 @@ +#boot/initramfs-KVER-ipfire-pae.img diff --git a/lfs/linux b/lfs/linux index 52efdbc0a..bcbdeb0ff 100644 --- a/lfs/linux +++ b/lfs/linux @@ -226,16 +226,6 @@ ifeq "$(MACHINE_TYPE)" "arm" done endif - # Create initramfs images - dracut --force --verbose --strip --xz /boot/initramfs-$(KVER)-$(VERSUFIX).img $(KVER)-$(VERSUFIX) - -ifeq "$(KCFG)" "-kirkwood" - cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-$(VERSUFIX).img uInit-$(VERSUFIX) -endif - -ifeq "$(KCFG)" "-multi" - cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-$(VERSUFIX).img uInit-$(VERSUFIX) -endif ifeq "$(LASTKERNEL)" "1" # Only do this once @@ -264,5 +254,9 @@ ifeq "$(LASTKERNEL)" "1" endif endif + #force new build of external modules and initrd if the kernel was rebuild + -rm -f /usr/src/log/*-kmod-$(VER)-$(VERSUFIX) + -rm -f /usr/src/log/linux-initrd-$(VER)-$(VERSUFIX) + @rm -rf $(DIR_SRC)/patch-o-matic* $(DIR_SRC)/iptables* $(DIR_SRC)/squashfs* $(DIR_SRC)/netfilter-layer7-* @$(POSTBUILD) diff --git a/lfs/linux-initrd b/lfs/linux-initrd new file mode 100644 index 000000000..1b048b50a --- /dev/null +++ b/lfs/linux-initrd @@ -0,0 +1,70 @@ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007-2014 IPFire Team # +# # +# 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 3 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, see . # +# # +############################################################################### + +############################################################################### +# Definitions +############################################################################### + +include Config + +VER = $(KVER) + +THISAPP = linux-initrd-$(VER) + +VERSUFIX=ipfire$(KCFG) + +TARGET = $(DIR_INFO)/$(THISAPP)-$(VERSUFIX) + +############################################################################### +# Top-level Rules +############################################################################### + +install : $(TARGET) + +check : $(patsubst %,$(DIR_CHK)/%,$(objects)) + +download :$(patsubst %,$(DIR_DL)/%,$(objects)) + +md5 : $(subst %,%_MD5,$(objects)) + +dist: + @$(PAK) + +############################################################################### +# Installation Details +############################################################################### + +$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) + @$(PREBUILD) + + # rebuild module deps + depmod -a $(KVER)-$(VERSUFIX) + + # Create initramfs images + dracut --force --verbose --strip --xz /boot/initramfs-$(KVER)-$(VERSUFIX).img $(KVER)-$(VERSUFIX) + +ifeq "$(KCFG)" "-kirkwood" + cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-$(VERSUFIX).img uInit-$(VERSUFIX) +endif + +ifeq "$(KCFG)" "-multi" + cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-$(VERSUFIX).img uInit-$(VERSUFIX) +endif + @$(POSTBUILD) diff --git a/make.sh b/make.sh index 6ea9b593b..3121fdd31 100755 --- a/make.sh +++ b/make.sh @@ -419,7 +419,7 @@ buildipfire() { ipfiremake e1000e KCFG="-pae" ipfiremake igb KCFG="-pae" ipfiremake ixgbe KCFG="-pae" - + ipfiremake linux-initrd KCFG="-pae" # x86 kernel build ipfiremake linux KCFG="" @@ -434,6 +434,7 @@ buildipfire() { ipfiremake e1000e KCFG="" ipfiremake igb KCFG="" ipfiremake ixgbe KCFG="" + ipfiremake linux-initrd KCFG="" ;; armv5tel) @@ -443,6 +444,7 @@ buildipfire() { # ipfiremake mISDN KCFG="-rpi" NOPCI=1 ipfiremake cryptodev KCFG="-rpi" # ipfiremake compat-drivers KCFG="-rpi" + ipfiremake linux-initrd KCFG="-rpi" # arm multi platform (Panda, Wandboard ...) kernel build ipfiremake linux KCFG="-multi" @@ -450,6 +452,7 @@ buildipfire() { ipfiremake e1000e KCFG="-multi" ipfiremake igb KCFG="-multi" ipfiremake ixgbe KCFG="-multi" + ipfiremake linux-initrd KCFG="-multi" # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build ipfiremake linux KCFG="-kirkwood" @@ -463,6 +466,7 @@ buildipfire() { ipfiremake e1000e KCFG="-kirkwood" ipfiremake igb KCFG="-kirkwood" ipfiremake ixgbe KCFG="-kirkwood" + ipfiremake linux-initrd KCFG="-kirkwood" ;; esac ipfiremake pkg-config From ec1e1421861bdf802719ce549540a1110c9cc1a8 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 2 Nov 2014 21:45:03 +0100 Subject: [PATCH 188/297] kernel: arm multiarch: enanble xhci. --- config/kernel/kernel.config.armv5tel-ipfire-multi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/kernel/kernel.config.armv5tel-ipfire-multi b/config/kernel/kernel.config.armv5tel-ipfire-multi index 110c19969..68ca356da 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-multi +++ b/config/kernel/kernel.config.armv5tel-ipfire-multi @@ -4383,7 +4383,7 @@ CONFIG_USB_WUSB_CBAF=m # USB Host Controller Drivers # # CONFIG_USB_C67X00_HCD is not set -# CONFIG_USB_XHCI_HCD is not set +CONFIG_USB_XHCI_HCD=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y From 8f6e429843317243f412486813533c610c186673 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 3 Nov 2014 18:35:56 +0100 Subject: [PATCH 189/297] installer: Correctly position buttons in dialogs --- src/installer/main.c | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index ad388e6a9..9262a400c 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -104,6 +104,37 @@ static int newtWinOkCancel(const char* title, const char* message, int width, in const char* btn_txt_ok, const char* btn_txt_cancel) { int ret = 1; + unsigned int btn_width_ok = strlen(btn_txt_ok); + unsigned int btn_width_cancel = strlen(btn_txt_cancel); + + // Maybe make the box wider to fix both buttons inside + unsigned int min_width = btn_width_ok + btn_width_cancel + 5; + if (width < min_width) + width = min_width; + + unsigned int btn_pos_ok = (width / 3) - (btn_width_ok / 2) - 1; + unsigned int btn_pos_cancel = (width * 2 / 3) - (btn_width_cancel / 2) - 1; + + // Move buttons a bit if they overlap + while ((btn_pos_ok + btn_width_ok + 5) > btn_pos_cancel) { + // Move the cancel button to the right if there is enough space left + if ((btn_pos_cancel + btn_width_cancel + 2) < width) { + ++btn_pos_cancel; + continue; + } + + // Move the OK button to the left if possible + if (btn_pos_ok > 1) { + --btn_pos_ok; + continue; + } + + // If they still overlap, we cannot fix the situtation + // and break. Should actually never get here, because we + // adjust the width of the window earlier. + break; + } + newtCenteredWindow(width, height, title); newtComponent form = newtForm(NULL, NULL, 0); @@ -112,12 +143,8 @@ static int newtWinOkCancel(const char* title, const char* message, int width, in newtTextboxSetText(textbox, message); newtFormAddComponent(form, textbox); - unsigned int btn_width_ok = strlen(btn_txt_ok); - unsigned int btn_width_cancel = strlen(btn_txt_cancel); - - newtComponent btn_ok = newtButton((width / 3) - (btn_width_ok / 2) - 2, height - 4, btn_txt_ok); - newtComponent btn_cancel = newtButton((width * 2 / 3) - (btn_width_cancel / 2) - 2, height - 4, - btn_txt_cancel); + newtComponent btn_ok = newtButton(btn_pos_ok, height - 4, btn_txt_ok); + newtComponent btn_cancel = newtButton(btn_pos_cancel, height - 4, btn_txt_cancel); newtFormAddComponents(form, btn_ok, btn_cancel, NULL); From 2fa7ff4e0d9434254ab7b10fd987de6dfe5a8ee7 Mon Sep 17 00:00:00 2001 From: David Kleuker Date: Mon, 3 Nov 2014 17:33:27 +0100 Subject: [PATCH 190/297] use bash instead of sh --- config/xen-image/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/xen-image/README b/config/xen-image/README index 531867311..49a28e2ad 100644 --- a/config/xen-image/README +++ b/config/xen-image/README @@ -21,5 +21,5 @@ other usefull commands from the Dom0: This script can also build a Citrix XenCenter xva image. (Need xz-aware xen version. Tested with Citrix Xen Server 6.2.5 beta) -- run "XEN_IMG_TYPE=xva sh xen-image-maker.sh" to build an xva image. +- run "XEN_IMG_TYPE=xva bash xen-image-maker.sh" to build an xva image. - import the vm with "xe vm-import file=ipfire.xfa" From 6cc8832e28a71b807063be71586f3853c233ab32 Mon Sep 17 00:00:00 2001 From: David Kleuker Date: Mon, 3 Nov 2014 17:43:25 +0100 Subject: [PATCH 191/297] fix typo --- config/xen-image/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/xen-image/README b/config/xen-image/README index 49a28e2ad..a23491fc9 100644 --- a/config/xen-image/README +++ b/config/xen-image/README @@ -22,4 +22,4 @@ other usefull commands from the Dom0: This script can also build a Citrix XenCenter xva image. (Need xz-aware xen version. Tested with Citrix Xen Server 6.2.5 beta) - run "XEN_IMG_TYPE=xva bash xen-image-maker.sh" to build an xva image. -- import the vm with "xe vm-import file=ipfire.xfa" +- import the vm with "xe vm-import file=ipfire.xva" From 282c47bcb414319c90f84c958141af4535e99841 Mon Sep 17 00:00:00 2001 From: Sascha Kilian Date: Fri, 31 Oct 2014 16:15:54 +0100 Subject: [PATCH 192/297] nagios+icinga plugins: removed ipv6 support --- lfs/icinga | 3 ++- lfs/nagios | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lfs/icinga b/lfs/icinga index 691d83d93..ab562f24c 100644 --- a/lfs/icinga +++ b/lfs/icinga @@ -112,7 +112,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) --prefix=/usr \ --libexecdir=/usr/lib/icinga/plugins \ --with-nagios-user=nobody \ - --with-nagios-group=nobody + --with-nagios-group=nobody \ + --without-ipv6 cd $(DIR_SRC)/nagios-plugins-$(PLUGIN_VER) && make $(MAKETUNING) # Install core diff --git a/lfs/nagios b/lfs/nagios index a9cef536f..868272bb3 100644 --- a/lfs/nagios +++ b/lfs/nagios @@ -102,7 +102,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cd $(DIR_SRC) && tar xfz $(DIR_DL)/nagios-plugins-1.4.13.tar.gz cd $(DIR_SRC)/nagios-plugins* && ./configure --prefix=/usr \ --libexecdir=/usr/lib/nagios \ - --with-nagios-user=nobody --with-nagios-group=nobody + --with-nagios-user=nobody --with-nagios-group=nobody \ + --without-ipv6 cd $(DIR_SRC)/nagios-plugins* && make cd $(DIR_SRC)/nagios-plugins* && make install chown -R nobody:nobody /var/nagios From c172d453c1e7962d0b1741640b0c030d21fab449 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 3 Nov 2014 23:41:09 +0100 Subject: [PATCH 193/297] Create Core Update 86 --- config/rootfiles/core/86/exclude | 20 +++++ .../core/86/filelists/armv5tel/initscripts | 1 + .../core/86/filelists/armv5tel/linux-kirkwood | 1 + .../core/86/filelists/armv5tel/linux-multi | 1 + .../core/86/filelists/armv5tel/linux-rpi | 1 + config/rootfiles/core/86/filelists/coreutils | 1 + config/rootfiles/core/86/filelists/dracut | 1 + config/rootfiles/core/86/filelists/files | 5 ++ config/rootfiles/core/86/filelists/i586/glibc | 1 + config/rootfiles/core/86/filelists/i586/grub | 1 + .../core/86/filelists/i586/initscripts | 1 + config/rootfiles/core/86/filelists/i586/linux | 1 + .../core/86/filelists/i586/linux-initrd | 1 + config/rootfiles/core/86/filelists/libcap | 1 + config/rootfiles/core/86/filelists/libsmooth | 1 + config/rootfiles/core/86/filelists/lvm2 | 1 + config/rootfiles/core/86/filelists/mdadm | 1 + config/rootfiles/core/86/filelists/misc-progs | 1 + .../core/86/filelists/multipath-tools | 1 + config/rootfiles/core/86/filelists/newt | 1 + config/rootfiles/core/86/filelists/parted | 1 + config/rootfiles/core/86/filelists/patch | 1 + config/rootfiles/core/86/filelists/pigz | 1 + config/rootfiles/core/86/filelists/setup | 1 + config/rootfiles/core/86/filelists/slang | 1 + config/rootfiles/core/86/filelists/strongswan | 1 + config/rootfiles/core/86/filelists/tzdata | 1 + config/rootfiles/core/86/filelists/xfsprogs | 1 + config/rootfiles/core/86/meta | 1 + config/rootfiles/core/86/update.sh | 77 +++++++++++++++++++ 30 files changed, 129 insertions(+) create mode 100644 config/rootfiles/core/86/exclude create mode 120000 config/rootfiles/core/86/filelists/armv5tel/initscripts create mode 120000 config/rootfiles/core/86/filelists/armv5tel/linux-kirkwood create mode 120000 config/rootfiles/core/86/filelists/armv5tel/linux-multi create mode 120000 config/rootfiles/core/86/filelists/armv5tel/linux-rpi create mode 120000 config/rootfiles/core/86/filelists/coreutils create mode 120000 config/rootfiles/core/86/filelists/dracut create mode 100644 config/rootfiles/core/86/filelists/files create mode 120000 config/rootfiles/core/86/filelists/i586/glibc create mode 120000 config/rootfiles/core/86/filelists/i586/grub create mode 120000 config/rootfiles/core/86/filelists/i586/initscripts create mode 120000 config/rootfiles/core/86/filelists/i586/linux create mode 120000 config/rootfiles/core/86/filelists/i586/linux-initrd create mode 120000 config/rootfiles/core/86/filelists/libcap create mode 120000 config/rootfiles/core/86/filelists/libsmooth create mode 120000 config/rootfiles/core/86/filelists/lvm2 create mode 120000 config/rootfiles/core/86/filelists/mdadm create mode 120000 config/rootfiles/core/86/filelists/misc-progs create mode 120000 config/rootfiles/core/86/filelists/multipath-tools create mode 120000 config/rootfiles/core/86/filelists/newt create mode 120000 config/rootfiles/core/86/filelists/parted create mode 120000 config/rootfiles/core/86/filelists/patch create mode 120000 config/rootfiles/core/86/filelists/pigz create mode 120000 config/rootfiles/core/86/filelists/setup create mode 120000 config/rootfiles/core/86/filelists/slang create mode 120000 config/rootfiles/core/86/filelists/strongswan create mode 120000 config/rootfiles/core/86/filelists/tzdata create mode 120000 config/rootfiles/core/86/filelists/xfsprogs create mode 100644 config/rootfiles/core/86/meta create mode 100644 config/rootfiles/core/86/update.sh diff --git a/config/rootfiles/core/86/exclude b/config/rootfiles/core/86/exclude new file mode 100644 index 000000000..18e9b4d24 --- /dev/null +++ b/config/rootfiles/core/86/exclude @@ -0,0 +1,20 @@ +boot/config.txt +etc/collectd.custom +etc/ipsec.conf +etc/ipsec.secrets +etc/ipsec.user.conf +etc/ipsec.user.secrets +etc/localtime +etc/shadow +etc/ssh/ssh_config +etc/ssh/sshd_config +etc/ssl/openssl.cnf +etc/sudoers +etc/sysconfig/firewall.local +etc/sysconfig/rc.local +etc/udev/rules.d/30-persistent-network.rules +srv/web/ipfire/html/proxy.pac +var/ipfire/ovpn +var/log/cache +var/state/dhcp/dhcpd.leases +var/updatecache diff --git a/config/rootfiles/core/86/filelists/armv5tel/initscripts b/config/rootfiles/core/86/filelists/armv5tel/initscripts new file mode 120000 index 000000000..af1d762ce --- /dev/null +++ b/config/rootfiles/core/86/filelists/armv5tel/initscripts @@ -0,0 +1 @@ +../../../../common/armv5tel/initscripts \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/armv5tel/linux-kirkwood b/config/rootfiles/core/86/filelists/armv5tel/linux-kirkwood new file mode 120000 index 000000000..72171071e --- /dev/null +++ b/config/rootfiles/core/86/filelists/armv5tel/linux-kirkwood @@ -0,0 +1 @@ +../../../../common/armv5tel/linux-kirkwood \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/armv5tel/linux-multi b/config/rootfiles/core/86/filelists/armv5tel/linux-multi new file mode 120000 index 000000000..204eb4c43 --- /dev/null +++ b/config/rootfiles/core/86/filelists/armv5tel/linux-multi @@ -0,0 +1 @@ +../../../../common/armv5tel/linux-multi \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/armv5tel/linux-rpi b/config/rootfiles/core/86/filelists/armv5tel/linux-rpi new file mode 120000 index 000000000..a651a498f --- /dev/null +++ b/config/rootfiles/core/86/filelists/armv5tel/linux-rpi @@ -0,0 +1 @@ +../../../../common/armv5tel/linux-rpi \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/coreutils b/config/rootfiles/core/86/filelists/coreutils new file mode 120000 index 000000000..7351ed2cf --- /dev/null +++ b/config/rootfiles/core/86/filelists/coreutils @@ -0,0 +1 @@ +../../../common/coreutils \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/dracut b/config/rootfiles/core/86/filelists/dracut new file mode 120000 index 000000000..160869946 --- /dev/null +++ b/config/rootfiles/core/86/filelists/dracut @@ -0,0 +1 @@ +../../../common/dracut \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/files b/config/rootfiles/core/86/filelists/files new file mode 100644 index 000000000..cfcb0cce1 --- /dev/null +++ b/config/rootfiles/core/86/filelists/files @@ -0,0 +1,5 @@ +etc/system-release +etc/issue +var/ipfire/header.pl +var/ipfire/langs +var/ipfire/lang.pl diff --git a/config/rootfiles/core/86/filelists/i586/glibc b/config/rootfiles/core/86/filelists/i586/glibc new file mode 120000 index 000000000..943021f19 --- /dev/null +++ b/config/rootfiles/core/86/filelists/i586/glibc @@ -0,0 +1 @@ +../../../../common/i586/glibc \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/i586/grub b/config/rootfiles/core/86/filelists/i586/grub new file mode 120000 index 000000000..feb236a22 --- /dev/null +++ b/config/rootfiles/core/86/filelists/i586/grub @@ -0,0 +1 @@ +../../../../common/i586/grub \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/i586/initscripts b/config/rootfiles/core/86/filelists/i586/initscripts new file mode 120000 index 000000000..12d877060 --- /dev/null +++ b/config/rootfiles/core/86/filelists/i586/initscripts @@ -0,0 +1 @@ +../../../../common/i586/initscripts \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/i586/linux b/config/rootfiles/core/86/filelists/i586/linux new file mode 120000 index 000000000..693ec4bbf --- /dev/null +++ b/config/rootfiles/core/86/filelists/i586/linux @@ -0,0 +1 @@ +../../../../common/i586/linux \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/i586/linux-initrd b/config/rootfiles/core/86/filelists/i586/linux-initrd new file mode 120000 index 000000000..32a03e6a9 --- /dev/null +++ b/config/rootfiles/core/86/filelists/i586/linux-initrd @@ -0,0 +1 @@ +../../../../common/i586/linux-initrd \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/libcap b/config/rootfiles/core/86/filelists/libcap new file mode 120000 index 000000000..ed67d950a --- /dev/null +++ b/config/rootfiles/core/86/filelists/libcap @@ -0,0 +1 @@ +../../../common/libcap \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/libsmooth b/config/rootfiles/core/86/filelists/libsmooth new file mode 120000 index 000000000..616418296 --- /dev/null +++ b/config/rootfiles/core/86/filelists/libsmooth @@ -0,0 +1 @@ +../../../common/libsmooth \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/lvm2 b/config/rootfiles/core/86/filelists/lvm2 new file mode 120000 index 000000000..d640870b7 --- /dev/null +++ b/config/rootfiles/core/86/filelists/lvm2 @@ -0,0 +1 @@ +../../../common/lvm2 \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/mdadm b/config/rootfiles/core/86/filelists/mdadm new file mode 120000 index 000000000..465808b20 --- /dev/null +++ b/config/rootfiles/core/86/filelists/mdadm @@ -0,0 +1 @@ +../../../common/mdadm \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/misc-progs b/config/rootfiles/core/86/filelists/misc-progs new file mode 120000 index 000000000..7223caddd --- /dev/null +++ b/config/rootfiles/core/86/filelists/misc-progs @@ -0,0 +1 @@ +../../../common/misc-progs \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/multipath-tools b/config/rootfiles/core/86/filelists/multipath-tools new file mode 120000 index 000000000..9ff63237c --- /dev/null +++ b/config/rootfiles/core/86/filelists/multipath-tools @@ -0,0 +1 @@ +../../../common/multipath-tools \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/newt b/config/rootfiles/core/86/filelists/newt new file mode 120000 index 000000000..fb3eb20c3 --- /dev/null +++ b/config/rootfiles/core/86/filelists/newt @@ -0,0 +1 @@ +../../../common/newt \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/parted b/config/rootfiles/core/86/filelists/parted new file mode 120000 index 000000000..89195d8e8 --- /dev/null +++ b/config/rootfiles/core/86/filelists/parted @@ -0,0 +1 @@ +../../../common/parted \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/patch b/config/rootfiles/core/86/filelists/patch new file mode 120000 index 000000000..27a38252a --- /dev/null +++ b/config/rootfiles/core/86/filelists/patch @@ -0,0 +1 @@ +../../../common/patch \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/pigz b/config/rootfiles/core/86/filelists/pigz new file mode 120000 index 000000000..696f8f870 --- /dev/null +++ b/config/rootfiles/core/86/filelists/pigz @@ -0,0 +1 @@ +../../../common/pigz \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/setup b/config/rootfiles/core/86/filelists/setup new file mode 120000 index 000000000..209374bbc --- /dev/null +++ b/config/rootfiles/core/86/filelists/setup @@ -0,0 +1 @@ +../../../common/setup \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/slang b/config/rootfiles/core/86/filelists/slang new file mode 120000 index 000000000..228e45ed4 --- /dev/null +++ b/config/rootfiles/core/86/filelists/slang @@ -0,0 +1 @@ +../../../common/slang \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/strongswan b/config/rootfiles/core/86/filelists/strongswan new file mode 120000 index 000000000..90c727e26 --- /dev/null +++ b/config/rootfiles/core/86/filelists/strongswan @@ -0,0 +1 @@ +../../../common/strongswan \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/tzdata b/config/rootfiles/core/86/filelists/tzdata new file mode 120000 index 000000000..5a6e3252f --- /dev/null +++ b/config/rootfiles/core/86/filelists/tzdata @@ -0,0 +1 @@ +../../../common/tzdata \ No newline at end of file diff --git a/config/rootfiles/core/86/filelists/xfsprogs b/config/rootfiles/core/86/filelists/xfsprogs new file mode 120000 index 000000000..91032964d --- /dev/null +++ b/config/rootfiles/core/86/filelists/xfsprogs @@ -0,0 +1 @@ +../../../common/xfsprogs \ No newline at end of file diff --git a/config/rootfiles/core/86/meta b/config/rootfiles/core/86/meta new file mode 100644 index 000000000..d547fa86f --- /dev/null +++ b/config/rootfiles/core/86/meta @@ -0,0 +1 @@ +DEPS="" diff --git a/config/rootfiles/core/86/update.sh b/config/rootfiles/core/86/update.sh new file mode 100644 index 000000000..7911a11f5 --- /dev/null +++ b/config/rootfiles/core/86/update.sh @@ -0,0 +1,77 @@ +#!/bin/bash +############################################################################ +# # +# This file is part of the IPFire Firewall. # +# # +# IPFire 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 3 of the License, or # +# (at your option) any later version. # +# # +# IPFire 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 IPFire; if not, write to the Free Software # +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +# # +# Copyright (C) 2014 IPFire-Team . # +# # +############################################################################ +# +. /opt/pakfire/lib/functions.sh +/usr/local/bin/backupctrl exclude >/dev/null 2>&1 + +# Find root device +function find_root_device() { + while read -r dev mountpoint fs options; do + # Skip generic entries + [ "${dev}" = "rootfs" ] && continue + + if [ "${mountpoint}" = "/" ]; then + echo "${mountpoint}" + break + fi + done < /proc/mounts +} + +# Remove old core updates from pakfire cache to save space... +core=86 +for (( i=1; i<=$core; i++ )) +do + rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire +done + +# Stop services + +# Remove old files + +# Extract files +extract_files + +# Start services + +# Update Language cache +perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" + +# Upgrade to GRUB2 +root_device="$(find_root_device)" +if ! grub-install "${root_device}"; then + if ! grub-install --force "${root_device}"; then + echo "Could not update the bootloader!" + fi +fi + +sync + +# This update need a reboot... +touch /var/run/need_reboot + +# Finish +/etc/init.d/fireinfo start +sendprofile + +# Don't report the exitcode last command +exit 0 From e076addfdbbfd1307346b52e681c0e6724196b83 Mon Sep 17 00:00:00 2001 From: Dirk Wagner Date: Tue, 4 Nov 2014 19:11:25 +0100 Subject: [PATCH 194/297] libsrtp: update to 1.5 --- lfs/libsrtp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lfs/libsrtp b/lfs/libsrtp index 9eb0cd2a2..fa0475fc6 100644 --- a/lfs/libsrtp +++ b/lfs/libsrtp @@ -24,10 +24,9 @@ include Config -VER = 1.4.5 -SUBVER = 99426a54 +VER = 1.5.0 THISAPP = libsrtp-$(VER) -DL_FILE = $(THISAPP)-$(SUBVER).tar.gz +DL_FILE = $(THISAPP).tar.gz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) @@ -40,7 +39,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 05bfbe63a2a27343889c2436c836110a +$(DL_FILE)_MD5 = ec49ba558b4fd056114df2c76935aa8e install : $(TARGET) From 8667a65b4e57fd2b2c375e1b580c802385924bda Mon Sep 17 00:00:00 2001 From: Dirk Wagner Date: Tue, 4 Nov 2014 19:12:55 +0100 Subject: [PATCH 195/297] asterisk addon: update to 11.13.1 --- config/rootfiles/packages/asterisk | 10 ++-------- lfs/asterisk | 17 ++++++++--------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/config/rootfiles/packages/asterisk b/config/rootfiles/packages/asterisk index f7869f1f6..332c22b96 100755 --- a/config/rootfiles/packages/asterisk +++ b/config/rootfiles/packages/asterisk @@ -870,16 +870,10 @@ var/lib/asterisk/sounds/digits/de/xh-8x.gsm var/lib/asterisk/sounds/digits/de/xh-9x.gsm var/lib/asterisk/sounds/digits/de/yesterday.gsm var/lib/asterisk/sounds/en -var/lib/asterisk/sounds/en/.asterisk-core-sounds-en-gsm-1.4.25 -var/lib/asterisk/sounds/en/.asterisk-extra-sounds-en-gsm-1.4.14 +var/lib/asterisk/sounds/en/.asterisk-core-sounds-en-gsm-1.4.26 +var/lib/asterisk/sounds/en/.asterisk-extra-sounds-en-gsm-1.4.15 var/lib/asterisk/sounds/en/1-for-am-2-for-pm.gsm var/lib/asterisk/sounds/en/1-yes-2-no.gsm -var/lib/asterisk/sounds/en/CHANGES-asterisk-core-en-1.4.25 -var/lib/asterisk/sounds/en/CHANGES-asterisk-extra-en-1.4.14 -var/lib/asterisk/sounds/en/CREDITS-asterisk-core-en-1.4.25 -var/lib/asterisk/sounds/en/CREDITS-asterisk-extra-en-1.4.14 -var/lib/asterisk/sounds/en/LICENSE-asterisk-core-en-1.4.25 -var/lib/asterisk/sounds/en/LICENSE-asterisk-extra-en-1.4.14 var/lib/asterisk/sounds/en/OfficeSpace.gsm var/lib/asterisk/sounds/en/Randulo-allison.gsm var/lib/asterisk/sounds/en/SIP_Test_Failure.gsm diff --git a/lfs/asterisk b/lfs/asterisk index 8896392aa..6ae43e3aa 100755 --- a/lfs/asterisk +++ b/lfs/asterisk @@ -20,7 +20,7 @@ include Config -VER = 11.10.0 +VER = 11.13.1 THISAPP = asterisk-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -28,7 +28,7 @@ DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = asterisk -PAK_VER = 11 +PAK_VER = 12 DEPS = "sqlite" @@ -38,16 +38,16 @@ DEPS = "sqlite" objects = $(DL_FILE) \ asterisk-1.4-de-prompts.tar.gz \ - asterisk-extra-sounds-en-gsm-1.4.14.tar.gz \ + asterisk-extra-sounds-en-gsm-1.4.15.tar.gz \ asterisk-moh-opsound-gsm-2.03.tar.gz $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -asterisk-extra-sounds-en-gsm-1.4.14.tar.gz = $(URL_IPFIRE)/asterisk-extra-sounds-en-gsm-1.4.14.tar.gz +asterisk-extra-sounds-en-gsm-1.4.15.tar.gz = $(URL_IPFIRE)/asterisk-extra-sounds-en-gsm-1.4.15.tar.gz asterisk-moh-opsound-gsm-2.03.tar.gz = $(URL_IPFIRE)/asterisk-moh-opsound-gsm-2.03.tar.gz asterisk-1.4-de-prompts.tar.gz = $(URL_IPFIRE)/asterisk-1.4-de-prompts.tar.gz -$(DL_FILE)_MD5 = 47384cd1ff48b306dca6e03027b023bd -asterisk-extra-sounds-en-gsm-1.4.14.tar.gz_MD5 = ffc2e0ffd783c03fef5b75277dba0896 +$(DL_FILE)_MD5 = 20995d419dace207f828a3a8463c22e1 +asterisk-extra-sounds-en-gsm-1.4.15.tar.gz_MD5 = 5099fc65f49008e33ba7fb043a4ec995 asterisk-moh-opsound-gsm-2.03.tar.gz_MD5 = 09066f55f1358f298bc1a6e4678a3ddf asterisk-1.4-de-prompts.tar.gz_MD5 = 626a2b95071a5505851e43874dfbfd5c @@ -87,7 +87,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) # patch asterisk cd $(DIR_APP) && patch -p4 < $(DIR_SRC)/src/patches/asterisk-no-ffmpeg.patch - cd $(DIR_APP) && patch -p1 < $(DIR_SRC)/src/patches/asterisk-ssl-reader-should-block.patch # configure asterisk cd $(DIR_APP) && ./configure --prefix=/usr --sysconfdir=/var/ipfire \ @@ -112,7 +111,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) menuselect.makeopts # add additional sounds - cd $(DIR_APP) && cp -fv $(DIR_DL)/asterisk-extra-sounds-en-gsm-1.4.14.tar.gz $(DIR_APP)/sounds/ + cd $(DIR_APP) && cp -fv $(DIR_DL)/asterisk-extra-sounds-en-gsm-1.4.15.tar.gz $(DIR_APP)/sounds/ cd $(DIR_APP) && cp -fv $(DIR_DL)/asterisk-moh-opsound-gsm-2.03.tar.gz $(DIR_APP)/sounds/ # Fix wrong cpu optimization (march=armv5tel) @@ -140,7 +139,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) chown nobody:nobody -R /var/ipfire/asterisk chown nobody:nobody -R /var/lib/asterisk - # be sure all source is removed +# be sure all source is removed @rm -rf $(DIR_APP) $(DIR_SRC)/asterisk-* $(DIR_SRC)/libsrtp* # remember backup-location From 3f491bba9212f08aa0d117c07e2aef70b6cda9a2 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Tue, 4 Nov 2014 20:16:17 +0100 Subject: [PATCH 196/297] kernel: enable carl97xx hwrng. --- config/kernel/kernel.config.armv5tel-ipfire-kirkwood | 2 +- config/kernel/kernel.config.armv5tel-ipfire-multi | 2 +- config/kernel/kernel.config.armv5tel-ipfire-rpi | 2 +- config/kernel/kernel.config.i586-ipfire | 2 +- config/kernel/kernel.config.i586-ipfire-pae | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood index 67d0d04e2..96e0252cd 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood +++ b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood @@ -2083,7 +2083,7 @@ CONFIG_ATH9K_HTC=m CONFIG_CARL9170=m CONFIG_CARL9170_LEDS=y CONFIG_CARL9170_WPC=y -# CONFIG_CARL9170_HWRNG is not set +CONFIG_CARL9170_HWRNG=y # CONFIG_ATH6KL is not set CONFIG_AR5523=m CONFIG_WIL6210=m diff --git a/config/kernel/kernel.config.armv5tel-ipfire-multi b/config/kernel/kernel.config.armv5tel-ipfire-multi index 68ca356da..c93a602c4 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-multi +++ b/config/kernel/kernel.config.armv5tel-ipfire-multi @@ -2279,7 +2279,7 @@ CONFIG_ATH9K_HTC=m CONFIG_CARL9170=m CONFIG_CARL9170_LEDS=y CONFIG_CARL9170_WPC=y -# CONFIG_CARL9170_HWRNG is not set +CONFIG_CARL9170_HWRNG=y # CONFIG_ATH6KL is not set CONFIG_AR5523=m # CONFIG_WIL6210 is not set diff --git a/config/kernel/kernel.config.armv5tel-ipfire-rpi b/config/kernel/kernel.config.armv5tel-ipfire-rpi index 269c633e7..897e1f310 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-rpi +++ b/config/kernel/kernel.config.armv5tel-ipfire-rpi @@ -1515,7 +1515,7 @@ CONFIG_ATH9K_HTC=m CONFIG_CARL9170=m CONFIG_CARL9170_LEDS=y CONFIG_CARL9170_WPC=y -# CONFIG_CARL9170_HWRNG is not set +CONFIG_CARL9170_HWRNG=y CONFIG_ATH6KL=m # CONFIG_ATH6KL_SDIO is not set CONFIG_ATH6KL_USB=m diff --git a/config/kernel/kernel.config.i586-ipfire b/config/kernel/kernel.config.i586-ipfire index 03d0eadae..5869b8818 100644 --- a/config/kernel/kernel.config.i586-ipfire +++ b/config/kernel/kernel.config.i586-ipfire @@ -2243,7 +2243,7 @@ CONFIG_ATH9K_HTC=m CONFIG_CARL9170=m CONFIG_CARL9170_LEDS=y CONFIG_CARL9170_WPC=y -# CONFIG_CARL9170_HWRNG is not set +CONFIG_CARL9170_HWRNG=y # CONFIG_ATH6KL is not set CONFIG_AR5523=m CONFIG_WIL6210=m diff --git a/config/kernel/kernel.config.i586-ipfire-pae b/config/kernel/kernel.config.i586-ipfire-pae index ff3a9eea7..54cfb0642 100644 --- a/config/kernel/kernel.config.i586-ipfire-pae +++ b/config/kernel/kernel.config.i586-ipfire-pae @@ -2260,7 +2260,7 @@ CONFIG_ATH9K_HTC=m CONFIG_CARL9170=m CONFIG_CARL9170_LEDS=y CONFIG_CARL9170_WPC=y -# CONFIG_CARL9170_HWRNG is not set +CONFIG_CARL9170_HWRNG=y # CONFIG_ATH6KL is not set CONFIG_AR5523=m CONFIG_WIL6210=m From 21147a00f2ab7c6fe19c2dde3102227f25176c52 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Tue, 4 Nov 2014 20:21:05 +0100 Subject: [PATCH 197/297] kernel: readd kirkwood legacy boot code. --- .../kernel.config.armv5tel-ipfire-kirkwood | 11 + lfs/linux | 1 + .../linux-3.14.22-kirkwood_legacy_boot.patch | 1562 +++++++++++++++++ 3 files changed, 1574 insertions(+) create mode 100644 src/patches/linux-3.14.22-kirkwood_legacy_boot.patch diff --git a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood index 96e0252cd..64d0300ce 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood +++ b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood @@ -333,6 +333,17 @@ CONFIG_MACH_OPENRD_ULTIMATE=y CONFIG_MACH_RD88F6192_NAS=y CONFIG_MACH_RD88F6281=y CONFIG_MACH_T5325=y +CONFIG_MACH_DB88F6281_BP=y +CONFIG_MACH_DOCKSTAR=y +CONFIG_MACH_SHEEVAPLUG=y +CONFIG_MACH_ESATA_SHEEVAPLUG=y +CONFIG_MACH_GURUPLUG=y +CONFIG_MACH_INETSPACE_V2=y +CONFIG_MACH_NETSPACE_MAX_V2=y +CONFIG_MACH_NETSPACE_V2=y +CONFIG_MACH_DREAMPLUG=y +CONFIG_MACH_ICONNECT=y +CONFIG_MACH_NAS6210=y CONFIG_MACH_TS219=y CONFIG_MACH_TS41X=y diff --git a/lfs/linux b/lfs/linux index bcbdeb0ff..8a1ee9c7c 100644 --- a/lfs/linux +++ b/lfs/linux @@ -161,6 +161,7 @@ endif ifeq "$(KCFG)" "-kirkwood" cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.10-mv_cesa_disable_failing_hmac_sha1.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch endif ifeq "$(KCFG)" "-multi" diff --git a/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch b/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch new file mode 100644 index 000000000..27dfeddca --- /dev/null +++ b/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch @@ -0,0 +1,1562 @@ +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/db88f6281-bp-setup.c linux-3.14.22/arch/arm/mach-kirkwood/db88f6281-bp-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/db88f6281-bp-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/db88f6281-bp-setup.c 2014-10-15 08:32:29.000000000 +0200 +@@ -0,0 +1,108 @@ ++/* ++ * arch/arm/mach-kirkwood/db88f6281-bp-setup.c ++ * ++ * Marvell DB-88F6281-BP Development Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct mtd_partition db88f6281_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = SZ_4M ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data db88f6281_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(8), ++}; ++ ++static struct mv_sata_platform_data db88f6281_sata_data = { ++ .n_ports = 2, ++}; ++ ++static struct mvsdio_platform_data db88f6281_mvsdio_data = { ++ .gpio_write_protect = 37, ++ .gpio_card_detect = 38, ++}; ++ ++static unsigned int db88f6281_mpp_config[] __initdata = { ++ MPP0_NF_IO2, ++ MPP1_NF_IO3, ++ MPP2_NF_IO4, ++ MPP3_NF_IO5, ++ MPP4_NF_IO6, ++ MPP5_NF_IO7, ++ MPP18_NF_IO0, ++ MPP19_NF_IO1, ++ MPP37_GPIO, ++ MPP38_GPIO, ++ 0 ++}; ++ ++static void __init db88f6281_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(db88f6281_mpp_config); ++ ++ kirkwood_nand_init(ARRAY_AND_SIZE(db88f6281_nand_parts), 25); ++ kirkwood_ehci_init(); ++ kirkwood_ge00_init(&db88f6281_ge00_data); ++ kirkwood_sata_init(&db88f6281_sata_data); ++ kirkwood_uart0_init(); ++ kirkwood_sdio_init(&db88f6281_mvsdio_data); ++} ++ ++static int __init db88f6281_pci_init(void) ++{ ++ if (machine_is_db88f6281_bp()) { ++ u32 dev, rev; ++ ++ kirkwood_pcie_id(&dev, &rev); ++ if (dev == MV88F6282_DEV_ID) ++ kirkwood_pcie_init(KW_PCIE1 | KW_PCIE0); ++ else ++ kirkwood_pcie_init(KW_PCIE0); ++ } ++ return 0; ++} ++subsys_initcall(db88f6281_pci_init); ++ ++MACHINE_START(DB88F6281_BP, "Marvell DB-88F6281-BP Development Board") ++ /* Maintainer: Saeed Bishara */ ++ .atag_offset = 0x100, ++ .init_machine = db88f6281_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/dockstar-setup.c linux-3.14.22/arch/arm/mach-kirkwood/dockstar-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/dockstar-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/dockstar-setup.c 2014-10-15 08:32:29.000000000 +0200 +@@ -0,0 +1,111 @@ ++/* ++ * arch/arm/mach-kirkwood/dockstar-setup.c ++ * ++ * Seagate FreeAgent DockStar Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct mtd_partition dockstar_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = SZ_4M ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data dockstar_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(0), ++}; ++ ++static struct gpio_led dockstar_led_pins[] = { ++ { ++ .name = "dockstar:green:health", ++ .default_trigger = "default-on", ++ .gpio = 46, ++ .active_low = 1, ++ }, ++ { ++ .name = "dockstar:orange:misc", ++ .default_trigger = "none", ++ .gpio = 47, ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_led_platform_data dockstar_led_data = { ++ .leds = dockstar_led_pins, ++ .num_leds = ARRAY_SIZE(dockstar_led_pins), ++}; ++ ++static struct platform_device dockstar_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &dockstar_led_data, ++ } ++}; ++ ++static unsigned int dockstar_mpp_config[] __initdata = { ++ MPP29_GPIO, /* USB Power Enable */ ++ MPP46_GPIO, /* LED green */ ++ MPP47_GPIO, /* LED orange */ ++ 0 ++}; ++ ++static void __init dockstar_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ ++ /* setup gpio pin select */ ++ kirkwood_mpp_conf(dockstar_mpp_config); ++ ++ kirkwood_uart0_init(); ++ kirkwood_nand_init(ARRAY_AND_SIZE(dockstar_nand_parts), 25); ++ ++ if (gpio_request(29, "USB Power Enable") != 0 || ++ gpio_direction_output(29, 1) != 0) ++ pr_err("can't set up GPIO 29 (USB Power Enable)\n"); ++ kirkwood_ehci_init(); ++ ++ kirkwood_ge00_init(&dockstar_ge00_data); ++ ++ platform_device_register(&dockstar_leds); ++} ++ ++MACHINE_START(DOCKSTAR, "Seagate FreeAgent DockStar") ++ .atag_offset = 0x100, ++ .init_machine = dockstar_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/dreamplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/dreamplug-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/dreamplug-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/dreamplug-setup.c 2014-11-04 00:25:48.383688273 +0100 +@@ -0,0 +1,151 @@ ++/* ++ * arch/arm/mach-kirkwood/dreamplug-setup.c ++ * ++ * Marvell DreamPlug Reference Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static const struct flash_platform_data dreamplug_spi_slave_data = { ++ .type = "mx25l1606e", ++}; ++ ++static struct spi_board_info __initdata dreamplug_spi_slave_info[] = { ++ { ++ .modalias = "m25p80", ++ .platform_data = &dreamplug_spi_slave_data, ++ .irq = -1, ++ .max_speed_hz = 50000000, ++ .bus_num = 0, ++ .chip_select = 0, ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data dreamplug_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(0), ++}; ++ ++static struct mv643xx_eth_platform_data dreamplug_ge01_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(1), ++}; ++ ++static struct mv_sata_platform_data dreamplug_sata_data = { ++ .n_ports = 1, ++}; ++ ++static struct mvsdio_platform_data dreamplug_mvsdio_data = { ++ /* unfortunately the CD signal has not been connected */ ++}; ++ ++static struct gpio_led dreamplug_led_pins[] = { ++ { ++ .name = "dreamplug:blue:bluetooth", ++ .gpio = 47, ++ .active_low = 1, ++ }, ++ { ++ .name = "dreamplug:green:wlan", ++ .gpio = 48, ++ .active_low = 1, ++ }, ++ { ++ .name = "dreamplug:blue:wlanap", ++ .gpio = 49, ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_led_platform_data dreamplug_led_data = { ++ .leds = dreamplug_led_pins, ++ .num_leds = ARRAY_SIZE(dreamplug_led_pins), ++}; ++ ++static struct platform_device dreamplug_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &dreamplug_led_data, ++ } ++}; ++ ++static unsigned int dreamplug_mpp_config[] __initdata = { ++ MPP0_SPI_SCn, ++ MPP1_SPI_MOSI, ++ MPP2_SPI_SCK, ++ MPP3_SPI_MISO, ++ MPP4_GPIO, ++ MPP5_GPO, ++ MPP7_GPO, ++ MPP18_GPO, ++ MPP19_GPO, ++ MPP47_GPIO, /* B_BLED */ ++ MPP48_GPIO, /* W_GLED */ ++ MPP49_GPIO, /* W_BLED */ ++ 0 ++}; ++ ++static void __init dreamplug_legacy_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(dreamplug_mpp_config); ++ ++ kirkwood_uart0_init(); ++ ++ spi_register_board_info(dreamplug_spi_slave_info, ++ ARRAY_SIZE(dreamplug_spi_slave_info)); ++ ++ kirkwood_spi_init(); ++ kirkwood_ehci_init(); ++ ++ kirkwood_ge00_init(&dreamplug_ge00_data); ++ kirkwood_ge01_init(&dreamplug_ge01_data); ++ kirkwood_sata_init(&dreamplug_sata_data); ++ kirkwood_sdio_init(&dreamplug_mvsdio_data); ++ ++ platform_device_register(&dreamplug_leds); ++} ++ ++MACHINE_START(DREAMPLUG, "Marvell DreamPlug Reference Board") ++ /* Maintainer: Siddarth Gore marvell.com> */ ++ .atag_offset = 0x100, ++ .init_machine = dreamplug_legacy_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++ ++MACHINE_START(DREAMPLUG1, "Marvell DreamPlug Reference Board") ++ .atag_offset = 0x100, ++ .init_machine = dreamplug_legacy_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++ ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/guruplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/guruplug-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/guruplug-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/guruplug-setup.c 2014-11-04 00:25:48.383688273 +0100 +@@ -0,0 +1,135 @@ ++/* ++ * arch/arm/mach-kirkwood/guruplug-setup.c ++ * ++ * Marvell GuruPlug Reference Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct mtd_partition guruplug_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M, ++ .mask_flags = MTD_WRITEABLE, /* read only */ ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = SZ_4M, ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL, ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data guruplug_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(0), ++}; ++ ++static struct mv643xx_eth_platform_data guruplug_ge01_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(1), ++}; ++ ++static struct mv_sata_platform_data guruplug_sata_data = { ++ .n_ports = 1, ++}; ++ ++static struct mvsdio_platform_data guruplug_mvsdio_data = { ++ /* unfortunately the CD signal has not been connected */ ++ .gpio_card_detect = -1, ++ .gpio_write_protect = -1, ++}; ++ ++static struct gpio_led guruplug_led_pins[] = { ++ { ++ .name = "guruplug:red:health", ++ .gpio = 46, ++ .active_low = 1, ++ }, ++ { ++ .name = "guruplug:green:health", ++ .gpio = 47, ++ .active_low = 1, ++ }, ++ { ++ .name = "guruplug:red:wmode", ++ .gpio = 48, ++ .active_low = 1, ++ }, ++ { ++ .name = "guruplug:green:wmode", ++ .gpio = 49, ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_led_platform_data guruplug_led_data = { ++ .leds = guruplug_led_pins, ++ .num_leds = ARRAY_SIZE(guruplug_led_pins), ++}; ++ ++static struct platform_device guruplug_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &guruplug_led_data, ++ } ++}; ++ ++static unsigned int guruplug_mpp_config[] __initdata = { ++ MPP46_GPIO, /* M_RLED */ ++ MPP47_GPIO, /* M_GLED */ ++ MPP48_GPIO, /* B_RLED */ ++ MPP49_GPIO, /* B_GLED */ ++ 0 ++}; ++ ++static void __init guruplug_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(guruplug_mpp_config); ++ ++ kirkwood_uart0_init(); ++ kirkwood_nand_init(ARRAY_AND_SIZE(guruplug_nand_parts), 25); ++ ++ kirkwood_ehci_init(); ++ kirkwood_ge00_init(&guruplug_ge00_data); ++ kirkwood_ge01_init(&guruplug_ge01_data); ++ kirkwood_sata_init(&guruplug_sata_data); ++ kirkwood_sdio_init(&guruplug_mvsdio_data); ++ ++ platform_device_register(&guruplug_leds); ++} ++ ++MACHINE_START(GURUPLUG, "Marvell GuruPlug Reference Board") ++ /* Maintainer: Siddarth Gore */ ++ .atag_offset = 0x100, ++ .init_machine = guruplug_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/iconnect-setup.c linux-3.14.22/arch/arm/mach-kirkwood/iconnect-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/iconnect-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/iconnect-setup.c 2014-11-04 00:25:48.383688273 +0100 +@@ -0,0 +1,214 @@ ++/* ++ * arch/arm/mach-kirkwood/iconnect-setup.c ++ * ++ * Iomega iConnect Wireless Data Station Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct mtd_partition iconnect_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M, ++ .mask_flags = MTD_WRITEABLE, /* read only */ ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0x440000, ++ }, { ++ .name = "uInit", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0x440000, ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL, ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data iconnect_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(0xB), ++}; ++ ++static struct gpio_led iconnect_led_pins[] = { ++ { ++ .name = "iconnect:led_level", ++ .default_trigger = "default-on", ++ .gpio = 41, ++ .active_low = 0, ++ }, ++ ++ { ++ .name = "iconnect:blue:power", ++ .default_trigger = "default-on", ++ .gpio = 42, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:red:power", ++ .default_trigger = "none", ++ .gpio = 43, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:blue:usb_1", ++ .default_trigger = "none", ++ .gpio = 44, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:blue:usb_2", ++ .default_trigger = "none", ++ .gpio = 45, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:blue:usb_3", ++ .default_trigger = "none", ++ .gpio = 46, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:blue:usb_4", ++ .default_trigger = "none", ++ .gpio = 47, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:blue:otb", ++ .default_trigger = "none", ++ .gpio = 48, ++ .active_low = 0, ++ }, ++}; ++ ++static struct gpio_led_platform_data iconnect_led_data = { ++ .leds = iconnect_led_pins, ++ .num_leds = ARRAY_SIZE(iconnect_led_pins), ++}; ++ ++static struct platform_device iconnect_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &iconnect_led_data, ++ } ++}; ++ ++static struct gpio_keys_button iconnect_buttons[] = { ++ { ++ .code = KEY_COPY, ++ .gpio = 35, ++ .desc = "OTB Button", ++ .active_low = 1, ++ }, ++ { ++ .code = KEY_RESTART, ++ .gpio = 12, ++ .desc = "Reset", ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_keys_platform_data iconnect_button_data = { ++ .buttons = iconnect_buttons, ++ .nbuttons = ARRAY_SIZE(iconnect_buttons), ++}; ++ ++static struct platform_device iconnect_button_device = { ++ .name = "gpio-keys", ++ .id = -1, ++ .num_resources = 0, ++ .dev = { ++ .platform_data = &iconnect_button_data, ++ } ++}; ++ ++static unsigned int iconnect_mpp_config[] __initdata = { ++ MPP0_NF_IO2, ++ MPP1_NF_IO3, ++ MPP2_NF_IO4, ++ MPP3_NF_IO5, ++ MPP4_NF_IO6, ++ MPP5_NF_IO7, ++ MPP18_NF_IO0, ++ MPP19_NF_IO1, ++ MPP12_GPIO, /* Reset Button */ ++ MPP35_GPIO, /* OTB Button */ ++ ++ MPP41_GPIO, /* LED Level */ ++ MPP42_GPIO, /* Power LED blue */ ++ MPP43_GPIO, /* Power LED red */ ++ MPP44_GPIO, /* USB LED 1 */ ++ MPP45_GPIO, /* USB LED 2 */ ++ MPP46_GPIO, /* USB LED 3 */ ++ MPP47_GPIO, /* USB LED 4 */ ++ MPP48_GPIO, /* OTB LED */ ++ 0 ++}; ++ ++static struct i2c_board_info __initdata iconnect_i2c = { ++ I2C_BOARD_INFO("lm63", 0x4c), ++}; ++ ++static void __init iconnect_legacy_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(iconnect_mpp_config); ++ ++ kirkwood_nand_init(ARRAY_AND_SIZE(iconnect_nand_parts), 25); ++ kirkwood_ehci_init(); ++ kirkwood_ge00_init(&iconnect_ge00_data); ++ ++ kirkwood_uart0_init(); ++ platform_device_register(&iconnect_leds); ++ platform_device_register(&iconnect_button_device); ++ ++ kirkwood_i2c_init(); ++ i2c_register_board_info(0, &iconnect_i2c,1); ++} ++ ++static int __init iconnect_pci_init(void) ++{ ++ if (machine_is_iconnect()) { ++ kirkwood_pcie_init(KW_PCIE0); ++ } ++ return 0; ++} ++subsys_initcall(iconnect_pci_init); ++ ++MACHINE_START(ICONNECT, "Iomega iConnect Wireless Data Station") ++ /* Maintainer: Arne Fitzenreiter */ ++ .atag_offset = 0x100, ++ .init_machine = iconnect_legacy_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++ ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Kconfig linux-3.14.22/arch/arm/mach-kirkwood/Kconfig +--- linux-3.14.22.org/arch/arm/mach-kirkwood/Kconfig 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/arch/arm/mach-kirkwood/Kconfig 2014-11-04 01:10:52.950526196 +0100 +@@ -1,3 +1,5 @@ ++ ++ + if ARCH_KIRKWOOD + + menu "Marvell Kirkwood Implementations" +@@ -72,6 +74,83 @@ + Say 'Y' here if you want your kernel to support the + HP t5325 Thin Client. + ++config MACH_DB88F6281_BP ++ bool "Marvell DB-88F6281-BP Development Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ Marvell DB-88F6281-BP Development Board. ++ ++config MACH_DOCKSTAR ++ bool "Seagate FreeAgent DockStar" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ Seagate FreeAgent DockStar. ++ ++config MACH_SHEEVAPLUG ++ bool "Marvell SheevaPlug Reference Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ Marvell SheevaPlug Reference Board. ++ ++config MACH_ESATA_SHEEVAPLUG ++ bool "Marvell eSATA SheevaPlug Reference Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ Marvell eSATA SheevaPlug Reference Board. ++ ++config MACH_GURUPLUG ++ bool "Marvell GuruPlug Reference Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ Marvell GuruPlug Reference Board. ++ ++config MACH_INETSPACE_V2 ++ bool "LaCie Internet Space v2 NAS Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ LaCie Internet Space v2 NAS. ++ ++config MACH_NETSPACE_MAX_V2 ++ bool "LaCie Network Space Max v2 NAS Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ LaCie Network Space Max v2 NAS. ++ ++config MACH_NETSPACE_V2 ++ bool "LaCie Network Space v2 NAS Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ LaCie Network Space v2 NAS. ++ ++config MACH_DREAMPLUG ++ select KIRKWOOD_LEGACY ++ bool "Marvell DreamPlug Reference Board" ++ help ++ Say 'Y' here if you want your kernel to support the ++ Marvell DreamPlug Reference Board. ++ ++config MACH_ICONNECT ++ select KIRKWOOD_LEGACY ++ bool "Iomega iConnect Wireless Data Station" ++ help ++ Say 'Y' here if you want your kernel to support the ++ Iomega iConnect Wireless Data Station. ++ ++config MACH_NAS6210 ++ select KIRKWOOD_LEGACY ++ bool "Raidsonic ICY BOX IB-62x0" ++ help ++ Say 'Y' here if you want your kernel to support the ++ Raidsonic ICY BOX IB-62x0. ++ + config MACH_TS219 + bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS" + select KIRKWOOD_LEGACY +@@ -113,6 +192,7 @@ + Say 'Y' here if you want your kernel to support the + Marvell 88F6281 GTW GE Board (Flattened Device Tree). + ++ + endmenu + + endif +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile linux-3.14.22/arch/arm/mach-kirkwood/Makefile +--- linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/arch/arm/mach-kirkwood/Makefile 2014-11-04 01:11:13.009019440 +0100 +@@ -2,6 +2,14 @@ + obj-$(CONFIG_KIRKWOOD_LEGACY) += irq.o mpp.o + obj-$(CONFIG_PM) += pm.o + ++obj-$(CONFIG_MACH_DB88F6281_BP) += db88f6281-bp-setup.o ++obj-$(CONFIG_MACH_DOCKSTAR) += dockstar-setup.o ++obj-$(CONFIG_MACH_ESATA_SHEEVAPLUG) += sheevaplug-setup.o ++obj-$(CONFIG_MACH_GURUPLUG) += guruplug-setup.o ++obj-$(CONFIG_MACH_INETSPACE_V2) += netspace_v2-setup.o lacie_v2-common.o ++obj-$(CONFIG_MACH_NETSPACE_MAX_V2) += netspace_v2-setup.o lacie_v2-common.o ++obj-$(CONFIG_MACH_NETSPACE_V2) += netspace_v2-setup.o lacie_v2-common.o ++obj-$(CONFIG_MACH_SHEEVAPLUG) += sheevaplug-setup.o + obj-$(CONFIG_MACH_D2NET_V2) += d2net_v2-setup.o lacie_v2-common.o + obj-$(CONFIG_MACH_NET2BIG_V2) += netxbig_v2-setup.o lacie_v2-common.o + obj-$(CONFIG_MACH_NET5BIG_V2) += netxbig_v2-setup.o lacie_v2-common.o +@@ -11,6 +19,8 @@ + obj-$(CONFIG_MACH_T5325) += t5325-setup.o + obj-$(CONFIG_MACH_TS219) += ts219-setup.o tsx1x-common.o + obj-$(CONFIG_MACH_TS41X) += ts41x-setup.o tsx1x-common.o ++obj-$(CONFIG_MACH_ICONNECT) += iconnect-setup.o ++obj-$(CONFIG_MACH_NAS6210) += nas6210-setup.o + + obj-$(CONFIG_ARCH_KIRKWOOD_DT) += board-dt.o + obj-$(CONFIG_MACH_MV88F6281GTW_GE_DT) += board-mv88f6281gtw_ge.o +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/nas6210-setup.c linux-3.14.22/arch/arm/mach-kirkwood/nas6210-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/nas6210-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/nas6210-setup.c 2014-11-04 00:25:48.393687522 +0100 +@@ -0,0 +1,185 @@ ++/* ++ * arch/arm/mach-kirkwood/nas6210-setup.c ++ * ++ * Raidsonic ICYBOX NAS6210 and 6220 Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++#define NAS6210_GPIO_POWER_OFF 24 ++ ++static struct mtd_partition nas6210_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M, ++ .mask_flags = MTD_WRITEABLE, /* read only */ ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = (SZ_1M*6), ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL, ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data nas6210_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(8), ++}; ++ ++static struct mv_sata_platform_data nas6210_sata_data = { ++ .n_ports = 2, ++}; ++ ++static struct gpio_led nas6210_led_pins[] = { ++ { ++ .name = "nas6210:green:power", ++ .default_trigger = "default-on", ++ .gpio = 25, ++ .active_low = 0, ++ }, ++ { ++ .name = "nas6210:red:power", ++ .default_trigger = "none", ++ .gpio = 22, ++ .active_low = 0, ++ }, ++ { ++ .name = "nas6210:red:usb_copy", ++ .default_trigger = "none", ++ .gpio = 27, ++ .active_low = 0, ++ }, ++}; ++ ++static struct gpio_led_platform_data nas6210_led_data = { ++ .leds = nas6210_led_pins, ++ .num_leds = ARRAY_SIZE(nas6210_led_pins), ++}; ++ ++static struct platform_device nas6210_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &nas6210_led_data, ++ } ++}; ++ ++static struct gpio_keys_button nas6210_buttons[] = { ++ { ++ .code = KEY_COPY, ++ .gpio = 29, ++ .desc = "USB Copy", ++ .active_low = 1, ++ }, ++ { ++ .code = KEY_RESTART, ++ .gpio = 28, ++ .desc = "Reset", ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_keys_platform_data nas6210_button_data = { ++ .buttons = nas6210_buttons, ++ .nbuttons = ARRAY_SIZE(nas6210_buttons), ++}; ++ ++static struct platform_device nas6210_button_device = { ++ .name = "gpio-keys", ++ .id = -1, ++ .num_resources = 0, ++ .dev = { ++ .platform_data = &nas6210_button_data, ++ } ++}; ++ ++static unsigned int nas6210_mpp_config[] __initdata = { ++ MPP0_NF_IO2, ++ MPP1_NF_IO3, ++ MPP2_NF_IO4, ++ MPP3_NF_IO5, ++ MPP4_NF_IO6, ++ MPP5_NF_IO7, ++ MPP18_NF_IO0, ++ MPP19_NF_IO1, ++ MPP22_GPIO, /* Power LED red */ ++ MPP24_GPIO, /* Power off */ ++ MPP25_GPIO, /* Power LED green */ ++ MPP27_GPIO, /* USB transfer LED */ ++ MPP28_GPIO, /* Reset button */ ++ MPP29_GPIO, /* USB Copy button */ ++ 0 ++}; ++ ++void nas6210_power_off(void) ++{ ++ gpio_set_value(NAS6210_GPIO_POWER_OFF, 1); ++ while(1); ++} ++ ++static void __init nas6210_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(nas6210_mpp_config); ++ ++ kirkwood_nand_init(ARRAY_AND_SIZE(nas6210_nand_parts), 25); ++ kirkwood_ehci_init(); ++ kirkwood_ge00_init(&nas6210_ge00_data); ++ kirkwood_sata_init(&nas6210_sata_data); ++ kirkwood_uart0_init(); ++ platform_device_register(&nas6210_leds); ++ platform_device_register(&nas6210_button_device); ++ ++ if (gpio_request(NAS6210_GPIO_POWER_OFF, "power-off") == 0 && ++ gpio_direction_output(NAS6210_GPIO_POWER_OFF, 0) == 0) ++ pm_power_off = nas6210_power_off; ++ ++ else ++ pr_err("nas6210: failed to configure power-off gpio pin"); ++} ++ ++static int __init nas6210_pci_init(void) ++{ ++ if (machine_is_nas6210()) { ++ kirkwood_pcie_init(KW_PCIE0); ++ } ++ return 0; ++} ++subsys_initcall(nas6210_pci_init); ++ ++MACHINE_START(NAS6210, "RaidSonic ICY BOX IB-NAS62x0") ++ /* Maintainer: Arne Fitzenreiter */ ++ .atag_offset = 0x00000100, ++ .init_machine = nas6210_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/netspace_v2-setup.c linux-3.14.22/arch/arm/mach-kirkwood/netspace_v2-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/netspace_v2-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/netspace_v2-setup.c 2014-10-15 08:32:29.000000000 +0200 +@@ -0,0 +1,293 @@ ++/* ++ * arch/arm/mach-kirkwood/netspace_v2-setup.c ++ * ++ * LaCie Network Space v2 board setup ++ * ++ * Copyright (C) 2009 Simon Guinot ++ * Copyright (C) 2009 Benoît Canet ++ * ++ * 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 ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++#include "lacie_v2-common.h" ++ ++/***************************************************************************** ++ * Ethernet ++ ****************************************************************************/ ++ ++static struct mv643xx_eth_platform_data netspace_v2_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(8), ++}; ++ ++/***************************************************************************** ++ * SATA ++ ****************************************************************************/ ++ ++static struct mv_sata_platform_data netspace_v2_sata_data = { ++ .n_ports = 2, ++}; ++ ++/***************************************************************************** ++ * GPIO keys ++ ****************************************************************************/ ++ ++#define NETSPACE_V2_PUSH_BUTTON 32 ++ ++static struct gpio_keys_button netspace_v2_buttons[] = { ++ [0] = { ++ .code = KEY_POWER, ++ .gpio = NETSPACE_V2_PUSH_BUTTON, ++ .desc = "Power push button", ++ .active_low = 0, ++ }, ++}; ++ ++static struct gpio_keys_platform_data netspace_v2_button_data = { ++ .buttons = netspace_v2_buttons, ++ .nbuttons = ARRAY_SIZE(netspace_v2_buttons), ++}; ++ ++static struct platform_device netspace_v2_gpio_buttons = { ++ .name = "gpio-keys", ++ .id = -1, ++ .dev = { ++ .platform_data = &netspace_v2_button_data, ++ }, ++}; ++ ++/***************************************************************************** ++ * GPIO LEDs ++ ****************************************************************************/ ++ ++#define NETSPACE_V2_GPIO_RED_LED 12 ++ ++static struct gpio_led netspace_v2_gpio_led_pins[] = { ++ { ++ .name = "ns_v2:red:fail", ++ .gpio = NETSPACE_V2_GPIO_RED_LED, ++ }, ++}; ++ ++static struct gpio_led_platform_data netspace_v2_gpio_leds_data = { ++ .num_leds = ARRAY_SIZE(netspace_v2_gpio_led_pins), ++ .leds = netspace_v2_gpio_led_pins, ++}; ++ ++static struct platform_device netspace_v2_gpio_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &netspace_v2_gpio_leds_data, ++ }, ++}; ++ ++/***************************************************************************** ++ * Dual-GPIO CPLD LEDs ++ ****************************************************************************/ ++ ++#define NETSPACE_V2_GPIO_BLUE_LED_SLOW 29 ++#define NETSPACE_V2_GPIO_BLUE_LED_CMD 30 ++ ++static struct ns2_led netspace_v2_led_pins[] = { ++ { ++ .name = "ns_v2:blue:sata", ++ .cmd = NETSPACE_V2_GPIO_BLUE_LED_CMD, ++ .slow = NETSPACE_V2_GPIO_BLUE_LED_SLOW, ++ }, ++}; ++ ++static struct ns2_led_platform_data netspace_v2_leds_data = { ++ .num_leds = ARRAY_SIZE(netspace_v2_led_pins), ++ .leds = netspace_v2_led_pins, ++}; ++ ++static struct platform_device netspace_v2_leds = { ++ .name = "leds-ns2", ++ .id = -1, ++ .dev = { ++ .platform_data = &netspace_v2_leds_data, ++ }, ++}; ++ ++/***************************************************************************** ++ * GPIO fan ++ ****************************************************************************/ ++ ++/* Designed for fan 40x40x16: ADDA AD0412LB-D50 6000rpm@12v */ ++static struct gpio_fan_speed netspace_max_v2_fan_speed[] = { ++ { 0, 0 }, ++ { 1500, 15 }, ++ { 1700, 14 }, ++ { 1800, 13 }, ++ { 2100, 12 }, ++ { 3100, 11 }, ++ { 3300, 10 }, ++ { 4300, 9 }, ++ { 5500, 8 }, ++}; ++ ++static unsigned netspace_max_v2_fan_ctrl[] = { 22, 7, 33, 23 }; ++ ++static struct gpio_fan_alarm netspace_max_v2_fan_alarm = { ++ .gpio = 25, ++ .active_low = 1, ++}; ++ ++static struct gpio_fan_platform_data netspace_max_v2_fan_data = { ++ .num_ctrl = ARRAY_SIZE(netspace_max_v2_fan_ctrl), ++ .ctrl = netspace_max_v2_fan_ctrl, ++ .alarm = &netspace_max_v2_fan_alarm, ++ .num_speed = ARRAY_SIZE(netspace_max_v2_fan_speed), ++ .speed = netspace_max_v2_fan_speed, ++}; ++ ++static struct platform_device netspace_max_v2_gpio_fan = { ++ .name = "gpio-fan", ++ .id = -1, ++ .dev = { ++ .platform_data = &netspace_max_v2_fan_data, ++ }, ++}; ++ ++/***************************************************************************** ++ * General Setup ++ ****************************************************************************/ ++ ++static unsigned int netspace_v2_mpp_config[] __initdata = { ++ MPP0_SPI_SCn, ++ MPP1_SPI_MOSI, ++ MPP2_SPI_SCK, ++ MPP3_SPI_MISO, ++ MPP4_NF_IO6, ++ MPP5_NF_IO7, ++ MPP6_SYSRST_OUTn, ++ MPP7_GPO, /* Fan speed (bit 1) */ ++ MPP8_TW0_SDA, ++ MPP9_TW0_SCK, ++ MPP10_UART0_TXD, ++ MPP11_UART0_RXD, ++ MPP12_GPO, /* Red led */ ++ MPP14_GPIO, /* USB fuse */ ++ MPP16_GPIO, /* SATA 0 power */ ++ MPP17_GPIO, /* SATA 1 power */ ++ MPP18_NF_IO0, ++ MPP19_NF_IO1, ++ MPP20_SATA1_ACTn, ++ MPP21_SATA0_ACTn, ++ MPP22_GPIO, /* Fan speed (bit 0) */ ++ MPP23_GPIO, /* Fan power */ ++ MPP24_GPIO, /* USB mode select */ ++ MPP25_GPIO, /* Fan rotation fail */ ++ MPP26_GPIO, /* USB device vbus */ ++ MPP28_GPIO, /* USB enable host vbus */ ++ MPP29_GPIO, /* Blue led (slow register) */ ++ MPP30_GPIO, /* Blue led (command register) */ ++ MPP31_GPIO, /* Board power off */ ++ MPP32_GPIO, /* Power button (0 = Released, 1 = Pushed) */ ++ MPP33_GPO, /* Fan speed (bit 2) */ ++ 0 ++}; ++ ++#define NETSPACE_V2_GPIO_POWER_OFF 31 ++ ++static void netspace_v2_power_off(void) ++{ ++ gpio_set_value(NETSPACE_V2_GPIO_POWER_OFF, 1); ++} ++ ++static void __init netspace_v2_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(netspace_v2_mpp_config); ++ ++ if (machine_is_netspace_max_v2()) ++ lacie_v2_hdd_power_init(2); ++ else ++ lacie_v2_hdd_power_init(1); ++ ++ kirkwood_ehci_init(); ++ kirkwood_ge00_init(&netspace_v2_ge00_data); ++ kirkwood_sata_init(&netspace_v2_sata_data); ++ kirkwood_uart0_init(); ++ lacie_v2_register_flash(); ++ lacie_v2_register_i2c_devices(); ++ ++ platform_device_register(&netspace_v2_leds); ++ platform_device_register(&netspace_v2_gpio_leds); ++ platform_device_register(&netspace_v2_gpio_buttons); ++ if (machine_is_netspace_max_v2()) ++ platform_device_register(&netspace_max_v2_gpio_fan); ++ ++ if (gpio_request(NETSPACE_V2_GPIO_POWER_OFF, "power-off") == 0 && ++ gpio_direction_output(NETSPACE_V2_GPIO_POWER_OFF, 0) == 0) ++ pm_power_off = netspace_v2_power_off; ++ else ++ pr_err("netspace_v2: failed to configure power-off GPIO\n"); ++} ++ ++#ifdef CONFIG_MACH_NETSPACE_V2 ++MACHINE_START(NETSPACE_V2, "LaCie Network Space v2") ++ .atag_offset = 0x100, ++ .init_machine = netspace_v2_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++#endif ++ ++#ifdef CONFIG_MACH_INETSPACE_V2 ++MACHINE_START(INETSPACE_V2, "LaCie Internet Space v2") ++ .atag_offset = 0x100, ++ .init_machine = netspace_v2_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++#endif ++ ++#ifdef CONFIG_MACH_NETSPACE_MAX_V2 ++MACHINE_START(NETSPACE_MAX_V2, "LaCie Network Space Max v2") ++ .atag_offset = 0x100, ++ .init_machine = netspace_v2_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++#endif +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/sheevaplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/sheevaplug-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/sheevaplug-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/sheevaplug-setup.c 2014-10-15 08:32:29.000000000 +0200 +@@ -0,0 +1,161 @@ ++/* ++ * arch/arm/mach-kirkwood/sheevaplug-setup.c ++ * ++ * Marvell SheevaPlug Reference Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct mtd_partition sheevaplug_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = SZ_4M ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data sheevaplug_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(0), ++}; ++ ++static struct mv_sata_platform_data sheeva_esata_sata_data = { ++ .n_ports = 2, ++}; ++ ++static struct mvsdio_platform_data sheevaplug_mvsdio_data = { ++ /* unfortunately the CD signal has not been connected */ ++}; ++ ++static struct mvsdio_platform_data sheeva_esata_mvsdio_data = { ++ .gpio_write_protect = 44, /* MPP44 used as SD write protect */ ++ .gpio_card_detect = 47, /* MPP47 used as SD card detect */ ++}; ++ ++static struct gpio_led sheevaplug_led_pins[] = { ++ { ++ .name = "plug:red:misc", ++ .default_trigger = "none", ++ .gpio = 46, ++ .active_low = 1, ++ }, ++ { ++ .name = "plug:green:health", ++ .default_trigger = "default-on", ++ .gpio = 49, ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_led_platform_data sheevaplug_led_data = { ++ .leds = sheevaplug_led_pins, ++ .num_leds = ARRAY_SIZE(sheevaplug_led_pins), ++}; ++ ++static struct platform_device sheevaplug_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &sheevaplug_led_data, ++ } ++}; ++ ++static unsigned int sheevaplug_mpp_config[] __initdata = { ++ MPP29_GPIO, /* USB Power Enable */ ++ MPP46_GPIO, /* LED Red */ ++ MPP49_GPIO, /* LED */ ++ 0 ++}; ++ ++static unsigned int sheeva_esata_mpp_config[] __initdata = { ++ MPP29_GPIO, /* USB Power Enable */ ++ MPP44_GPIO, /* SD Write Protect */ ++ MPP47_GPIO, /* SD Card Detect */ ++ MPP49_GPIO, /* LED Green */ ++ 0 ++}; ++ ++static void __init sheevaplug_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ ++ /* setup gpio pin select */ ++ if (machine_is_esata_sheevaplug()) ++ kirkwood_mpp_conf(sheeva_esata_mpp_config); ++ else ++ kirkwood_mpp_conf(sheevaplug_mpp_config); ++ ++ kirkwood_uart0_init(); ++ kirkwood_nand_init(ARRAY_AND_SIZE(sheevaplug_nand_parts), 25); ++ ++ if (gpio_request(29, "USB Power Enable") != 0 || ++ gpio_direction_output(29, 1) != 0) ++ pr_err("can't set up GPIO 29 (USB Power Enable)\n"); ++ kirkwood_ehci_init(); ++ ++ kirkwood_ge00_init(&sheevaplug_ge00_data); ++ ++ /* honor lower power consumption for plugs with out eSATA */ ++ if (machine_is_esata_sheevaplug()) ++ kirkwood_sata_init(&sheeva_esata_sata_data); ++ ++ /* enable sd wp and sd cd on plugs with esata */ ++ if (machine_is_esata_sheevaplug()) ++ kirkwood_sdio_init(&sheeva_esata_mvsdio_data); ++ else ++ kirkwood_sdio_init(&sheevaplug_mvsdio_data); ++ ++ platform_device_register(&sheevaplug_leds); ++} ++ ++#ifdef CONFIG_MACH_SHEEVAPLUG ++MACHINE_START(SHEEVAPLUG, "Marvell SheevaPlug Reference Board") ++ /* Maintainer: shadi Ammouri */ ++ .atag_offset = 0x100, ++ .init_machine = sheevaplug_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++#endif ++ ++#ifdef CONFIG_MACH_ESATA_SHEEVAPLUG ++MACHINE_START(ESATA_SHEEVAPLUG, "Marvell eSATA SheevaPlug Reference Board") ++ .atag_offset = 0x100, ++ .init_machine = sheevaplug_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++#endif +diff -Naur linux-3.14.22.org/arch/arm/tools/mach-types linux-3.14.22/arch/arm/tools/mach-types +--- linux-3.14.22.org/arch/arm/tools/mach-types 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/arch/arm/tools/mach-types 2014-11-04 00:25:48.393687522 +0100 +@@ -447,6 +447,7 @@ + smartq5 MACH_SMARTQ5 SMARTQ5 2534 + davinci_dm6467tevm MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM 2548 + mxt_td60 MACH_MXT_TD60 MXT_TD60 2550 ++guruplug MACH_GURUPLUG GURUPLUG 2601 + capc7117 MACH_CAPC7117 CAPC7117 2612 + icontrol MACH_ICONTROL ICONTROL 2624 + gplugd MACH_GPLUGD GPLUGD 2625 +@@ -454,7 +455,7 @@ + mx23evk MACH_MX23EVK MX23EVK 2629 + ap4evb MACH_AP4EVB AP4EVB 2630 + mityomapl138 MACH_MITYOMAPL138 MITYOMAPL138 2650 +-guruplug MACH_GURUPLUG GURUPLUG 2659 ++dreamplug1 MACH_DREAMPLUG1 DREAMPLUG1 2659 + spear310 MACH_SPEAR310 SPEAR310 2660 + spear320 MACH_SPEAR320 SPEAR320 2661 + aquila MACH_AQUILA AQUILA 2676 +@@ -491,6 +492,7 @@ + t5325 MACH_T5325 T5325 2846 + income MACH_INCOME INCOME 2849 + goni MACH_GONI GONI 2862 ++iconnect MACH_ICONNECT ICONNECT 2870 + bv07 MACH_BV07 BV07 2882 + openrd_ultimate MACH_OPENRD_ULTIMATE OPENRD_ULTIMATE 2884 + devixp MACH_DEVIXP DEVIXP 2885 +@@ -520,6 +522,7 @@ + vpr200 MACH_VPR200 VPR200 3087 + torbreck MACH_TORBRECK TORBRECK 3090 + prima2_evb MACH_PRIMA2_EVB PRIMA2_EVB 3103 ++nas6210 MACH_NAS6210 NAS6210 3104 + paz00 MACH_PAZ00 PAZ00 3128 + acmenetusfoxg20 MACH_ACMENETUSFOXG20 ACMENETUSFOXG20 3129 + ag5evm MACH_AG5EVM AG5EVM 3189 +@@ -544,6 +547,7 @@ + nspire MACH_NSPIRE NSPIRE 3503 + nokia_rm696 MACH_NOKIA_RM696 NOKIA_RM696 3522 + mikrap_x168 MACH_MIKRAP_X168 MIKRAP_X168 3543 ++dreamplug MACH_DREAMPLUG DREAMPLUG 3550 + deto_macarm9 MACH_DETO_MACARM9 DETO_MACARM9 3568 + m28evk MACH_M28EVK M28EVK 3613 + kota2 MACH_KOTA2 KOTA2 3616 From dc3de45125581d78a5aaa8055b6516fc4a152c79 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Tue, 4 Nov 2014 20:24:17 +0100 Subject: [PATCH 198/297] kernel: build sunxi crypto driver as module. --- config/kernel/kernel.config.armv5tel-ipfire-multi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/kernel/kernel.config.armv5tel-ipfire-multi b/config/kernel/kernel.config.armv5tel-ipfire-multi index c93a602c4..65b1affd8 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-multi +++ b/config/kernel/kernel.config.armv5tel-ipfire-multi @@ -5892,7 +5892,7 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y CONFIG_CRYPTO_DEV_OMAP_SHAM=y CONFIG_CRYPTO_DEV_OMAP_AES=y CONFIG_CRYPTO_DEV_SAHARA=y -CONFIG_CRYPTO_DEV_SUNXI_SS=y +CONFIG_CRYPTO_DEV_SUNXI_SS=m CONFIG_ASYMMETRIC_KEY_TYPE=m CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m CONFIG_PUBLIC_KEY_ALGO_RSA=m From bfb421f1bb70ab1a2fbd0839a7d1fc37a472ed45 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 4 Nov 2014 23:52:02 +0100 Subject: [PATCH 199/297] fireinfo: Import latest fixes for ARM --- lfs/fireinfo | 3 + ...crash-when-no-bogomips-are-available.patch | 61 ++++++++++++++++ ...board-model-from-device-tree-in-proc.patch | 72 +++++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 src/patches/fireinfo/0001-bogomips-Don-t-crash-when-no-bogomips-are-available.patch create mode 100644 src/patches/fireinfo/0002-ARM-Read-board-model-from-device-tree-in-proc.patch diff --git a/lfs/fireinfo b/lfs/fireinfo index 0c3670656..0bc8d44da 100644 --- a/lfs/fireinfo +++ b/lfs/fireinfo @@ -71,6 +71,9 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/fireinfo/0001-bogomips-Don-t-crash-when-no-bogomips-are-available.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/fireinfo/0002-ARM-Read-board-model-from-device-tree-in-proc.patch + cd $(DIR_APP) && [ -x "configure" ] || sh ./autogen.sh cd $(DIR_APP) && ./configure --prefix=/usr cd $(DIR_APP) && make $(MAKETUNING) diff --git a/src/patches/fireinfo/0001-bogomips-Don-t-crash-when-no-bogomips-are-available.patch b/src/patches/fireinfo/0001-bogomips-Don-t-crash-when-no-bogomips-are-available.patch new file mode 100644 index 000000000..f228d527a --- /dev/null +++ b/src/patches/fireinfo/0001-bogomips-Don-t-crash-when-no-bogomips-are-available.patch @@ -0,0 +1,61 @@ +From a9401d9542fae575d9ce2bb534cd4e598e9c7b8e Mon Sep 17 00:00:00 2001 +From: Michael Tremer +Date: Tue, 28 Oct 2014 21:14:41 +0100 +Subject: [PATCH 1/2] bogomips: Don't crash when no bogomips are available + +The RPi doesn't provide bogomips in /proc/cpuinfo any more +and fireinfo crashed when trying to read that file +--- + src/fireinfo/cpu.py | 14 +++++++++----- + src/fireinfo/system.py | 4 +++- + 2 files changed, 12 insertions(+), 6 deletions(-) + +diff --git a/src/fireinfo/cpu.py b/src/fireinfo/cpu.py +index 32d885db8124..541575af6bbb 100644 +--- a/src/fireinfo/cpu.py ++++ b/src/fireinfo/cpu.py +@@ -80,12 +80,16 @@ class CPU(object): + """ + Return the bogomips of this CPU. + """ +- try: +- bogomips = self.__cpuinfo["bogomips"] +- except KeyError: +- bogomips = self.__cpuinfo["BogoMIPS"] ++ bogomips = None ++ ++ for key in ("bogomips", "BogoMIPS"): ++ try: ++ bogomips = self.__cpuinfo[key] ++ except KeyError: ++ continue + +- return float(bogomips) ++ if bogomips: ++ return float(bogomips) + + @property + def model(self): +diff --git a/src/fireinfo/system.py b/src/fireinfo/system.py +index 8e903e8e3449..890f58c05027 100644 +--- a/src/fireinfo/system.py ++++ b/src/fireinfo/system.py +@@ -144,12 +144,14 @@ class System(object): + "model_string" : self.cpu.model_string, + "stepping" : self.cpu.stepping, + "flags" : self.cpu.flags, +- "bogomips" : self.cpu.bogomips, + "speed" : self.cpu.speed, + "family" : self.cpu.family, + "count" : self.cpu.count + } + ++ if self.cpu.bogomips: ++ p["bogomips"] = self.cpu.bogomips ++ + p["network"] = { + "green" : self.network.has_green(), + "blue" : self.network.has_blue(), +-- +1.9.3 + diff --git a/src/patches/fireinfo/0002-ARM-Read-board-model-from-device-tree-in-proc.patch b/src/patches/fireinfo/0002-ARM-Read-board-model-from-device-tree-in-proc.patch new file mode 100644 index 000000000..de6540019 --- /dev/null +++ b/src/patches/fireinfo/0002-ARM-Read-board-model-from-device-tree-in-proc.patch @@ -0,0 +1,72 @@ +From b9a068e26261007d4a0592fcb47f82658af2c775 Mon Sep 17 00:00:00 2001 +From: Michael Tremer +Date: Mon, 3 Nov 2014 21:33:45 +0100 +Subject: [PATCH 2/2] ARM: Read board model from device-tree in /proc + +--- + src/fireinfo/system.py | 35 +++++++++-------------------------- + 1 file changed, 9 insertions(+), 26 deletions(-) + +diff --git a/src/fireinfo/system.py b/src/fireinfo/system.py +index 890f58c05027..195832e9f7eb 100644 +--- a/src/fireinfo/system.py ++++ b/src/fireinfo/system.py +@@ -304,27 +304,6 @@ class System(object): + """ + return read_from_file("/sys/class/dmi/id/bios_vendor") + +- def vendor_model_tuple(self): +- try: +- s = self.__cpuinfo["Hardware"] +- except KeyError: +- return (None, None) +- +- if s.startswith("ARM-Versatile"): +- return ("ARM", s) +- +- try: +- v, m = s.split(" ", 1) +- except ValueError: +- if s.startswith("BCM"): +- v = "Broadcom" +- m = s +- else: +- v = None +- m = s +- +- return v, m +- + @property + def vendor(self): + """ +@@ -337,8 +316,10 @@ class System(object): + break + + if ret is None: +- v, m = self.vendor_model_tuple() +- ret = v ++ try: ++ return self.__cpuinfo["Hardware"] ++ except KeyError: ++ pass + + return ret + +@@ -353,9 +334,11 @@ class System(object): + if ret: + break + +- if ret is None: +- v, m = self.vendor_model_tuple() +- ret = m ++ # Read device-tree model if available ++ ret = read_from_file("/proc/device-tree/model") ++ if ret: ++ # replace the NULL byte with which the DT string ends ++ ret = ret.replace(u"\u0000", "") + + return ret + +-- +1.9.3 + From 6a91a5a72474b213bdba834175c665b963e12f5a Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 5 Nov 2014 01:33:29 +0100 Subject: [PATCH 200/297] installer: Show better helpline in unattended mode --- src/installer/main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/installer/main.c b/src/installer/main.c index 9262a400c..4dd561ddb 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -412,7 +412,13 @@ int main(int argc, char *argv[]) { setlocale(LC_ALL, language); } - char* helpline = center_string(_("/ between elements | selects | next screen"), screen_cols); + // Set helpline + char* helpline = NULL; + if (config.unattended) + helpline = center_string(_("Unattended mode"), screen_cols); + else + helpline = center_string(_("/ between elements | selects | next screen"), screen_cols); + newtPushHelpLine(helpline); if (!config.unattended) { From 69749af1005aa4a35a63d5daf55f39e4c47554aa Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 5 Nov 2014 01:33:59 +0100 Subject: [PATCH 201/297] installer: Don't try to install /etc/hosts which does not exist --- src/installer/dracut-module/module-setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installer/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh index 0173e95b6..08dcdd563 100755 --- a/src/installer/dracut-module/module-setup.sh +++ b/src/installer/dracut-module/module-setup.sh @@ -42,7 +42,7 @@ install() { inst /var/ipfire/dhcpc/dhcpcd-run-hooks inst "$moddir/70-dhcpcd.exe" "/var/ipfire/dhcpc/dhcpcd-hooks/70-dhcpcd.exe" - inst /etc/host.conf /etc/hosts /etc/protocols + inst /etc/host.conf /etc/protocols inst /etc/nsswitch.conf /etc/resolv.conf inst_libdir_file "libnss_dns.so.*" From 3e1145e1a0b1a08bf61d6c4962eeae48e3d0c355 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 5 Nov 2014 01:34:27 +0100 Subject: [PATCH 202/297] installer: Fix download of the ISO image --- src/installer/downloadsource.sh | 9 ++++++++ src/installer/main.c | 40 ++++++++++++++++++++++++--------- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/installer/downloadsource.sh b/src/installer/downloadsource.sh index 4a48686ea..c74f9e232 100644 --- a/src/installer/downloadsource.sh +++ b/src/installer/downloadsource.sh @@ -31,6 +31,15 @@ fi OUTPUT="${1}" URL="${2}" +# Mount a tmpfs which is big enough to hold the ISO image +OUTPUT_DIR="${OUTPUT%/*}" + +mkdir -p "${OUTPUT_DIR}" +if ! mount -t tmpfs none "${OUTPUT_DIR}" -o size=512M; then + echo "Could not mount tmpfs to ${OUTPUT_DIR}" >&2 + exit 1 +fi + echo "Downloading ${URL}..." if ! download -O "${OUTPUT}" "${URL}"; then echo "Download failed" >&2 diff --git a/src/installer/main.c b/src/installer/main.c index 4dd561ddb..01a9cc61c 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -25,7 +25,7 @@ #define INST_FILECOUNT 21000 #define LICENSE_FILE "/cdrom/COPYING" -#define SOURCE_TEMPFILE "/tmp/downloaded-image.iso" +#define SOURCE_TEMPFILE "/tmp/downloads/image.iso" extern char url[STRING_SIZE]; @@ -502,7 +502,7 @@ int main(int argc, char *argv[]) { FILE* f = fopen(SOURCE_TEMPFILE, "r"); if (f) { - sourcedrive = SOURCE_TEMPFILE; + sourcedrive = strdup(SOURCE_TEMPFILE); fclose(f); } else { char reason[STRING_SIZE] = "-"; @@ -849,6 +849,18 @@ int main(int argc, char *argv[]) { // Umount source drive and eject hw_umount(SOURCE_MOUNT_PATH); + // Free downloaded ISO image + if (strcmp(sourcedrive, SOURCE_TEMPFILE) == 0) { + rc = unlink(sourcedrive); + if (rc) + fprintf(flog, "Could not free downloaded ISO image: %s\n", sourcedrive); + + // or eject real images + } else { + snprintf(commandstring, STRING_SIZE, "/usr/bin/eject %s", sourcedrive); + mysystem(logfile, commandstring); + } + // Download and execute the postinstall script if (*config.postinstall) { snprintf(commandstring, sizeof(commandstring), @@ -860,9 +872,6 @@ int main(int argc, char *argv[]) { } } - snprintf(commandstring, STRING_SIZE, "/usr/bin/eject %s", sourcedrive); - mysystem(logfile, commandstring); - if (!config.unattended) { snprintf(message, sizeof(message), _( "%s was successfully installed!\n\n" @@ -886,19 +895,28 @@ EXIT: newtFinished(); // Free resources - free(system_release); - free(roottext); - free(helpline); + if (system_release) + free(system_release); - free(sourcedrive); - free(destination); + if (roottext) + free(roottext); + + if (helpline) + free(helpline); + + if (sourcedrive) + free(sourcedrive); + + if (destination) + free(destination); hw_stop_all_raid_arrays(logfile); if (selected_disks) hw_free_disks(selected_disks); - hw_free(hw); + if (hw) + hw_free(hw); fcloseall(); From 8f89ad6d424dad59782d896319017342c610e067 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Wed, 5 Nov 2014 14:26:37 +0100 Subject: [PATCH 203/297] kernel: arm-multi: disable hanging sunxi_ss crypto module. udev loads the problematic module automaticly. --- config/kernel/kernel.config.armv5tel-ipfire-multi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/kernel/kernel.config.armv5tel-ipfire-multi b/config/kernel/kernel.config.armv5tel-ipfire-multi index 65b1affd8..370fdd1a0 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-multi +++ b/config/kernel/kernel.config.armv5tel-ipfire-multi @@ -5892,7 +5892,7 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y CONFIG_CRYPTO_DEV_OMAP_SHAM=y CONFIG_CRYPTO_DEV_OMAP_AES=y CONFIG_CRYPTO_DEV_SAHARA=y -CONFIG_CRYPTO_DEV_SUNXI_SS=m +# CONFIG_CRYPTO_DEV_SUNXI_SS is not set CONFIG_ASYMMETRIC_KEY_TYPE=m CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m CONFIG_PUBLIC_KEY_ALGO_RSA=m From 4db4bc1b1b57dd1f28b6d37d20fe851cbcdfbeb0 Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Wed, 5 Nov 2014 19:02:32 +0100 Subject: [PATCH 204/297] daq: Update to 2.0.4 --- config/rootfiles/common/daq | 2 +- lfs/daq | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/rootfiles/common/daq b/config/rootfiles/common/daq index b8a9fd4ac..6c156e3d9 100644 --- a/config/rootfiles/common/daq +++ b/config/rootfiles/common/daq @@ -21,7 +21,7 @@ usr/lib/daq #usr/lib/libdaq.la #usr/lib/libdaq.so usr/lib/libdaq.so.2 -usr/lib/libdaq.so.2.0.2 +usr/lib/libdaq.so.2.0.4 #usr/lib/libdaq_static.a #usr/lib/libdaq_static.la #usr/lib/libdaq_static_modules.a diff --git a/lfs/daq b/lfs/daq index fa8f2a89c..c58995d57 100644 --- a/lfs/daq +++ b/lfs/daq @@ -24,7 +24,7 @@ include Config -VER = 2.0.2 +VER = 2.0.4 THISAPP = daq-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 865bf9b750a2a2ca632591a3c70b0ea0 +$(DL_FILE)_MD5 = 65e51d72e9d5d8b397e192e4e5857eff install : $(TARGET) From c0504c5cc5ddf46d9eb672b954fdc93274c2162c Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Wed, 5 Nov 2014 14:27:59 +0100 Subject: [PATCH 205/297] part/fsresize: fix on systems without initrd. /proc/mounts has no correct entry for / on such systems. Use mount instead. --- src/initscripts/init.d/fsresize | 4 ++-- src/initscripts/init.d/partresize | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/initscripts/init.d/fsresize b/src/initscripts/init.d/fsresize index 325c731af..79aeb36fc 100644 --- a/src/initscripts/init.d/fsresize +++ b/src/initscripts/init.d/fsresize @@ -21,7 +21,7 @@ case "${1}" in boot_mesg "Re-sizing root partition..." # Find root device - while read -r dev mountpoint fs options; do + mount | while read -r dev tmp1 mountpoint tmp2; do # Skip generic entries [ "${dev}" = "rootfs" ] && continue @@ -33,7 +33,7 @@ case "${1}" in rm -f /.resizefs break fi - done < /proc/mounts + done fi ;; diff --git a/src/initscripts/init.d/partresize b/src/initscripts/init.d/partresize index 38c568316..8c05f4d15 100644 --- a/src/initscripts/init.d/partresize +++ b/src/initscripts/init.d/partresize @@ -22,8 +22,14 @@ case "${1}" in mount -o remount,rw / > /dev/null evaluate_retval + boot_mesg "Create /etc/mtab..." + > /etc/mtab + mount -f / || failed=1 + (exit ${failed}) + evaluate_retval + # Detect device - while read -r dev mountpoint fs options; do + mount | while read -r dev tmp1 mountpoint tmp2; do [ "${dev}" = "rootfs" ] && continue if [ "${mountpoint}" = "/" ]; then @@ -57,7 +63,7 @@ case "${1}" in sleep 15 reboot -f fi - done < /proc/mounts + done fi ;; *) From 4d88659446676f9034b04828062cd8303cb2a4b3 Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Wed, 5 Nov 2014 19:17:53 +0100 Subject: [PATCH 206/297] snort: Update to 2.9.7.0 --- lfs/snort | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lfs/snort b/lfs/snort index 45c17a8ad..77d3b0d61 100644 --- a/lfs/snort +++ b/lfs/snort @@ -24,7 +24,7 @@ include Config -VER = 2.9.6.1 +VER = 2.9.7.0 THISAPP = snort-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = d7c0f1ddb2e70b70acdaa4664abb5fb0 +$(DL_FILE)_MD5 = c2a45bc56441ee9456478f219dd8d1e2 install : $(TARGET) From 8d29504c4dff83e31beb0791d5a9654499ae5ac8 Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Wed, 5 Nov 2014 19:20:59 +0100 Subject: [PATCH 207/297] snort: Update urls for rules download (2.9.7.0) in 'ids.cgi' --- html/cgi-bin/ids.cgi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/html/cgi-bin/ids.cgi b/html/cgi-bin/ids.cgi index ff72b7894..5ada91128 100644 --- a/html/cgi-bin/ids.cgi +++ b/html/cgi-bin/ids.cgi @@ -263,9 +263,9 @@ if (-e "/etc/snort/snort.conf") { ####################### End added for snort rules control ################################# if ($snortsettings{'RULES'} eq 'subscripted') { - $url=" https://www.snort.org/rules/snortrules-snapshot-2961.tar.gz?oinkcode=$snortsettings{'OINKCODE'}"; + $url=" https://www.snort.org/rules/snortrules-snapshot-2970.tar.gz?oinkcode=$snortsettings{'OINKCODE'}"; } elsif ($snortsettings{'RULES'} eq 'registered') { - $url=" https://www.snort.org/rules/snortrules-snapshot-2961.tar.gz?oinkcode=$snortsettings{'OINKCODE'}"; + $url=" https://www.snort.org/rules/snortrules-snapshot-2970.tar.gz?oinkcode=$snortsettings{'OINKCODE'}"; } elsif ($snortsettings{'RULES'} eq 'community') { $url=" https://www.snort.org/rules/community"; } else { @@ -528,7 +528,7 @@ print <
- $Lang::tr{'ids rules license'} www.snort.org$Lang::tr{'ids rules license1'}

+ $Lang::tr{'ids rules license'} www.snort.org$Lang::tr{'ids rules license1'}

$Lang::tr{'ids rules license2'} Get an Oinkcode, $Lang::tr{'ids rules license3'} From dc1d8fe731abec4a99be141e08054cc6647de745 Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Wed, 5 Nov 2014 21:23:44 +0100 Subject: [PATCH 208/297] Update: Midnight Commander to 4.8.13 --- lfs/mc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lfs/mc b/lfs/mc index ed799be06..4dc937cb8 100644 --- a/lfs/mc +++ b/lfs/mc @@ -24,7 +24,7 @@ include Config -VER = 4.8.12 +VER = 4.8.13 THISAPP = mc-$(VER) DL_FILE = $(THISAPP).tar.xz @@ -32,7 +32,7 @@ DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = mc -PAK_VER = 9 +PAK_VER = 10 DEPS = "" @@ -44,7 +44,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 7ecccc03df060cd0ca1414a5a14e6649 +$(DL_FILE)_MD5 = d967caa12765eb86e52a6a63ca202500 install : $(TARGET) From 14c33f6393464991e38a6428a1361f1c9360a066 Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Wed, 5 Nov 2014 21:41:43 +0100 Subject: [PATCH 209/297] Update: pcre to 8.36 --- config/rootfiles/common/pcre | 42 +++++++++++++++++++++++++++++++++--- lfs/pcre | 4 ++-- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/config/rootfiles/common/pcre b/config/rootfiles/common/pcre index 5c292700c..78ac2a24f 100644 --- a/config/rootfiles/common/pcre +++ b/config/rootfiles/common/pcre @@ -10,15 +10,15 @@ #usr/lib/libpcre.la usr/lib/libpcre.so usr/lib/libpcre.so.1 -usr/lib/libpcre.so.1.0.1 +usr/lib/libpcre.so.1.2.4 #usr/lib/libpcrecpp.la usr/lib/libpcrecpp.so usr/lib/libpcrecpp.so.0 -usr/lib/libpcrecpp.so.0.0.0 +usr/lib/libpcrecpp.so.0.0.1 #usr/lib/libpcreposix.la usr/lib/libpcreposix.so usr/lib/libpcreposix.so.0 -usr/lib/libpcreposix.so.0.0.1 +usr/lib/libpcreposix.so.0.0.3 #usr/lib/pkgconfig/libpcre.pc #usr/lib/pkgconfig/libpcrecpp.pc #usr/lib/pkgconfig/libpcreposix.pc @@ -30,10 +30,13 @@ usr/lib/libpcreposix.so.0.0.1 #usr/share/doc/pcre/NEWS #usr/share/doc/pcre/README #usr/share/doc/pcre/html +#usr/share/doc/pcre/html/NON-AUTOTOOLS-BUILD.txt +#usr/share/doc/pcre/html/README.txt #usr/share/doc/pcre/html/index.html #usr/share/doc/pcre/html/pcre-config.html #usr/share/doc/pcre/html/pcre.html #usr/share/doc/pcre/html/pcre16.html +#usr/share/doc/pcre/html/pcre32.html #usr/share/doc/pcre/html/pcre_assign_jit_stack.html #usr/share/doc/pcre/html/pcre_compile.html #usr/share/doc/pcre/html/pcre_compile2.html @@ -51,6 +54,7 @@ usr/lib/libpcreposix.so.0.0.1 #usr/share/doc/pcre/html/pcre_get_stringtable_entries.html #usr/share/doc/pcre/html/pcre_get_substring.html #usr/share/doc/pcre/html/pcre_get_substring_list.html +#usr/share/doc/pcre/html/pcre_jit_exec.html #usr/share/doc/pcre/html/pcre_jit_stack_alloc.html #usr/share/doc/pcre/html/pcre_jit_stack_free.html #usr/share/doc/pcre/html/pcre_maketables.html @@ -58,6 +62,7 @@ usr/lib/libpcreposix.so.0.0.1 #usr/share/doc/pcre/html/pcre_refcount.html #usr/share/doc/pcre/html/pcre_study.html #usr/share/doc/pcre/html/pcre_utf16_to_host_byte_order.html +#usr/share/doc/pcre/html/pcre_utf32_to_host_byte_order.html #usr/share/doc/pcre/html/pcre_version.html #usr/share/doc/pcre/html/pcreapi.html #usr/share/doc/pcre/html/pcrebuild.html @@ -105,6 +110,7 @@ usr/lib/libpcreposix.so.0.0.1 #usr/share/man/man3/pcre16_get_stringtable_entries.3 #usr/share/man/man3/pcre16_get_substring.3 #usr/share/man/man3/pcre16_get_substring_list.3 +#usr/share/man/man3/pcre16_jit_exec.3 #usr/share/man/man3/pcre16_jit_stack_alloc.3 #usr/share/man/man3/pcre16_jit_stack_free.3 #usr/share/man/man3/pcre16_maketables.3 @@ -113,6 +119,33 @@ usr/lib/libpcreposix.so.0.0.1 #usr/share/man/man3/pcre16_study.3 #usr/share/man/man3/pcre16_utf16_to_host_byte_order.3 #usr/share/man/man3/pcre16_version.3 +#usr/share/man/man3/pcre32.3 +#usr/share/man/man3/pcre32_assign_jit_stack.3 +#usr/share/man/man3/pcre32_compile.3 +#usr/share/man/man3/pcre32_compile2.3 +#usr/share/man/man3/pcre32_config.3 +#usr/share/man/man3/pcre32_copy_named_substring.3 +#usr/share/man/man3/pcre32_copy_substring.3 +#usr/share/man/man3/pcre32_dfa_exec.3 +#usr/share/man/man3/pcre32_exec.3 +#usr/share/man/man3/pcre32_free_study.3 +#usr/share/man/man3/pcre32_free_substring.3 +#usr/share/man/man3/pcre32_free_substring_list.3 +#usr/share/man/man3/pcre32_fullinfo.3 +#usr/share/man/man3/pcre32_get_named_substring.3 +#usr/share/man/man3/pcre32_get_stringnumber.3 +#usr/share/man/man3/pcre32_get_stringtable_entries.3 +#usr/share/man/man3/pcre32_get_substring.3 +#usr/share/man/man3/pcre32_get_substring_list.3 +#usr/share/man/man3/pcre32_jit_exec.3 +#usr/share/man/man3/pcre32_jit_stack_alloc.3 +#usr/share/man/man3/pcre32_jit_stack_free.3 +#usr/share/man/man3/pcre32_maketables.3 +#usr/share/man/man3/pcre32_pattern_to_host_byte_order.3 +#usr/share/man/man3/pcre32_refcount.3 +#usr/share/man/man3/pcre32_study.3 +#usr/share/man/man3/pcre32_utf32_to_host_byte_order.3 +#usr/share/man/man3/pcre32_version.3 #usr/share/man/man3/pcre_assign_jit_stack.3 #usr/share/man/man3/pcre_compile.3 #usr/share/man/man3/pcre_compile2.3 @@ -130,6 +163,7 @@ usr/lib/libpcreposix.so.0.0.1 #usr/share/man/man3/pcre_get_stringtable_entries.3 #usr/share/man/man3/pcre_get_substring.3 #usr/share/man/man3/pcre_get_substring_list.3 +#usr/share/man/man3/pcre_jit_exec.3 #usr/share/man/man3/pcre_jit_stack_alloc.3 #usr/share/man/man3/pcre_jit_stack_free.3 #usr/share/man/man3/pcre_maketables.3 @@ -137,12 +171,14 @@ usr/lib/libpcreposix.so.0.0.1 #usr/share/man/man3/pcre_refcount.3 #usr/share/man/man3/pcre_study.3 #usr/share/man/man3/pcre_utf16_to_host_byte_order.3 +#usr/share/man/man3/pcre_utf32_to_host_byte_order.3 #usr/share/man/man3/pcre_version.3 #usr/share/man/man3/pcreapi.3 #usr/share/man/man3/pcrebuild.3 #usr/share/man/man3/pcrecallout.3 #usr/share/man/man3/pcrecompat.3 #usr/share/man/man3/pcrecpp.3 +#usr/share/man/man3/pcredemo.3 #usr/share/man/man3/pcrejit.3 #usr/share/man/man3/pcrelimits.3 #usr/share/man/man3/pcrematching.3 diff --git a/lfs/pcre b/lfs/pcre index 5aa40bd20..1062c9153 100644 --- a/lfs/pcre +++ b/lfs/pcre @@ -24,7 +24,7 @@ include Config -VER = 8.31 +VER = 8.36 THISAPP = pcre-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = fab1bb3b91a4c35398263a5c1e0858c1 +$(DL_FILE)_MD5 = ff7b4bb14e355f04885cf18ff4125c98 install : $(TARGET) From 0c1b7071ec5fc4ada96998dce0b1141a39b874be Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Wed, 5 Nov 2014 21:46:16 +0100 Subject: [PATCH 210/297] Update: tcpdump to 4.6.2 --- lfs/tcpdump | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lfs/tcpdump b/lfs/tcpdump index 934e85178..6fe6f98ec 100644 --- a/lfs/tcpdump +++ b/lfs/tcpdump @@ -24,7 +24,7 @@ include Config -VER = 4.4.0 +VER = 4.6.2 THISAPP = tcpdump-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -32,7 +32,7 @@ DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = tcpdump -PAK_VER = 3 +PAK_VER = 4 DEPS = "" @@ -44,7 +44,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 6f75aabcffd012f73bd7c331bb5d8232 +$(DL_FILE)_MD5 = 74d0d3728b3cdc60db872d842e7f1598 install : $(TARGET) From 6c96e0499b95151afe0f72f628a3c9b2bfbec25c Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Wed, 5 Nov 2014 21:48:57 +0100 Subject: [PATCH 211/297] Update: zlib to 1.2.8 --- config/rootfiles/common/zlib | 3 +-- lfs/zlib | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/config/rootfiles/common/zlib b/config/rootfiles/common/zlib index 13cf70441..43c5ac932 100644 --- a/config/rootfiles/common/zlib +++ b/config/rootfiles/common/zlib @@ -1,10 +1,9 @@ lib/libz.so lib/libz.so.1 -lib/libz.so.1.2.7 +lib/libz.so.1.2.8 #usr/include/zconf.h #usr/include/zlib.h #usr/lib/libz.a -#usr/lib/libz.so #usr/lib/pkgconfig #usr/lib/pkgconfig/zlib.pc #usr/share/man/man3/zlib.3 diff --git a/lfs/zlib b/lfs/zlib index 0a2977d0d..6520a2374 100644 --- a/lfs/zlib +++ b/lfs/zlib @@ -24,7 +24,7 @@ include Config -VER = 1.2.7 +VER = 1.2.8 THISAPP = zlib-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -41,7 +41,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 60df6a37c56e7c1366cca812414f7b85 +$(DL_FILE)_MD5 = 44d667c142d7cda120332623eab69f40 install : $(TARGET) From 851fba0e8df26b85c39760d0e8307ec3b6abdc46 Mon Sep 17 00:00:00 2001 From: Timmothy Wilson Date: Wed, 5 Nov 2014 22:08:02 +0100 Subject: [PATCH 212/297] httpscert: Create certificate with SHA256 hash --- src/scripts/httpscert | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/httpscert b/src/scripts/httpscert index d0e23fa7f..e20f789ed 100644 --- a/src/scripts/httpscert +++ b/src/scripts/httpscert @@ -14,7 +14,7 @@ case "$1" in /bin/cat /etc/certparams | sed "s/HOSTNAME/`hostname -f`/" | /usr/bin/openssl \ req -new -key /etc/httpd/server.key -out /etc/httpd/server.csr echo "Signing certificate" - /usr/bin/openssl x509 -req -days 999999 -in \ + /usr/bin/openssl x509 -req -days 999999 -sha256 -in \ /etc/httpd/server.csr -signkey /etc/httpd/server.key -out \ /etc/httpd/server.crt ;; From bb75bc3b140749a736040d767ff89d25177ae330 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 5 Nov 2014 23:43:01 +0100 Subject: [PATCH 213/297] installer: Improve check for serial console option --- src/installer/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installer/main.c b/src/installer/main.c index 01a9cc61c..6e151fbd5 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -289,7 +289,7 @@ static void parse_command_line(struct config* c) { char* key = strsep(&val, "="); // serial console - if (strcmp(token, "console=ttyS0") == 0) + if ((strcmp(key, "console") == 0) && (strncmp(val, "ttyS", 4) == 0)) c->serial_console = 1; // enable networking? From 0565657116511f14f0adc29eaad1a3214fc8c9cf Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 6 Nov 2014 00:06:43 +0100 Subject: [PATCH 214/297] flash-images: use third partition again as root. --- lfs/flash-images | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lfs/flash-images b/lfs/flash-images index f660d5cee..d2050b4ab 100644 --- a/lfs/flash-images +++ b/lfs/flash-images @@ -1,7 +1,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007-2012 IPFire Team # +# Copyright (C) 2007-2014 IPFire Team # # # # 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 # @@ -31,7 +31,7 @@ TARGET = $(DIR_INFO)/$(THISAPP) DEVICE = $(shell losetup -f) PART_BOOT = /dev/mapper/$(patsubst /dev/%,%,$(DEVICE))p1 -PART_ROOT = /dev/mapper/$(patsubst /dev/%,%,$(DEVICE))p2 +PART_ROOT = /dev/mapper/$(patsubst /dev/%,%,$(DEVICE))p3 ifeq "$(SCON)" "1" IMAGE_FILE = /install/images/$(SNAME)-$(VERSION).1gb-ext4-scon.$(MACHINE)-full-core$(CORE).img.gz @@ -92,7 +92,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) losetup $(DEVICE) $(IMG) # Write Partition table - echo -e "$(S_OFFSET),$(S_BOOT),$(PART_TYPE),*\n$$(( $(S_BOOT) + $(S_OFFSET) )),$(S_ROOT),L\n" \ + echo -e "$(S_OFFSET),$(S_BOOT),$(PART_TYPE),*\n,0,0\n$$(( $(S_BOOT) + $(S_OFFSET) )),$(S_ROOT),L\n" \ | sfdisk -D -uS -H 64 -S 32 $(DEVICE) kpartx -v -a $(DEVICE) From bcd7a757491e0136d5307b709f781b360e3736b8 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 6 Nov 2014 00:08:13 +0100 Subject: [PATCH 215/297] kernel: kirkwood: fix legacy boot patch for dreamplug. --- .../linux-3.14.22-kirkwood_legacy_boot.patch | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch b/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch index 27dfeddca..97b2cc1f2 100644 --- a/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch +++ b/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch @@ -1,6 +1,6 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/db88f6281-bp-setup.c linux-3.14.22/arch/arm/mach-kirkwood/db88f6281-bp-setup.c --- linux-3.14.22.org/arch/arm/mach-kirkwood/db88f6281-bp-setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-3.14.22/arch/arm/mach-kirkwood/db88f6281-bp-setup.c 2014-10-15 08:32:29.000000000 +0200 ++++ linux-3.14.22/arch/arm/mach-kirkwood/db88f6281-bp-setup.c 2014-11-05 22:07:58.828714499 +0100 @@ -0,0 +1,108 @@ +/* + * arch/arm/mach-kirkwood/db88f6281-bp-setup.c @@ -112,7 +112,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/db88f6281-bp-setup.c linux-3 +MACHINE_END diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/dockstar-setup.c linux-3.14.22/arch/arm/mach-kirkwood/dockstar-setup.c --- linux-3.14.22.org/arch/arm/mach-kirkwood/dockstar-setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-3.14.22/arch/arm/mach-kirkwood/dockstar-setup.c 2014-10-15 08:32:29.000000000 +0200 ++++ linux-3.14.22/arch/arm/mach-kirkwood/dockstar-setup.c 2014-11-05 22:07:58.828714499 +0100 @@ -0,0 +1,111 @@ +/* + * arch/arm/mach-kirkwood/dockstar-setup.c @@ -227,7 +227,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/dockstar-setup.c linux-3.14. +MACHINE_END diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/dreamplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/dreamplug-setup.c --- linux-3.14.22.org/arch/arm/mach-kirkwood/dreamplug-setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-3.14.22/arch/arm/mach-kirkwood/dreamplug-setup.c 2014-11-04 00:25:48.383688273 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/dreamplug-setup.c 2014-11-05 22:07:58.833714499 +0100 @@ -0,0 +1,151 @@ +/* + * arch/arm/mach-kirkwood/dreamplug-setup.c @@ -382,7 +382,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/dreamplug-setup.c linux-3.14 +MACHINE_END diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/guruplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/guruplug-setup.c --- linux-3.14.22.org/arch/arm/mach-kirkwood/guruplug-setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-3.14.22/arch/arm/mach-kirkwood/guruplug-setup.c 2014-11-04 00:25:48.383688273 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/guruplug-setup.c 2014-11-05 22:07:58.838714499 +0100 @@ -0,0 +1,135 @@ +/* + * arch/arm/mach-kirkwood/guruplug-setup.c @@ -521,7 +521,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/guruplug-setup.c linux-3.14. +MACHINE_END diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/iconnect-setup.c linux-3.14.22/arch/arm/mach-kirkwood/iconnect-setup.c --- linux-3.14.22.org/arch/arm/mach-kirkwood/iconnect-setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-3.14.22/arch/arm/mach-kirkwood/iconnect-setup.c 2014-11-04 00:25:48.383688273 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/iconnect-setup.c 2014-11-05 22:07:58.843714499 +0100 @@ -0,0 +1,214 @@ +/* + * arch/arm/mach-kirkwood/iconnect-setup.c @@ -739,7 +739,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/iconnect-setup.c linux-3.14. +MACHINE_END diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Kconfig linux-3.14.22/arch/arm/mach-kirkwood/Kconfig --- linux-3.14.22.org/arch/arm/mach-kirkwood/Kconfig 2014-10-15 08:42:04.000000000 +0200 -+++ linux-3.14.22/arch/arm/mach-kirkwood/Kconfig 2014-11-04 01:10:52.950526196 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/Kconfig 2014-11-05 22:07:58.848714499 +0100 @@ -1,3 +1,5 @@ + + @@ -840,8 +840,8 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Kconfig linux-3.14.22/arch/a endif diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile linux-3.14.22/arch/arm/mach-kirkwood/Makefile --- linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile 2014-10-15 08:42:04.000000000 +0200 -+++ linux-3.14.22/arch/arm/mach-kirkwood/Makefile 2014-11-04 01:11:13.009019440 +0100 -@@ -2,6 +2,14 @@ ++++ linux-3.14.22/arch/arm/mach-kirkwood/Makefile 2014-11-05 22:09:01.758714529 +0100 +@@ -2,6 +2,15 @@ obj-$(CONFIG_KIRKWOOD_LEGACY) += irq.o mpp.o obj-$(CONFIG_PM) += pm.o @@ -849,6 +849,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile linux-3.14.22/arch/ +obj-$(CONFIG_MACH_DOCKSTAR) += dockstar-setup.o +obj-$(CONFIG_MACH_ESATA_SHEEVAPLUG) += sheevaplug-setup.o +obj-$(CONFIG_MACH_GURUPLUG) += guruplug-setup.o ++obj-$(CONFIG_MACH_DREAMPLUG) += dreamplug-setup.o +obj-$(CONFIG_MACH_INETSPACE_V2) += netspace_v2-setup.o lacie_v2-common.o +obj-$(CONFIG_MACH_NETSPACE_MAX_V2) += netspace_v2-setup.o lacie_v2-common.o +obj-$(CONFIG_MACH_NETSPACE_V2) += netspace_v2-setup.o lacie_v2-common.o @@ -856,7 +857,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile linux-3.14.22/arch/ obj-$(CONFIG_MACH_D2NET_V2) += d2net_v2-setup.o lacie_v2-common.o obj-$(CONFIG_MACH_NET2BIG_V2) += netxbig_v2-setup.o lacie_v2-common.o obj-$(CONFIG_MACH_NET5BIG_V2) += netxbig_v2-setup.o lacie_v2-common.o -@@ -11,6 +19,8 @@ +@@ -11,6 +20,8 @@ obj-$(CONFIG_MACH_T5325) += t5325-setup.o obj-$(CONFIG_MACH_TS219) += ts219-setup.o tsx1x-common.o obj-$(CONFIG_MACH_TS41X) += ts41x-setup.o tsx1x-common.o @@ -867,7 +868,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile linux-3.14.22/arch/ obj-$(CONFIG_MACH_MV88F6281GTW_GE_DT) += board-mv88f6281gtw_ge.o diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/nas6210-setup.c linux-3.14.22/arch/arm/mach-kirkwood/nas6210-setup.c --- linux-3.14.22.org/arch/arm/mach-kirkwood/nas6210-setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-3.14.22/arch/arm/mach-kirkwood/nas6210-setup.c 2014-11-04 00:25:48.393687522 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/nas6210-setup.c 2014-11-05 22:07:58.858714499 +0100 @@ -0,0 +1,185 @@ +/* + * arch/arm/mach-kirkwood/nas6210-setup.c @@ -1056,7 +1057,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/nas6210-setup.c linux-3.14.2 +MACHINE_END diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/netspace_v2-setup.c linux-3.14.22/arch/arm/mach-kirkwood/netspace_v2-setup.c --- linux-3.14.22.org/arch/arm/mach-kirkwood/netspace_v2-setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-3.14.22/arch/arm/mach-kirkwood/netspace_v2-setup.c 2014-10-15 08:32:29.000000000 +0200 ++++ linux-3.14.22/arch/arm/mach-kirkwood/netspace_v2-setup.c 2014-11-05 22:07:58.858714499 +0100 @@ -0,0 +1,293 @@ +/* + * arch/arm/mach-kirkwood/netspace_v2-setup.c @@ -1353,7 +1354,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/netspace_v2-setup.c linux-3. +#endif diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/sheevaplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/sheevaplug-setup.c --- linux-3.14.22.org/arch/arm/mach-kirkwood/sheevaplug-setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-3.14.22/arch/arm/mach-kirkwood/sheevaplug-setup.c 2014-10-15 08:32:29.000000000 +0200 ++++ linux-3.14.22/arch/arm/mach-kirkwood/sheevaplug-setup.c 2014-11-05 22:07:58.868714499 +0100 @@ -0,0 +1,161 @@ +/* + * arch/arm/mach-kirkwood/sheevaplug-setup.c @@ -1518,7 +1519,7 @@ diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/sheevaplug-setup.c linux-3.1 +#endif diff -Naur linux-3.14.22.org/arch/arm/tools/mach-types linux-3.14.22/arch/arm/tools/mach-types --- linux-3.14.22.org/arch/arm/tools/mach-types 2014-10-15 08:42:04.000000000 +0200 -+++ linux-3.14.22/arch/arm/tools/mach-types 2014-11-04 00:25:48.393687522 +0100 ++++ linux-3.14.22/arch/arm/tools/mach-types 2014-11-05 22:07:58.868714499 +0100 @@ -447,6 +447,7 @@ smartq5 MACH_SMARTQ5 SMARTQ5 2534 davinci_dm6467tevm MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM 2548 From bc3dd1e975d420cc54d2d2dce831d13e2a9ccad3 Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Thu, 6 Nov 2014 07:33:45 +0100 Subject: [PATCH 216/297] Update: squid to 3.4.9 --- lfs/squid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lfs/squid b/lfs/squid index 548abd937..67e4a7db1 100644 --- a/lfs/squid +++ b/lfs/squid @@ -24,7 +24,7 @@ include Config -VER = 3.4.8 +VER = 3.4.9 THISAPP = squid-$(VER) DL_FILE = $(THISAPP).tar.xz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = b0c4335447248810169f58ea4d8b204a +$(DL_FILE)_MD5 = 497e5be7b3430d12667628296760beca install : $(TARGET) From f8793c24e66f2c9029901b97303bdcc402b514c0 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 6 Nov 2014 00:09:19 +0100 Subject: [PATCH 217/297] kernel: disable crashing sensor drivers on arm. --- .../kernel.config.armv5tel-ipfire-kirkwood | 30 +++++++++---------- .../kernel.config.armv5tel-ipfire-multi | 30 +++++++++---------- .../kernel/kernel.config.armv5tel-ipfire-rpi | 30 +++++++++---------- 3 files changed, 45 insertions(+), 45 deletions(-) diff --git a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood index 64d0300ce..13fac5eb7 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood +++ b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood @@ -2803,8 +2803,8 @@ CONFIG_SENSORS_ATXP1=m CONFIG_SENSORS_DS620=m CONFIG_SENSORS_DS1621=m CONFIG_SENSORS_I5K_AMB=m -CONFIG_SENSORS_F71805F=m -CONFIG_SENSORS_F71882FG=m +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set CONFIG_SENSORS_F75375S=m CONFIG_SENSORS_G760A=m CONFIG_SENSORS_G762=m @@ -2816,7 +2816,7 @@ CONFIG_SENSORS_HTU21=m CONFIG_SENSORS_IBMAEM=m CONFIG_SENSORS_IBMPEX=m # CONFIG_SENSORS_IIO_HWMON is not set -CONFIG_SENSORS_IT87=m +# CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_JC42 is not set CONFIG_SENSORS_LINEAGE=m CONFIG_SENSORS_LM63=y @@ -2847,10 +2847,10 @@ CONFIG_SENSORS_MAX6642=m CONFIG_SENSORS_MAX6650=m CONFIG_SENSORS_MAX6697=m CONFIG_SENSORS_MCP3021=m -CONFIG_SENSORS_NCT6775=m +# CONFIG_SENSORS_NCT6775 is not set CONFIG_SENSORS_NTC_THERMISTOR=m -CONFIG_SENSORS_PC87360=m -CONFIG_SENSORS_PC87427=m +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set CONFIG_SENSORS_PCF8591=m CONFIG_PMBUS=m CONFIG_SENSORS_PMBUS=m @@ -2867,16 +2867,16 @@ CONFIG_SENSORS_SHT15=m CONFIG_SENSORS_SHT21=m CONFIG_SENSORS_SIS5595=m # CONFIG_SENSORS_SMM665 is not set -CONFIG_SENSORS_DME1737=m +# CONFIG_SENSORS_DME1737 is not set CONFIG_SENSORS_EMC1403=m # CONFIG_SENSORS_EMC2103 is not set CONFIG_SENSORS_EMC6W201=m -CONFIG_SENSORS_SMSC47M1=m +# CONFIG_SENSORS_SMSC47M1 is not set CONFIG_SENSORS_SMSC47M192=m -CONFIG_SENSORS_SMSC47B397=m -CONFIG_SENSORS_SCH56XX_COMMON=m -CONFIG_SENSORS_SCH5627=m -CONFIG_SENSORS_SCH5636=m +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_SCH56XX_COMMON is not set +# CONFIG_SENSORS_SCH5627 is not set +# CONFIG_SENSORS_SCH5636 is not set CONFIG_SENSORS_ADS1015=m CONFIG_SENSORS_ADS7828=m CONFIG_SENSORS_AMC6821=m @@ -2887,7 +2887,7 @@ CONFIG_SENSORS_TMP102=m CONFIG_SENSORS_TMP401=m CONFIG_SENSORS_TMP421=m CONFIG_SENSORS_VIA686A=m -CONFIG_SENSORS_VT1211=m +# CONFIG_SENSORS_VT1211 is not set CONFIG_SENSORS_VT8231=m CONFIG_SENSORS_W83781D=m CONFIG_SENSORS_W83791D=m @@ -2897,8 +2897,8 @@ CONFIG_SENSORS_W83795=m # CONFIG_SENSORS_W83795_FANCTRL is not set CONFIG_SENSORS_W83L785TS=m CONFIG_SENSORS_W83L786NG=m -CONFIG_SENSORS_W83627HF=m -CONFIG_SENSORS_W83627EHF=m +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set CONFIG_THERMAL=y CONFIG_THERMAL_HWMON=y CONFIG_THERMAL_OF=y diff --git a/config/kernel/kernel.config.armv5tel-ipfire-multi b/config/kernel/kernel.config.armv5tel-ipfire-multi index 370fdd1a0..1fc9fe18f 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-multi +++ b/config/kernel/kernel.config.armv5tel-ipfire-multi @@ -3029,8 +3029,8 @@ CONFIG_SENSORS_ATXP1=m CONFIG_SENSORS_DS620=m CONFIG_SENSORS_DS1621=m # CONFIG_SENSORS_I5K_AMB is not set -CONFIG_SENSORS_F71805F=m -CONFIG_SENSORS_F71882FG=m +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set CONFIG_SENSORS_F75375S=m CONFIG_SENSORS_G760A=m CONFIG_SENSORS_G762=m @@ -3042,7 +3042,7 @@ CONFIG_SENSORS_HTU21=m CONFIG_SENSORS_IBMAEM=m CONFIG_SENSORS_IBMPEX=m # CONFIG_SENSORS_IIO_HWMON is not set -CONFIG_SENSORS_IT87=m +# CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_JC42 is not set CONFIG_SENSORS_LINEAGE=m CONFIG_SENSORS_LM63=y @@ -3073,10 +3073,10 @@ CONFIG_SENSORS_MAX6642=m CONFIG_SENSORS_MAX6650=m CONFIG_SENSORS_MAX6697=m CONFIG_SENSORS_MCP3021=m -CONFIG_SENSORS_NCT6775=m +# CONFIG_SENSORS_NCT6775 is not set CONFIG_SENSORS_NTC_THERMISTOR=m -CONFIG_SENSORS_PC87360=m -CONFIG_SENSORS_PC87427=m +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set CONFIG_SENSORS_PCF8591=m CONFIG_PMBUS=m CONFIG_SENSORS_PMBUS=m @@ -3093,16 +3093,16 @@ CONFIG_SENSORS_SHT15=m CONFIG_SENSORS_SHT21=m # CONFIG_SENSORS_SIS5595 is not set # CONFIG_SENSORS_SMM665 is not set -CONFIG_SENSORS_DME1737=m +# CONFIG_SENSORS_DME1737 is not set CONFIG_SENSORS_EMC1403=m # CONFIG_SENSORS_EMC2103 is not set CONFIG_SENSORS_EMC6W201=m -CONFIG_SENSORS_SMSC47M1=m +# CONFIG_SENSORS_SMSC47M1 is not set CONFIG_SENSORS_SMSC47M192=m -CONFIG_SENSORS_SMSC47B397=m -CONFIG_SENSORS_SCH56XX_COMMON=m -CONFIG_SENSORS_SCH5627=m -CONFIG_SENSORS_SCH5636=m +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_SCH56XX_COMMON is not set +# CONFIG_SENSORS_SCH5627 is not set +# CONFIG_SENSORS_SCH5636 is not set CONFIG_SENSORS_ADS1015=m CONFIG_SENSORS_ADS7828=m CONFIG_SENSORS_AMC6821=m @@ -3115,7 +3115,7 @@ CONFIG_SENSORS_TMP421=m CONFIG_SENSORS_TWL4030_MADC=m CONFIG_SENSORS_VEXPRESS=m # CONFIG_SENSORS_VIA686A is not set -CONFIG_SENSORS_VT1211=m +# CONFIG_SENSORS_VT1211 is not set # CONFIG_SENSORS_VT8231 is not set CONFIG_SENSORS_W83781D=m CONFIG_SENSORS_W83791D=m @@ -3125,8 +3125,8 @@ CONFIG_SENSORS_W83795=m # CONFIG_SENSORS_W83795_FANCTRL is not set CONFIG_SENSORS_W83L785TS=m CONFIG_SENSORS_W83L786NG=m -CONFIG_SENSORS_W83627HF=m -CONFIG_SENSORS_W83627EHF=m +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set CONFIG_THERMAL=y CONFIG_THERMAL_HWMON=y CONFIG_THERMAL_OF=y diff --git a/config/kernel/kernel.config.armv5tel-ipfire-rpi b/config/kernel/kernel.config.armv5tel-ipfire-rpi index 897e1f310..cfc9dc130 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-rpi +++ b/config/kernel/kernel.config.armv5tel-ipfire-rpi @@ -2011,8 +2011,8 @@ CONFIG_SENSORS_ASC7621=m CONFIG_SENSORS_ATXP1=m CONFIG_SENSORS_DS620=m CONFIG_SENSORS_DS1621=m -CONFIG_SENSORS_F71805F=m -CONFIG_SENSORS_F71882FG=m +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set CONFIG_SENSORS_F75375S=m CONFIG_SENSORS_G760A=m CONFIG_SENSORS_G762=m @@ -2021,7 +2021,7 @@ CONFIG_SENSORS_GL520SM=m CONFIG_SENSORS_GPIO_FAN=m CONFIG_SENSORS_HIH6130=m CONFIG_SENSORS_HTU21=m -CONFIG_SENSORS_IT87=m +# CONFIG_SENSORS_IT87 is not set CONFIG_SENSORS_JC42=m CONFIG_SENSORS_LINEAGE=m CONFIG_SENSORS_LM63=m @@ -2054,10 +2054,10 @@ CONFIG_SENSORS_MAX6642=m CONFIG_SENSORS_MAX6650=m CONFIG_SENSORS_MAX6697=m CONFIG_SENSORS_MCP3021=m -CONFIG_SENSORS_NCT6775=m +# CONFIG_SENSORS_NCT6775 is not set CONFIG_SENSORS_NTC_THERMISTOR=m -CONFIG_SENSORS_PC87360=m -CONFIG_SENSORS_PC87427=m +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set CONFIG_SENSORS_PCF8591=m CONFIG_PMBUS=m CONFIG_SENSORS_PMBUS=m @@ -2073,16 +2073,16 @@ CONFIG_SENSORS_ZL6100=m CONFIG_SENSORS_SHT15=m CONFIG_SENSORS_SHT21=m CONFIG_SENSORS_SMM665=m -CONFIG_SENSORS_DME1737=m +# CONFIG_SENSORS_DME1737 is not set CONFIG_SENSORS_EMC1403=m CONFIG_SENSORS_EMC2103=m CONFIG_SENSORS_EMC6W201=m -CONFIG_SENSORS_SMSC47M1=m +# CONFIG_SENSORS_SMSC47M1 is not set CONFIG_SENSORS_SMSC47M192=m -CONFIG_SENSORS_SMSC47B397=m -CONFIG_SENSORS_SCH56XX_COMMON=m -CONFIG_SENSORS_SCH5627=m -CONFIG_SENSORS_SCH5636=m +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_SCH56XX_COMMON is not set +# CONFIG_SENSORS_SCH5627 is not set +# CONFIG_SENSORS_SCH5636 is not set CONFIG_SENSORS_ADS1015=m CONFIG_SENSORS_ADS7828=m CONFIG_SENSORS_ADS7871=m @@ -2093,7 +2093,7 @@ CONFIG_SENSORS_THMC50=m CONFIG_SENSORS_TMP102=m CONFIG_SENSORS_TMP401=m CONFIG_SENSORS_TMP421=m -CONFIG_SENSORS_VT1211=m +# CONFIG_SENSORS_VT1211 is not set CONFIG_SENSORS_W83781D=m CONFIG_SENSORS_W83791D=m CONFIG_SENSORS_W83792D=m @@ -2102,8 +2102,8 @@ CONFIG_SENSORS_W83795=m # CONFIG_SENSORS_W83795_FANCTRL is not set CONFIG_SENSORS_W83L785TS=m CONFIG_SENSORS_W83L786NG=m -CONFIG_SENSORS_W83627HF=m -CONFIG_SENSORS_W83627EHF=m +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set CONFIG_THERMAL=y CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set From 817317ed9e961e39a2a3b643e15426b9da5b83a3 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 6 Nov 2014 20:16:58 +0100 Subject: [PATCH 218/297] kernel: update netdev ledtrigger patch. --- lfs/linux | 2 +- .../linux-3.14.22-ledtrig_netdev.patch | 465 ++++++++++++++++++ 2 files changed, 466 insertions(+), 1 deletion(-) create mode 100644 src/patches/linux-3.14.22-ledtrig_netdev.patch diff --git a/lfs/linux b/lfs/linux index 8a1ee9c7c..15939c3bd 100644 --- a/lfs/linux +++ b/lfs/linux @@ -147,7 +147,7 @@ endif cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mISDN-hfcusb-reportl1down.patch # Add LED trigger - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.9-ledtrig-netdev-1.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-ledtrig_netdev.patch # cs5535audio spams syslog if no ac97 was present (geos router) cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.30_cs5535audio_fix_logspam_on_geos.patch diff --git a/src/patches/linux-3.14.22-ledtrig_netdev.patch b/src/patches/linux-3.14.22-ledtrig_netdev.patch new file mode 100644 index 000000000..4543c9c3f --- /dev/null +++ b/src/patches/linux-3.14.22-ledtrig_netdev.patch @@ -0,0 +1,465 @@ +diff -Naur linux-3.14.22.org/drivers/leds/trigger/Kconfig linux-3.14.22/drivers/leds/trigger/Kconfig +--- linux-3.14.22.org/drivers/leds/trigger/Kconfig 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/drivers/leds/trigger/Kconfig 2014-11-06 17:52:02.303748375 +0100 +@@ -108,4 +108,11 @@ + This enables direct flash/torch on/off by the driver, kernel space. + If unsure, say Y. + ++config LEDS_TRIGGER_NETDEV ++ tristate "LED Netdev Trigger" ++ depends on NET && LEDS_TRIGGERS ++ help ++ This allows LEDs to be controlled by network device activity. ++ If unsure, say Y. ++ + endif # LEDS_TRIGGERS +diff -Naur linux-3.14.22.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.14.22/drivers/leds/trigger/ledtrig-netdev.c +--- linux-3.14.22.org/drivers/leds/trigger/ledtrig-netdev.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/drivers/leds/trigger/ledtrig-netdev.c 2014-11-06 17:47:09.913748236 +0100 +@@ -0,0 +1,438 @@ ++/* ++ * LED Kernel Netdev Trigger ++ * ++ * Toggles the LED to reflect the link and traffic state of a named net device ++ * ++ * Copyright 2007 Oliver Jowett ++ * ++ * Derived from ledtrig-timer.c which is: ++ * Copyright 2005-2006 Openedhand Ltd. ++ * Author: Richard Purdie ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "../leds.h" ++ ++/* ++ * Configurable sysfs attributes: ++ * ++ * device_name - network device name to monitor ++ * ++ * interval - duration of LED blink, in milliseconds ++ * ++ * mode - either "none" (LED is off) or a space separated list of one or more of: ++ * link: LED's normal state reflects whether the link is up (has carrier) or not ++ * tx: LED blinks on transmitted data ++ * rx: LED blinks on receive data ++ * ++ * Some suggestions: ++ * ++ * Simple link status LED: ++ * $ echo netdev >someled/trigger ++ * $ echo eth0 >someled/device_name ++ * $ echo link >someled/mode ++ * ++ * Ethernet-style link/activity LED: ++ * $ echo netdev >someled/trigger ++ * $ echo eth0 >someled/device_name ++ * $ echo "link tx rx" >someled/mode ++ * ++ * Modem-style tx/rx LEDs: ++ * $ echo netdev >led1/trigger ++ * $ echo ppp0 >led1/device_name ++ * $ echo tx >led1/mode ++ * $ echo netdev >led2/trigger ++ * $ echo ppp0 >led2/device_name ++ * $ echo rx >led2/mode ++ * ++ */ ++ ++#define MODE_LINK 1 ++#define MODE_TX 2 ++#define MODE_RX 4 ++ ++struct led_netdev_data { ++ rwlock_t lock; ++ ++ struct timer_list timer; ++ struct notifier_block notifier; ++ ++ struct led_classdev *led_cdev; ++ struct net_device *net_dev; ++ ++ char device_name[IFNAMSIZ]; ++ unsigned interval; ++ unsigned mode; ++ unsigned link_up; ++ unsigned last_activity; ++}; ++ ++static void set_baseline_state(struct led_netdev_data *trigger_data) ++{ ++ if ((trigger_data->mode & MODE_LINK) != 0 && trigger_data->link_up) ++ led_set_brightness(trigger_data->led_cdev, LED_FULL); ++ else ++ led_set_brightness(trigger_data->led_cdev, LED_OFF); ++ ++ if ((trigger_data->mode & (MODE_TX | MODE_RX)) != 0 && trigger_data->link_up) ++ mod_timer(&trigger_data->timer, jiffies + trigger_data->interval); ++ else ++ del_timer(&trigger_data->timer); ++} ++ ++static ssize_t led_device_name_show(struct device *dev, ++ struct device_attribute *attr, char *buf) ++{ ++ struct led_classdev *led_cdev = dev_get_drvdata(dev); ++ struct led_netdev_data *trigger_data = led_cdev->trigger_data; ++ ++ read_lock(&trigger_data->lock); ++ sprintf(buf, "%s\n", trigger_data->device_name); ++ read_unlock(&trigger_data->lock); ++ ++ return strlen(buf) + 1; ++} ++ ++static ssize_t led_device_name_store(struct device *dev, ++ struct device_attribute *attr, const char *buf, size_t size) ++{ ++ struct led_classdev *led_cdev = dev_get_drvdata(dev); ++ struct led_netdev_data *trigger_data = led_cdev->trigger_data; ++ ++ if (size < 0 || size >= IFNAMSIZ) ++ return -EINVAL; ++ ++ write_lock(&trigger_data->lock); ++ ++ strcpy(trigger_data->device_name, buf); ++ if (size > 0 && trigger_data->device_name[size-1] == '\n') ++ trigger_data->device_name[size-1] = 0; ++ ++ if (trigger_data->device_name[0] != 0) { ++ /* check for existing device to update from */ ++ trigger_data->net_dev = dev_get_by_name(&init_net, trigger_data->device_name); ++ if (trigger_data->net_dev != NULL) ++ trigger_data->link_up = (dev_get_flags(trigger_data->net_dev) & IFF_LOWER_UP) != 0; ++ set_baseline_state(trigger_data); /* updates LEDs, may start timers */ ++ } ++ ++ write_unlock(&trigger_data->lock); ++ return size; ++} ++ ++static DEVICE_ATTR(device_name, 0644, led_device_name_show, led_device_name_store); ++ ++static ssize_t led_mode_show(struct device *dev, ++ struct device_attribute *attr, char *buf) ++{ ++ struct led_classdev *led_cdev = dev_get_drvdata(dev); ++ struct led_netdev_data *trigger_data = led_cdev->trigger_data; ++ ++ read_lock(&trigger_data->lock); ++ ++ if (trigger_data->mode == 0) { ++ strcpy(buf, "none\n"); ++ } else { ++ if (trigger_data->mode & MODE_LINK) ++ strcat(buf, "link "); ++ if (trigger_data->mode & MODE_TX) ++ strcat(buf, "tx "); ++ if (trigger_data->mode & MODE_RX) ++ strcat(buf, "rx "); ++ strcat(buf, "\n"); ++ } ++ ++ read_unlock(&trigger_data->lock); ++ ++ return strlen(buf)+1; ++} ++ ++static ssize_t led_mode_store(struct device *dev, ++ struct device_attribute *attr, const char *buf, size_t size) ++{ ++ struct led_classdev *led_cdev = dev_get_drvdata(dev); ++ struct led_netdev_data *trigger_data = led_cdev->trigger_data; ++ char copybuf[128]; ++ int new_mode = -1; ++ char *p, *token; ++ ++ /* take a copy since we don't want to trash the inbound buffer when using strsep */ ++ strncpy(copybuf, buf, sizeof(copybuf)); ++ copybuf[sizeof(copybuf) - 1] = 0; ++ p = copybuf; ++ ++ while ((token = strsep(&p, " \t\n")) != NULL) { ++ if (!*token) ++ continue; ++ ++ if (new_mode == -1) ++ new_mode = 0; ++ ++ if (!strcmp(token, "none")) ++ new_mode = 0; ++ else if (!strcmp(token, "tx")) ++ new_mode |= MODE_TX; ++ else if (!strcmp(token, "rx")) ++ new_mode |= MODE_RX; ++ else if (!strcmp(token, "link")) ++ new_mode |= MODE_LINK; ++ else ++ return -EINVAL; ++ } ++ ++ if (new_mode == -1) ++ return -EINVAL; ++ ++ write_lock(&trigger_data->lock); ++ trigger_data->mode = new_mode; ++ set_baseline_state(trigger_data); ++ write_unlock(&trigger_data->lock); ++ ++ return size; ++} ++ ++static DEVICE_ATTR(mode, 0644, led_mode_show, led_mode_store); ++ ++static ssize_t led_interval_show(struct device *dev, ++ struct device_attribute *attr, char *buf) ++{ ++ struct led_classdev *led_cdev = dev_get_drvdata(dev); ++ struct led_netdev_data *trigger_data = led_cdev->trigger_data; ++ ++ read_lock(&trigger_data->lock); ++ sprintf(buf, "%u\n", jiffies_to_msecs(trigger_data->interval)); ++ read_unlock(&trigger_data->lock); ++ ++ return strlen(buf) + 1; ++} ++ ++static ssize_t led_interval_store(struct device *dev, ++ struct device_attribute *attr, const char *buf, size_t size) ++{ ++ struct led_classdev *led_cdev = dev_get_drvdata(dev); ++ struct led_netdev_data *trigger_data = led_cdev->trigger_data; ++ int ret = -EINVAL; ++ char *after; ++ unsigned long value = simple_strtoul(buf, &after, 10); ++ size_t count = after - buf; ++ ++ if (isspace(*after)) ++ count++; ++ ++ /* impose some basic bounds on the timer interval */ ++ if (count == size && value >= 5 && value <= 10000) { ++ write_lock(&trigger_data->lock); ++ trigger_data->interval = msecs_to_jiffies(value); ++ set_baseline_state(trigger_data); /* resets timer */ ++ write_unlock(&trigger_data->lock); ++ ret = count; ++ } ++ ++ return ret; ++} ++ ++static DEVICE_ATTR(interval, 0644, led_interval_show, led_interval_store); ++ ++static int netdev_trig_notify(struct notifier_block *nb, ++ unsigned long evt, ++ void *dv) ++{ ++ struct net_device *dev = netdev_notifier_info_to_dev((struct netdev_notifier_info *) dv); ++ struct led_netdev_data *trigger_data = container_of(nb, struct led_netdev_data, notifier); ++ ++ if (evt != NETDEV_UP && evt != NETDEV_DOWN && evt != NETDEV_CHANGE && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER) ++ return NOTIFY_DONE; ++ ++ write_lock(&trigger_data->lock); ++ ++ if (strcmp(dev->name, trigger_data->device_name)) ++ goto done; ++ ++ if (evt == NETDEV_REGISTER) { ++ if (trigger_data->net_dev != NULL) ++ dev_put(trigger_data->net_dev); ++ dev_hold(dev); ++ trigger_data->net_dev = dev; ++ trigger_data->link_up = 0; ++ goto done; ++ } ++ ++ if (evt == NETDEV_UNREGISTER && trigger_data->net_dev != NULL) { ++ dev_put(trigger_data->net_dev); ++ trigger_data->net_dev = NULL; ++ goto done; ++ } ++ ++ /* UP / DOWN / CHANGE */ ++ ++ trigger_data->link_up = (evt != NETDEV_DOWN && netif_carrier_ok(dev)); ++ set_baseline_state(trigger_data); ++ ++done: ++ write_unlock(&trigger_data->lock); ++ return NOTIFY_DONE; ++} ++ ++/* here's the real work! */ ++static void netdev_trig_timer(unsigned long arg) ++{ ++ struct led_netdev_data *trigger_data = (struct led_netdev_data *)arg; ++ struct rtnl_link_stats64 *dev_stats; ++ unsigned new_activity; ++ struct rtnl_link_stats64 temp; ++ ++ write_lock(&trigger_data->lock); ++ ++ if (!trigger_data->link_up || !trigger_data->net_dev || (trigger_data->mode & (MODE_TX | MODE_RX)) == 0) { ++ /* we don't need to do timer work, just reflect link state. */ ++ led_set_brightness(trigger_data->led_cdev, ((trigger_data->mode & MODE_LINK) != 0 && trigger_data->link_up) ? LED_FULL : LED_OFF); ++ goto no_restart; ++ } ++ ++ dev_stats = dev_get_stats(trigger_data->net_dev, &temp); ++ new_activity = ++ ((trigger_data->mode & MODE_TX) ? dev_stats->tx_packets : 0) + ++ ((trigger_data->mode & MODE_RX) ? dev_stats->rx_packets : 0); ++ ++ if (trigger_data->mode & MODE_LINK) { ++ /* base state is ON (link present) */ ++ /* if there's no link, we don't get this far and the LED is off */ ++ ++ /* OFF -> ON always */ ++ /* ON -> OFF on activity */ ++ if (trigger_data->led_cdev->brightness == LED_OFF) { ++ led_set_brightness(trigger_data->led_cdev, LED_FULL); ++ } else if (trigger_data->last_activity != new_activity) { ++ led_set_brightness(trigger_data->led_cdev, LED_OFF); ++ } ++ } else { ++ /* base state is OFF */ ++ /* ON -> OFF always */ ++ /* OFF -> ON on activity */ ++ if (trigger_data->led_cdev->brightness == LED_FULL) { ++ led_set_brightness(trigger_data->led_cdev, LED_OFF); ++ } else if (trigger_data->last_activity != new_activity) { ++ led_set_brightness(trigger_data->led_cdev, LED_FULL); ++ } ++ } ++ ++ trigger_data->last_activity = new_activity; ++ mod_timer(&trigger_data->timer, jiffies + trigger_data->interval); ++ ++no_restart: ++ write_unlock(&trigger_data->lock); ++} ++ ++static void netdev_trig_activate(struct led_classdev *led_cdev) ++{ ++ struct led_netdev_data *trigger_data; ++ int rc; ++ ++ trigger_data = kzalloc(sizeof(struct led_netdev_data), GFP_KERNEL); ++ if (!trigger_data) ++ return; ++ ++ rwlock_init(&trigger_data->lock); ++ ++ trigger_data->notifier.notifier_call = netdev_trig_notify; ++ trigger_data->notifier.priority = 10; ++ ++ setup_timer(&trigger_data->timer, netdev_trig_timer, (unsigned long) trigger_data); ++ ++ trigger_data->led_cdev = led_cdev; ++ trigger_data->net_dev = NULL; ++ trigger_data->device_name[0] = 0; ++ ++ trigger_data->mode = 0; ++ trigger_data->interval = msecs_to_jiffies(50); ++ trigger_data->link_up = 0; ++ trigger_data->last_activity = 0; ++ ++ led_cdev->trigger_data = trigger_data; ++ ++ rc = device_create_file(led_cdev->dev, &dev_attr_device_name); ++ if (rc) ++ goto err_out; ++ rc = device_create_file(led_cdev->dev, &dev_attr_mode); ++ if (rc) ++ goto err_out_device_name; ++ rc = device_create_file(led_cdev->dev, &dev_attr_interval); ++ if (rc) ++ goto err_out_mode; ++ ++ register_netdevice_notifier(&trigger_data->notifier); ++ return; ++ ++err_out_mode: ++ device_remove_file(led_cdev->dev, &dev_attr_mode); ++err_out_device_name: ++ device_remove_file(led_cdev->dev, &dev_attr_device_name); ++err_out: ++ led_cdev->trigger_data = NULL; ++ kfree(trigger_data); ++} ++ ++static void netdev_trig_deactivate(struct led_classdev *led_cdev) ++{ ++ struct led_netdev_data *trigger_data = led_cdev->trigger_data; ++ ++ if (trigger_data) { ++ unregister_netdevice_notifier(&trigger_data->notifier); ++ ++ device_remove_file(led_cdev->dev, &dev_attr_device_name); ++ device_remove_file(led_cdev->dev, &dev_attr_mode); ++ device_remove_file(led_cdev->dev, &dev_attr_interval); ++ ++ write_lock(&trigger_data->lock); ++ ++ if (trigger_data->net_dev) { ++ dev_put(trigger_data->net_dev); ++ trigger_data->net_dev = NULL; ++ } ++ ++ write_unlock(&trigger_data->lock); ++ ++ del_timer_sync(&trigger_data->timer); ++ ++ kfree(trigger_data); ++ } ++} ++ ++static struct led_trigger netdev_led_trigger = { ++ .name = "netdev", ++ .activate = netdev_trig_activate, ++ .deactivate = netdev_trig_deactivate, ++}; ++ ++static int __init netdev_trig_init(void) ++{ ++ return led_trigger_register(&netdev_led_trigger); ++} ++ ++static void __exit netdev_trig_exit(void) ++{ ++ led_trigger_unregister(&netdev_led_trigger); ++} ++ ++module_init(netdev_trig_init); ++module_exit(netdev_trig_exit); ++ ++MODULE_AUTHOR("Oliver Jowett "); ++MODULE_DESCRIPTION("Netdev LED trigger"); ++MODULE_LICENSE("GPL"); +diff -Naur linux-3.14.22.org/drivers/leds/trigger/Makefile linux-3.14.22/drivers/leds/trigger/Makefile +--- linux-3.14.22.org/drivers/leds/trigger/Makefile 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/drivers/leds/trigger/Makefile 2014-11-06 17:51:29.818748360 +0100 +@@ -8,3 +8,4 @@ + obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o + obj-$(CONFIG_LEDS_TRIGGER_TRANSIENT) += ledtrig-transient.o + obj-$(CONFIG_LEDS_TRIGGER_CAMERA) += ledtrig-camera.o ++obj-$(CONFIG_LEDS_TRIGGER_NETDEV) += ledtrig-netdev.o From 9d1da799fa7f2b07c742f1bcb7a7970c70050b25 Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Thu, 6 Nov 2014 23:53:01 +0100 Subject: [PATCH 219/297] wget: Update to 1.16 --- lfs/wget | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lfs/wget b/lfs/wget index fd4c9472d..eef2a2597 100644 --- a/lfs/wget +++ b/lfs/wget @@ -1,7 +1,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007-2013 IPFire Team # +# Copyright (C) 2007-2014 IPFire Team # # # # 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 # @@ -24,7 +24,7 @@ include Config -VER = 1.14 +VER = 1.16 THISAPP = wget-$(VER) DL_FILE = $(THISAPP).tar.xz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 316f6f59292c9098ad81fd54f658c579 +$(DL_FILE)_MD5 = fe102975ab3a6c049777883f1bb9ad07 install : $(TARGET) @@ -71,8 +71,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar Jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/wget-1.14-texi2pod-1.patch - cd $(DIR_APP) && ./configure \ --prefix=/usr \ --sysconfdir=/etc \ From 6deed5addbf2ecc899fc4420469372fc98194aee Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Fri, 7 Nov 2014 12:47:08 +0100 Subject: [PATCH 220/297] smartmontools: Update to 6.3 --- lfs/smartmontools | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lfs/smartmontools b/lfs/smartmontools index 196b4665a..c3ba635a5 100644 --- a/lfs/smartmontools +++ b/lfs/smartmontools @@ -1,7 +1,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007-2012 IPFire Team # +# Copyright (C) 2007-2014 IPFire Team # # # # 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 # @@ -24,7 +24,7 @@ include Config -VER = 6.1 +VER = 6.3 THISAPP = smartmontools-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 83a3a681f8183ed858392d550ae1cca6 +$(DL_FILE)_MD5 = 2ea0c62206e110192a97b59291b17f54 install : $(TARGET) From b1ad1b744f845e8d574af8bcd03f4590f6bd9ccc Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Sun, 9 Nov 2014 12:11:21 +0100 Subject: [PATCH 221/297] libpcap: Update to 1.6.2, added --enable-bluetooth=no --- lfs/libpcap | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lfs/libpcap b/lfs/libpcap index 0f118a428..07e65cd20 100644 --- a/lfs/libpcap +++ b/lfs/libpcap @@ -1,7 +1,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007 Michael Tremer & Christian Schmidt # +# Copyright (C) 2014 Michael Tremer & Christian Schmidt # # # # 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 # @@ -24,7 +24,7 @@ include Config -VER = 1.4.0 +VER = 1.6.2 THISAPP = libpcap-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -42,7 +42,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 56e88a5aabdd1e04414985ac24f7e76c +$(DL_FILE)_MD5 = 5f14191c1a684a75532c739c2c4059fa install : $(TARGET) @@ -72,7 +72,10 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && ./configure --prefix=/usr + cd $(DIR_APP) && ./configure \ + --prefix=/usr \ + --enable-bluetooth=no + cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install @rm -rf $(DIR_APP) From 1f8ea39aca5468191ebb05ad23576f2d1bf43f1c Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Tue, 11 Nov 2014 18:40:52 +0100 Subject: [PATCH 222/297] wget: deleted obsolete patch-file --- src/patches/wget-1.14-texi2pod-1.patch | 32 -------------------------- 1 file changed, 32 deletions(-) delete mode 100644 src/patches/wget-1.14-texi2pod-1.patch diff --git a/src/patches/wget-1.14-texi2pod-1.patch b/src/patches/wget-1.14-texi2pod-1.patch deleted file mode 100644 index 700242bf4..000000000 --- a/src/patches/wget-1.14-texi2pod-1.patch +++ /dev/null @@ -1,32 +0,0 @@ -Submitted By: Ken Moffat -Date: 2013-06-18 -Initial Package Version: 1.14 -Upstream Status: Submitted -Origin: Arch -Description: Build with perl-5.18. - -http://lists.gnu.org/archive/html/bug-wget/2013-06/msg00046.html - -From 2ed1707b5d8be66feb80cccfe8e11e719b52b99a Mon Sep 17 00:00:00 2001 -From: Dave Reisner -Date: Mon, 17 Jun 2013 23:31:46 +0530 -Subject: [PATCH] Fix error in texi2pod intriduced with Perl 5.18 - ---- - -diff --git a/doc/texi2pod.pl b/doc/texi2pod.pl -index 86c4b18..9db6de1 100755 ---- a/doc/texi2pod.pl -+++ b/doc/texi2pod.pl -@@ -291,7 +291,7 @@ while(<$inf>) { - if (defined $1) { - my $thing = $1; - if ($ic =~ /\@asis/) { -- $_ = "\n=item $thing\n"; -+ $_ = "\n=item C<$thing>\n"; - } else { - # Entity escapes prevent munging by the <> processing below. - $_ = "\n=item $ic\<$thing\>\n"; --- -1.8.3.1 - From ba85a1beb487854a14cbb288b436d6a88265a126 Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Tue, 11 Nov 2014 20:41:10 +0100 Subject: [PATCH 223/297] htop: Update to 1.0.3 --- lfs/htop | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/htop b/lfs/htop index c334a91c0..3e5b53263 100644 --- a/lfs/htop +++ b/lfs/htop @@ -1,7 +1,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007-2013 IPFire Team # +# Copyright (C) 2007-2014 IPFire Team # # # # 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 # @@ -24,7 +24,7 @@ include Config -VER = 1.0.2 +VER = 1.0.3 THISAPP = htop-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -32,7 +32,7 @@ DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = htop -PAK_VER = 6 +PAK_VER = 7 DEPS = "" @@ -44,7 +44,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 0d01cca8df3349c74569cefebbd9919e +$(DL_FILE)_MD5 = e768b9b55c033d9c1dffda72db3a6ac7 install : $(TARGET) From ffbe77c8bcf247a484b7791707e98fd3ab59fbdc Mon Sep 17 00:00:00 2001 From: Erik Kapfer Date: Thu, 13 Nov 2014 03:09:51 +0100 Subject: [PATCH 224/297] OpenVPN: Added additional configuration for server and clients * Added a possibility to manualy extend OpenVPNs server and client configuration. * Added also a checkbox (on/off) in the WUI under 'Advanced server options' . * Changed the order in 'Miscellaneous options' section for better overview. * Optimized code in particular sections a little. Added a filehandle instead of system(touch...) for ccd* file generation. Unified the html code tags in processed section. Fixes #10577 --- html/cgi-bin/ovpnmain.cgi | 133 +++++++++++++++++++++++++++++--------- langs/de/cgi-bin/de.pl | 1 + langs/en/cgi-bin/en.pl | 1 + 3 files changed, 105 insertions(+), 30 deletions(-) diff --git a/html/cgi-bin/ovpnmain.cgi b/html/cgi-bin/ovpnmain.cgi index 969b2557f..7048ca206 100644 --- a/html/cgi-bin/ovpnmain.cgi +++ b/html/cgi-bin/ovpnmain.cgi @@ -70,6 +70,9 @@ my $configgrp="${General::swroot}/fwhosts/customgroups"; my $customnet="${General::swroot}/fwhosts/customnetworks"; my $name; my $col=""; +my $local_serverconf = "${General::swroot}/ovpn/scripts/server.conf.local"; +my $local_clientconf = "${General::swroot}/ovpn/scripts/client.conf.local"; + &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); $cgiparams{'ENABLED'} = 'off'; $cgiparams{'ENABLED_BLUE'} = 'off'; @@ -94,10 +97,33 @@ $cgiparams{'DCIPHER'} = ''; $cgiparams{'DAUTH'} = ''; $cgiparams{'TLSAUTH'} = ''; $routes_push_file = "${General::swroot}/ovpn/routes_push"; -unless (-e $routes_push_file) { system("touch $routes_push_file"); } -unless (-e "${General::swroot}/ovpn/ccd.conf") { system("touch ${General::swroot}/ovpn/ccd.conf"); } -unless (-e "${General::swroot}/ovpn/ccdroute") { system("touch ${General::swroot}/ovpn/ccdroute"); } -unless (-e "${General::swroot}/ovpn/ccdroute2") { system("touch ${General::swroot}/ovpn/ccdroute2"); } + +# Add CCD files if not already presant +unless (-e $routes_push_file) { + open(RPF, ">$routes_push_file"); + close(RPF); +} +unless (-e "${General::swroot}/ovpn/ccd.conf") { + open(CCDC, ">${General::swroot}/ovpn/ccd.conf"); + close (CCDC); +} +unless (-e "${General::swroot}/ovpn/ccdroute") { + open(CCDR, ">${General::swroot}/ovpn/ccdroute"); + close (CCDR); +} +unless (-e "${General::swroot}/ovpn/ccdroute2") { + open(CCDRT, ">${General::swroot}/ovpn/ccdroute2"); + close (CCDRT); +} +# Add additional configs if not already presant +unless (-e "$local_serverconf") { + open(LSC, ">$local_serverconf"); + close (LSC); +} +unless (-e "$local_clientconf") { + open(LCC, ">$local_clientconf"); + close (LCC); +} &Header::getcgihash(\%cgiparams, {'wantfile' => 1, 'filevar' => 'FH'}); @@ -306,7 +332,22 @@ sub writeserverconf { print CONF "verb $sovpnsettings{LOG_VERB}\n"; } else { print CONF "verb 3\n"; - } + } + # Print server.conf.local if entries exist to server.conf + if ( !-z $local_serverconf && $sovpnsettings{'ADDITIONAL_CONFIGS'} eq 'on') { + open (LSC, "$local_serverconf"); + print CONF "\n#---------------------------\n"; + print CONF "# Start of custom directives\n"; + print CONF "# from server.conf.local\n"; + print CONF "#---------------------------\n\n"; + while () { + print CONF $_; + } + print CONF "\n#-----------------------------\n"; + print CONF "# End of custom directives\n"; + print CONF "#-----------------------------\n"; + close (LSC); + } print CONF "\n"; close(CONF); @@ -685,6 +726,7 @@ if ($cgiparams{'ACTION'} eq $Lang::tr{'save-adv-options'}) { $vpnsettings{'MAX_CLIENTS'} = $cgiparams{'MAX_CLIENTS'}; $vpnsettings{'REDIRECT_GW_DEF1'} = $cgiparams{'REDIRECT_GW_DEF1'}; $vpnsettings{'CLIENT2CLIENT'} = $cgiparams{'CLIENT2CLIENT'}; + $vpnsettings{'ADDITIONAL_CONFIGS'} = $cgiparams{'ADDITIONAL_CONFIGS'}; $vpnsettings{'DHCP_DOMAIN'} = $cgiparams{'DHCP_DOMAIN'}; $vpnsettings{'DHCP_DNS'} = $cgiparams{'DHCP_DNS'}; $vpnsettings{'DHCP_WINS'} = $cgiparams{'DHCP_WINS'}; @@ -2226,6 +2268,21 @@ else print CLIENTCONF "mtu-disc $vpnsettings{'PMTU_DISCOVERY'}\r\n"; } } + # Print client.conf.local if entries exist to client.ovpn + if (!-z $local_clientconf && $vpnsettings{'ADDITIONAL_CONFIGS'} eq 'on') { + open (LCC, "$local_clientconf"); + print CLIENTCONF "\n#---------------------------\n"; + print CLIENTCONF "# Start of custom directives\n"; + print CLIENTCONF "# from client.conf.local\n"; + print CLIENTCONF "#---------------------------\n\n"; + while () { + print CLIENTCONF $_; + } + print CLIENTCONF "\n#---------------------------\n"; + print CLIENTCONF "# End of custom directives\n"; + print CLIENTCONF "#---------------------------\n\n"; + close (LCC); + } close(CLIENTCONF); $zip->addFile( "$tempdir/$clientovpn", $clientovpn) or die "Can't add file $clientovpn\n"; @@ -2458,6 +2515,9 @@ ADV_ERROR: $checked{'REDIRECT_GW_DEF1'}{'off'} = ''; $checked{'REDIRECT_GW_DEF1'}{'on'} = ''; $checked{'REDIRECT_GW_DEF1'}{$cgiparams{'REDIRECT_GW_DEF1'}} = 'CHECKED'; + $checked{'ADDITIONAL_CONFIGS'}{'off'} = ''; + $checked{'ADDITIONAL_CONFIGS'}{'on'} = ''; + $checked{'ADDITIONAL_CONFIGS'}{$cgiparams{'ADDITIONAL_CONFIGS'}} = 'CHECKED'; $checked{'MSSFIX'}{'off'} = ''; $checked{'MSSFIX'}{'on'} = ''; $checked{'MSSFIX'}{$cgiparams{'MSSFIX'}} = 'CHECKED'; @@ -2538,39 +2598,52 @@ print <


- + - - + + + - - + + + - - + + + - - - - - + + - - - - + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index b7692ee7b..4420f72c1 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -1689,6 +1689,7 @@ 'outgoing traffic in bytes per second' => 'Abgehender Verkehr', 'override mtu' => 'Überschreibe Standard MTU', 'ovpn' => 'OpenVPN', +'ovpn add conf' => 'Erweiterte Konfiguration', 'ovpn con stat' => 'OpenVPN Verbindungs-Statistik', 'ovpn config' => 'OVPN-Konfiguration', 'ovpn crypt options' => 'Kryptografieoptionen', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index 198640934..0843ae590 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -1720,6 +1720,7 @@ 'outgoing traffic in bytes per second' => 'Outgoing Traffic', 'override mtu' => 'Override default MTU', 'ovpn' => 'OpenVPN', +'ovpn add conf' => 'Additional configuration', 'ovpn con stat' => 'OpenVPN Connection Statistics', 'ovpn config' => 'OVPN-Config', 'ovpn crypt options' => 'Cryptographic options', From f4fbb93510d52300ce7140227804f38e08cf332c Mon Sep 17 00:00:00 2001 From: Erik Kapfer Date: Thu, 13 Nov 2014 10:40:42 +0100 Subject: [PATCH 225/297] OpenVPN: Added 'valid til (days)' field for N2N. Fixes #10680 --- html/cgi-bin/ovpnmain.cgi | 36 +++++++++++++++++++++--------------- langs/de/cgi-bin/de.pl | 1 + langs/en/cgi-bin/en.pl | 1 + 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/html/cgi-bin/ovpnmain.cgi b/html/cgi-bin/ovpnmain.cgi index 969b2557f..52db3255c 100644 --- a/html/cgi-bin/ovpnmain.cgi +++ b/html/cgi-bin/ovpnmain.cgi @@ -4014,6 +4014,10 @@ if ($cgiparams{'TYPE'} eq 'net') { $errormessage = $Lang::tr{'passwords do not match'}; goto VPNCONF_ERROR; } + if ($cgiparams{'DAYS_VALID'} ne '' && $cgiparams{'DAYS_VALID'} !~ /^[0-9]+$/) { + $errormessage = $Lang::tr{'invalid input for valid till days'}; + goto VPNCONF_ERROR; + } # Replace empty strings with a . (my $ou = $cgiparams{'CERT_OU'}) =~ s/^\s*$/\./; @@ -4284,6 +4288,7 @@ if ($cgiparams{'TYPE'} eq 'net') { $cgiparams{'CERT_CITY'} = $vpnsettings{'ROOTCERT_CITY'}; $cgiparams{'CERT_STATE'} = $vpnsettings{'ROOTCERT_STATE'}; $cgiparams{'CERT_COUNTRY'} = $vpnsettings{'ROOTCERT_COUNTRY'}; + $cgiparams{'DAYS_VALID'} = $vpnsettings{'DAYS_VALID'}; } VPNCONF_ERROR: @@ -4645,27 +4650,28 @@ END if ($cgiparams{'TYPE'} eq 'host') { print < - - - - + + + + - + - - - -
$Lang::tr{'misc-options'}
Client-To-Client
Redirect-Gateway def1
Max-Clients
Keepalive
- (ping/ping-restart)
$Lang::tr{'ovpn add conf'}$Lang::tr{'openvpn default'}: off
fragment
mssfix$Lang::tr{'openvpn default'}: off
mssfix$Lang::tr{'openvpn default'}: off
fragment
Max-Clients
Keepalive
+ (ping/ping-restart)
$Lang::tr{'ovpn mtu-disc'}
 $Lang::tr{'valid till'} (days):
 
 $Lang::tr{'valid till'} (days):
  $Lang::tr{'pkcs12 file password'}:
 $Lang::tr{'pkcs12 file password'}:
($Lang::tr{'confirmation'})
 $Lang::tr{'pkcs12 file password'}:
($Lang::tr{'confirmation'})
 

* $Lang::tr{'this field may be blank'}
+   +
+ * $Lang::tr{'this field may be blank'} + END }else{ print < -     -     -
- * $Lang::tr{'this field may be blank'} + +  $Lang::tr{'valid till'} (days): + +     +     +
+ * $Lang::tr{'this field may be blank'} END diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index b7692ee7b..1aac91ddc 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -1295,6 +1295,7 @@ 'invalid input for organization' => 'Ungültige Eingabe für Organisation', 'invalid input for remote host/ip' => 'Ungültige Eingabe für Remote Host/IP', 'invalid input for state or province' => 'Ungültige Eingabe für Bundesstaat oder Provinz.', +'invalid input for valid till days' => 'Ungültige Eingabe für Gültig bis (Tage).', 'invalid ip' => 'Ungültige IP-Adresse', 'invalid keep time' => 'Die Aufbewahrungszeit muss eine gültige Zahl sein', 'invalid key' => 'Ungültiger Schlüssel.', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index 198640934..afcc034eb 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -1325,6 +1325,7 @@ 'invalid input for organization' => 'Invalid input for organization', 'invalid input for remote host/ip' => 'Invalid input for remote host/ip.', 'invalid input for state or province' => 'Invalid input for state or province.', +'invalid input for valid till days' => 'Invalid input for Valid till (days).', 'invalid ip' => 'Invalid IP Address', 'invalid keep time' => 'Keep time must be a valid number', 'invalid key' => 'Invalid key.', From ade96ba8a590df6411f7effec637609494072034 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 13 Nov 2014 23:58:05 +0100 Subject: [PATCH 226/297] installer: Fix umounting destination --- src/installer/hw.c | 41 +++++++++++++++++++++++++++++++--------- src/installer/main.c | 45 +++++++++++++++++++++++++++++--------------- 2 files changed, 62 insertions(+), 24 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index d74526050..ce9777500 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -138,7 +139,16 @@ int hw_mount(const char* source, const char* target, const char* fs, int flags) } int hw_umount(const char* target) { - return umount2(target, 0); + int r = umount2(target, 0); + + if (r && errno == EBUSY) { + // Give it a moment to settle + sleep(1); + + r = umount2(target, MNT_FORCE); + } + + return r; } static int hw_test_source_medium(const char* path) { @@ -869,36 +879,47 @@ int hw_mount_filesystems(struct hw_destination* dest, const char* prefix) { } int hw_umount_filesystems(struct hw_destination* dest, const char* prefix) { + int r; + char target[STRING_SIZE]; + // Write all buffers to disk before umounting hw_sync(); // boot if (*dest->part_boot) { - hw_umount(dest->part_boot); + snprintf(target, sizeof(target), "%s%s", prefix, HW_PATH_BOOT); + r = hw_umount(target); + if (r) + return -1; } // data if (*dest->part_data) { - hw_umount(dest->part_data); + snprintf(target, sizeof(target), "%s%s", prefix, HW_PATH_DATA); + r = hw_umount(target); + if (r) + return -1; } - // root - hw_umount(dest->part_root); - // swap if (*dest->part_swap) { swapoff(dest->part_swap); } // misc filesystems - char target[STRING_SIZE]; char** otherfs = other_filesystems; - while (*otherfs) { snprintf(target, sizeof(target), "%s%s", prefix, *otherfs++); - hw_umount(target); + r = hw_umount(target); + if (r) + return -1; } + // root + r = hw_umount(prefix); + if (r) + return -1; + return 0; } @@ -1012,6 +1033,8 @@ int hw_install_bootloader(struct hw_destination* dest, const char* output) { r = system_chroot(output, DESTINATION_MOUNT_PATH, cmd); } + hw_sync(); + return r; } diff --git a/src/installer/main.c b/src/installer/main.c index 6e151fbd5..d02db2834 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -839,12 +839,28 @@ int main(int argc, char *argv[]) { free(backup_file); } - // Umount the destination drive - hw_umount_filesystems(destination, DESTINATION_MOUNT_PATH); + // Download and execute the postinstall script + if (*config.postinstall) { + snprintf(commandstring, sizeof(commandstring), + "/usr/bin/execute-postinstall.sh %s %s", DESTINATION_MOUNT_PATH, config.postinstall); - // Stop the RAID array if we are using RAID - if (destination->is_raid) - hw_stop_all_raid_arrays(logfile); + if (runcommandwithstatus(commandstring, title, _("Running post-install script..."), logfile)) { + errorbox(_("Post-install script failed.")); + goto EXIT; + } + } + + // Umount the destination drive + statuswindow(60, 4, title, _("Umounting filesystems...")); + + rc = hw_umount_filesystems(destination, DESTINATION_MOUNT_PATH); + if (rc) { + // Show an error message if filesystems could not be umounted properly + snprintf(message, sizeof(message), + _("Could not umount all filesystems successfully:\n\n %s"), strerror(errno)); + errorbox(message); + goto EXIT; + } // Umount source drive and eject hw_umount(SOURCE_MOUNT_PATH); @@ -860,19 +876,18 @@ int main(int argc, char *argv[]) { snprintf(commandstring, STRING_SIZE, "/usr/bin/eject %s", sourcedrive); mysystem(logfile, commandstring); } + newtPopWindow(); - // Download and execute the postinstall script - if (*config.postinstall) { - snprintf(commandstring, sizeof(commandstring), - "/usr/bin/execute-postinstall.sh %s %s", DESTINATION_MOUNT_PATH, config.postinstall); + // Stop the RAID array if we are using RAID + if (destination->is_raid) + hw_stop_all_raid_arrays(logfile); - if (runcommandwithstatus(commandstring, title, _("Running post-install script..."), logfile)) { - errorbox(_("Post-install script failed.")); - goto EXIT; - } - } + // Show a short message that the installation went well and + // wait a moment so that all disk caches get flushed. + if (config.unattended) { + splashWindow(title, _("Unattended installation has finished. The system will be shutting down in a moment..."), 5); - if (!config.unattended) { + } else { snprintf(message, sizeof(message), _( "%s was successfully installed!\n\n" "Please remove any installation mediums from this system and hit the reboot button. " From a046e8a6abf0e28b836cf713625e8e2044bafed1 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 14 Nov 2014 00:02:41 +0100 Subject: [PATCH 227/297] installer: Only drop to a debug shell after a segmentation fault --- src/installer/dracut-module/run-installer.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/installer/dracut-module/run-installer.sh b/src/installer/dracut-module/run-installer.sh index 1a7bd1372..b62cfa996 100644 --- a/src/installer/dracut-module/run-installer.sh +++ b/src/installer/dracut-module/run-installer.sh @@ -22,10 +22,7 @@ echo "Loading Installer..." ret=$? case "${ret}" in - 0) - # The installer has finished without a problem. - ;; - *) + 139) echo "The installer has crashed. You will be dropped to a debugging shell" /bin/bash --login ;; From da4529ae5110d3e33d0f15338da5288728352d39 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 16 Nov 2014 10:07:33 +0100 Subject: [PATCH 228/297] kernel-pae: update un/install scripts for grub2. --- src/paks/linux-pae/install.sh | 15 +++++++++++---- src/paks/linux-pae/uninstall.sh | 13 ++++++++----- src/paks/linux-pae/update.sh | 2 +- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/paks/linux-pae/install.sh b/src/paks/linux-pae/install.sh index 043bd4528..3d59d70c0 100644 --- a/src/paks/linux-pae/install.sh +++ b/src/paks/linux-pae/install.sh @@ -17,7 +17,7 @@ # along with IPFire; if not, write to the Free Software # # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # -# Copyright (C) 2007-2013 IPFire-Team . # +# Copyright (C) 2007-2014 IPFire-Team . # # # ############################################################################ # @@ -31,6 +31,7 @@ if [ ! -z $ROOTUUID ]; then ROOT="UUID=$ROOTUUID" fi +if [ -f /boot/grub/grub.conf ]; then MOUNT=`grep "kernel" /boot/grub/grub.conf | tail -n 1` # Nur den letzten Parameter verwenden echo $MOUNT > /dev/null @@ -63,6 +64,8 @@ echo "title IPFire (PAE-Kernel)" >> /boot/grub/grub.conf echo " kernel /vmlinuz-$KVER-ipfire-pae root=$ROOT panic=10$console $MOUNT" >> /boot/grub/grub.conf echo " initrd /ipfirerd-$KVER-pae.img" >> /boot/grub/grub.conf echo " savedefault $ENTRY" >> /boot/grub/grub.conf +fi + # # Create new module depency # @@ -70,11 +73,15 @@ depmod -a $KVER-ipfire-pae # # Made initramdisk # -/sbin/dracut --force --verbose /boot/ipfirerd-$KVER-pae.img $KVER-ipfire-pae +/usr/bin/dracut --force --xz /boot/initramfs-$KVER-ipfire-pae.img $KVER-ipfire-pae -# Default pae and request a reboot if pae is supported +# +# Update grub2 config +# +grub-mkconfig > /boot/grub/grub.cfg + +# request a reboot if pae is supported if [ ! "$(grep "^flags.* pae " /proc/cpuinfo)" == "" ]; then - grub-set-default $ENTRY touch /var/run/need_reboot fi sync && sync \ No newline at end of file diff --git a/src/paks/linux-pae/uninstall.sh b/src/paks/linux-pae/uninstall.sh index 69c7e565f..443328b24 100644 --- a/src/paks/linux-pae/uninstall.sh +++ b/src/paks/linux-pae/uninstall.sh @@ -17,15 +17,18 @@ # along with IPFire; if not, write to the Free Software # # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # -# Copyright (C) 2007-2013 IPFire-Team . # +# Copyright (C) 2007-2014 IPFire-Team . # # # ############################################################################ # . /opt/pakfire/lib/functions.sh remove_files -rm -rf /boot/ipfirerd-*-pae.img +rm -rf /boot/initramfs-*-pae.img +rm -rf /boot/vmlinuz-*-pae rm -rf /lib/modules/*-ipfire-pae -cp /boot/grub/grub.conf /boot/grub/grub-backup-pae_uninstall.conf -sed -i "/title IPFire (PAE-Kernel)/,+3d" /boot/grub/grub.conf -grub-set-default 1 +if [ -f /boot/grub/grub.conf ]; then + cp /boot/grub/grub.conf /boot/grub/grub-backup-pae_uninstall.conf + sed -i "/title IPFire (PAE-Kernel)/,+3d" /boot/grub/grub.conf +fi +grub-mkconfig > /boot/grub/grub.cfg sync && sync diff --git a/src/paks/linux-pae/update.sh b/src/paks/linux-pae/update.sh index 1ad1831a7..00a3c7872 100644 --- a/src/paks/linux-pae/update.sh +++ b/src/paks/linux-pae/update.sh @@ -17,7 +17,7 @@ # along with IPFire; if not, write to the Free Software # # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # -# Copyright (C) 2007-2013 IPFire-Team . # +# Copyright (C) 2007-2014 IPFire-Team . # # # ############################################################################ # From c5a5b13e8ed808c726b3bb4142fa3dd49ad9d4a8 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 16 Nov 2014 11:37:47 +0100 Subject: [PATCH 229/297] installer: Power off instead of reboot after unattended install --- src/installer/dracut-module/run-installer.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/installer/dracut-module/run-installer.sh b/src/installer/dracut-module/run-installer.sh index b62cfa996..ea9669a86 100644 --- a/src/installer/dracut-module/run-installer.sh +++ b/src/installer/dracut-module/run-installer.sh @@ -3,6 +3,11 @@ # IPFire Installer RC # +unattended=0 +if grep -q "installer.unattended" /proc/cmdline; then + unattended=1 +fi + # Enable Unicode echo -en '\033%G' && kbd_mode -u @@ -28,5 +33,10 @@ case "${ret}" in ;; esac +# Poweroff after an unattended installation +if [ "${unattended}" = "1" ]; then + /shutdown poweroff +fi + # Reboot the system /shutdown reboot From 7764239659367c6cb3032bb099a1f1aad5751fda Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 16 Nov 2014 14:09:50 +0100 Subject: [PATCH 230/297] core86: Do all other fancy kernel updating stuff --- config/rootfiles/core/86/update.sh | 239 +++++++++++++++++++++++++---- 1 file changed, 212 insertions(+), 27 deletions(-) diff --git a/config/rootfiles/core/86/update.sh b/config/rootfiles/core/86/update.sh index 7911a11f5..c1ea59c4e 100644 --- a/config/rootfiles/core/86/update.sh +++ b/config/rootfiles/core/86/update.sh @@ -24,54 +24,239 @@ . /opt/pakfire/lib/functions.sh /usr/local/bin/backupctrl exclude >/dev/null 2>&1 -# Find root device -function find_root_device() { - while read -r dev mountpoint fs options; do - # Skip generic entries - [ "${dev}" = "rootfs" ] && continue - - if [ "${mountpoint}" = "/" ]; then - echo "${mountpoint}" - break - fi - done < /proc/mounts +function add_to_backup () +{ + # Add path to ROOTFILES but remove old entries to prevent double + # files in the tar + grep -v "^$1" /opt/pakfire/tmp/ROOTFILES > /opt/pakfire/tmp/ROOTFILES.tmp + mv /opt/pakfire/tmp/ROOTFILES.tmp /opt/pakfire/tmp/ROOTFILES + echo $1 >> /opt/pakfire/tmp/ROOTFILES } +# # Remove old core updates from pakfire cache to save space... core=86 -for (( i=1; i<=$core; i++ )) +for (( i=1; i<=${core}; i++ )) do rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire done -# Stop services +# +# Do some sanity checks. +case $(uname -r) in + *-ipfire-versatile ) + /usr/bin/logger -p syslog.emerg -t ipfire \ + "core-update-${core}: ERROR cannot update. versatile support is dropped." + # Report no error to pakfire. So it does not try to install it again. + exit 0 + ;; + *-ipfire* ) + # Ok. + ;; + * ) + /usr/bin/logger -p syslog.emerg -t ipfire \ + "core-update-${core}: ERROR cannot update. No IPFire Kernel." + exit 1 + ;; +esac -# Remove old files -# Extract files -extract_files +# +# +KVER="xxxKVERxxx" -# Start services +# +# check if we the backup file already exist +if [ -e /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz ]; then + echo Moving backup to backup-old ... + mv -f /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz \ + /var/ipfire/backup/core-upgrade${core}_${KVER}-old.tar.xz +fi +echo First we made a backup of all files that was inside of the +echo update archive. This may take a while ... +# Add some files that are not in the package to backup +add_to_backup lib/modules +add_to_backup boot + +# Backup the files +tar cJvf /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz \ + -C / -T /opt/pakfire/tmp/ROOTFILES --exclude='#*' --exclude='/var/cache' > /dev/null 2>&1 + +# Check diskspace on root +ROOTSPACE=`df / -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1` + +if [ $ROOTSPACE -lt 100000 ]; then + /usr/bin/logger -p syslog.emerg -t ipfire \ + "core-update-${core}: ERROR cannot update because not enough free space on root." + exit 2 +fi + + +echo +echo Update Kernel to $KVER ... +# +# Remove old kernel, configs, initrd, modules ... +# +rm -rf /boot/System.map-* +rm -rf /boot/config-* +rm -rf /boot/ipfirerd-* +rm -rf /boot/vmlinuz-* +rm -rf /boot/uImage-ipfire-* +rm -rf /boot/uInit-ipfire-* +rm -rf /lib/modules + +case "$(uname -m)" in + i?86) + # Backup grub.conf + cp -vf /boot/grub/grub.conf /boot/grub-legacy.conf + + # Remove all files that belong to GRUB-legacy + rm -rfv /boot/grub + ;; +esac +# +#Stop services +/etc/init.d/snort stop +/etc/init.d/squid stop +/etc/init.d/ipsec stop +/etc/init.d/apache stop + +# +#Extract files +tar xavf /opt/pakfire/tmp/files* --no-overwrite-dir -p --numeric-owner -C / + +# Check diskspace on boot +BOOTSPACE=`df /boot -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1` + +if [ $BOOTSPACE -lt 1000 ]; then + case $(uname -r) in + *-ipfire-kirkwood ) + # Special handling for old kirkwood images. + # (install only kirkwood kernel) + rm -rf /boot/* + tar xavf /opt/pakfire/tmp/files* --no-overwrite-dir -p \ + --numeric-owner -C / --wildcards 'boot/*-kirkwood*' + ;; + * ) + /usr/bin/logger -p syslog.emerg -t ipfire \ + "core-update-${core}: FATAL-ERROR space run out on boot. System is not bootable..." + /etc/init.d/apache start + exit 4 + ;; + esac +fi # Update Language cache perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" -# Upgrade to GRUB2 -root_device="$(find_root_device)" -if ! grub-install "${root_device}"; then - if ! grub-install --force "${root_device}"; then - echo "Could not update the bootloader!" +# Add nobody to group dialout +usermod -a -G dialout nobody + +# +# Start services +# +/etc/init.d/apache start +/etc/init.d/squid start +/etc/init.d/snort start +if [ `grep "ENABLED=on" /var/ipfire/vpn/settings` ]; then + /etc/init.d/ipsec start +fi + +case "$(uname -m)" in + i?86) + # + # Update to GRUB2 + # + echo + echo Update grub configuration ... + if grep -qE "^serial" /boot/grub-legacy.conf; then + sed -i /etc/default/grub \ + -e "s| panic=10 | console=ttyS0,115200n8 panic=10 |g" + echo "GRUB_TERMINAL=\"serial\"" >> /etc/default/grub + echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> /etc/default/grub + fi + grub-mkconfig -o /boot/grub/grub.cfg + + ROOT=$(mount | grep " / " | cut -d" " -f1) + ROOT=${ROOT::-1} + + if ! grub-install --no-floppy --recheck "${ROOT}"; then + if ! grub-install --no-floppy --recheck --force "${ROOT}"; then + logger -p syslog.emerg -t ipfire \ + "Could not update the bootloader!" + fi + fi + ;; +esac + +# Force (re)install pae kernel if pae is supported +rm -rf /opt/pakfire/db/*/meta-linux-pae +if [ ! "$(grep "^flags.* pae " /proc/cpuinfo)" == "" ]; then + ROOTSPACE=`df / -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1` + BOOTSPACE=`df /boot -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1` + if [ $BOOTSPACE -lt 12000 -o $ROOTSPACE -lt 90000 ]; then + /usr/bin/logger -p syslog.emerg -t ipfire \ + "core-update-${core}: WARNING not enough space for pae kernel." + else + echo "Name: linux-pae" > /opt/pakfire/db/installed/meta-linux-pae + echo "ProgVersion: 0" >> /opt/pakfire/db/installed/meta-linux-pae + echo "Release: 0" >> /opt/pakfire/db/installed/meta-linux-pae + echo "Name: linux-pae" > /opt/pakfire/db/meta/meta-linux-pae + echo "ProgVersion: 0" >> /opt/pakfire/db/meta/meta-linux-pae + echo "Release: 0" >> /opt/pakfire/db/meta/meta-linux-pae fi fi +# Force reinstall xen kernel if it was installed +if [ -e "/opt/pakfire/db/installed/meta-linux-xen" ]; then + echo "Name: linux-xen" > /opt/pakfire/db/installed/meta-linux-xen + echo "ProgVersion: 0" >> /opt/pakfire/db/installed/meta-linux-xen + echo "Release: 0" >> /opt/pakfire/db/installed/meta-linux-xen + echo "Name: linux-xen" > /opt/pakfire/db/meta/meta-linux-xen + echo "ProgVersion: 0" >> /opt/pakfire/db/meta/meta-linux-xen + echo "Release: 0" >> /opt/pakfire/db/meta/meta-linux-xen + # Add xvc0 to /etc/securetty + echo "xvc0" >> /etc/securetty +fi + +# +# After pakfire has ended run it again and update the lists and do upgrade +# +echo '#!/bin/bash' > /tmp/pak_update +echo 'while [ "$(ps -A | grep " update.sh")" != "" ]; do' >> /tmp/pak_update +echo ' sleep 1' >> /tmp/pak_update +echo 'done' >> /tmp/pak_update +echo 'while [ "$(ps -A | grep " pakfire")" != "" ]; do' >> /tmp/pak_update +echo ' sleep 1' >> /tmp/pak_update +echo 'done' >> /tmp/pak_update +echo '/opt/pakfire/pakfire update -y --force' >> /tmp/pak_update +echo '/opt/pakfire/pakfire upgrade -y' >> /tmp/pak_update +echo '/opt/pakfire/pakfire upgrade -y' >> /tmp/pak_update +echo '/opt/pakfire/pakfire upgrade -y' >> /tmp/pak_update +echo '/usr/bin/logger -p syslog.emerg -t ipfire "Core-upgrade finished. If you use a customized grub.cfg"' >> /tmp/pak_update +echo '/usr/bin/logger -p syslog.emerg -t ipfire "Check it before reboot !!!"' >> /tmp/pak_update +echo '/usr/bin/logger -p syslog.emerg -t ipfire " *** Please reboot... *** "' >> /tmp/pak_update +echo 'touch /var/run/need_reboot ' >> /tmp/pak_update +# +killall -KILL pak_update +chmod +x /tmp/pak_update +/tmp/pak_update & + sync -# This update need a reboot... -touch /var/run/need_reboot +# +#Finish +( + /etc/init.d/fireinfo start + sendprofile +) >/dev/null 2>&1 & -# Finish -/etc/init.d/fireinfo start -sendprofile +# Update Package list for addon installation +/opt/pakfire/pakfire update -y --force + +echo +echo Please wait until pakfire has ended... +echo # Don't report the exitcode last command exit 0 From 557d7459f5dcbb50f7fc7693322eb323c24fd99d Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 16 Nov 2014 15:49:51 +0100 Subject: [PATCH 231/297] kernel: update to 3.14.24. --- lfs/linux | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lfs/linux b/lfs/linux index 15939c3bd..fec4ddbf8 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,11 +24,11 @@ include Config -VER = 3.14.22 +VER = 3.14.24 -RPI_PATCHES = 3.14.22-grsec-ipfire1 -A7M_PATCHES = 3.14.22-grsec-ipfire1 -GRS_PATCHES = grsecurity-3.0-3.14.22-201410192047.patch.xz +RPI_PATCHES = 3.14.24-grsec-ipfire1 +A7M_PATCHES = 3.14.24-grsec-ipfire1 +GRS_PATCHES = grsecurity-3.0-3.14.24-201411150026.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -37,7 +37,7 @@ DIR_APP = $(DIR_SRC)/$(THISAPP) CFLAGS = CXXFLAGS = -PAK_VER = 52 +PAK_VER = 53 DEPS = "" VERSUFIX=ipfire$(KCFG) @@ -77,10 +77,10 @@ rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES). arm7-multi-patches-$(A7M_PATCHES).patch.xz = $(URL_IPFIRE)/arm7-multi-patches-$(A7M_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = cb00fadd0a720cc2d1690792e72e0134 -rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = 75adff006d9dbc9be76e6c44eb80698f -arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = 06cdc33ba0c28b4b5ec876d8f8297b82 -$(GRS_PATCHES)_MD5 = a63b899587068885951e762ad53f5b50 +$(DL_FILE)_MD5 = a32e402545c45180b943d43d1746fed9 +rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = 472a6a7322c30f96fde4547bba240fa6 +arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = 7cdd1c384cc5e51e40fdd51b3e984f2d +$(GRS_PATCHES)_MD5 = b7d344dbf2ad00e966870a21c7e2c855 install : $(TARGET) From 69640b0fcdeefb5c3fbed09cfff1660bc39c37e7 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Mon, 17 Nov 2014 06:31:29 +0100 Subject: [PATCH 232/297] kernel: fix rpi patches. --- lfs/linux | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lfs/linux b/lfs/linux index fec4ddbf8..13fd1d2d7 100644 --- a/lfs/linux +++ b/lfs/linux @@ -26,7 +26,7 @@ include Config VER = 3.14.24 -RPI_PATCHES = 3.14.24-grsec-ipfire1 +RPI_PATCHES = 3.14.24-grsec-ipfire2 A7M_PATCHES = 3.14.24-grsec-ipfire1 GRS_PATCHES = grsecurity-3.0-3.14.24-201411150026.patch.xz @@ -78,7 +78,7 @@ arm7-multi-patches-$(A7M_PATCHES).patch.xz = $(URL_IPFIRE)/arm7-multi-patches-$( $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) $(DL_FILE)_MD5 = a32e402545c45180b943d43d1746fed9 -rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = 472a6a7322c30f96fde4547bba240fa6 +rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = 854d8f1d9a8275170ace5cee535613c7 arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = 7cdd1c384cc5e51e40fdd51b3e984f2d $(GRS_PATCHES)_MD5 = b7d344dbf2ad00e966870a21c7e2c855 From 61c29b32d1be54756f63bf7697fc08bde7dae93d Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Wed, 19 Nov 2014 18:29:24 +0100 Subject: [PATCH 233/297] libpcap: rootfile update (1.6.2) --- config/rootfiles/common/libpcap | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/config/rootfiles/common/libpcap b/config/rootfiles/common/libpcap index 52169a74a..b8e96489c 100644 --- a/config/rootfiles/common/libpcap +++ b/config/rootfiles/common/libpcap @@ -1,13 +1,13 @@ #usr/bin/pcap-config #usr/include/pcap -#usr/include/pcap/bluetooth.h #usr/include/pcap-bpf.h -#usr/include/pcap-int.h -#usr/include/pcap/ipnet.h #usr/include/pcap-namedb.h #usr/include/pcap.h +#usr/include/pcap/bluetooth.h #usr/include/pcap/bpf.h +#usr/include/pcap/ipnet.h #usr/include/pcap/namedb.h +#usr/include/pcap/nflog.h #usr/include/pcap/pcap.h #usr/include/pcap/sll.h #usr/include/pcap/usb.h @@ -15,7 +15,7 @@ #usr/lib/libpcap.a usr/lib/libpcap.so usr/lib/libpcap.so.1 -usr/lib/libpcap.so.1.4.0 +usr/lib/libpcap.so.1.6.2 #usr/share/man/man1/pcap-config.1 #usr/share/man/man3/pcap.3pcap #usr/share/man/man3/pcap_activate.3pcap @@ -40,11 +40,13 @@ usr/lib/libpcap.so.1.4.0 #usr/share/man/man3/pcap_fileno.3pcap #usr/share/man/man3/pcap_findalldevs.3pcap #usr/share/man/man3/pcap_fopen_offline.3pcap +#usr/share/man/man3/pcap_fopen_offline_with_tstamp_precision.3pcap #usr/share/man/man3/pcap_free_datalinks.3pcap #usr/share/man/man3/pcap_free_tstamp_types.3pcap #usr/share/man/man3/pcap_freealldevs.3pcap #usr/share/man/man3/pcap_freecode.3pcap #usr/share/man/man3/pcap_get_selectable_fd.3pcap +#usr/share/man/man3/pcap_get_tstamp_precision.3pcap #usr/share/man/man3/pcap_geterr.3pcap #usr/share/man/man3/pcap_getnonblock.3pcap #usr/share/man/man3/pcap_inject.3pcap @@ -61,16 +63,20 @@ usr/lib/libpcap.so.1.4.0 #usr/share/man/man3/pcap_next_ex.3pcap #usr/share/man/man3/pcap_offline_filter.3pcap #usr/share/man/man3/pcap_open_dead.3pcap +#usr/share/man/man3/pcap_open_dead_with_tstamp_precision.3pcap #usr/share/man/man3/pcap_open_live.3pcap #usr/share/man/man3/pcap_open_offline.3pcap +#usr/share/man/man3/pcap_open_offline_with_tstamp_precision.3pcap #usr/share/man/man3/pcap_perror.3pcap #usr/share/man/man3/pcap_sendpacket.3pcap #usr/share/man/man3/pcap_set_buffer_size.3pcap #usr/share/man/man3/pcap_set_datalink.3pcap +#usr/share/man/man3/pcap_set_immediate_mode.3pcap #usr/share/man/man3/pcap_set_promisc.3pcap #usr/share/man/man3/pcap_set_rfmon.3pcap #usr/share/man/man3/pcap_set_snaplen.3pcap #usr/share/man/man3/pcap_set_timeout.3pcap +#usr/share/man/man3/pcap_set_tstamp_precision.3pcap #usr/share/man/man3/pcap_set_tstamp_type.3pcap #usr/share/man/man3/pcap_setdirection.3pcap #usr/share/man/man3/pcap_setfilter.3pcap @@ -80,6 +86,7 @@ usr/lib/libpcap.so.1.4.0 #usr/share/man/man3/pcap_statustostr.3pcap #usr/share/man/man3/pcap_strerror.3pcap #usr/share/man/man3/pcap_tstamp_type_name_to_val.3pcap +#usr/share/man/man3/pcap_tstamp_type_val_to_description.3pcap #usr/share/man/man3/pcap_tstamp_type_val_to_name.3pcap #usr/share/man/man5/pcap-savefile.5 #usr/share/man/man7/pcap-filter.7 From 898f08edf49116bb95b8bb05f50b00593ca7acbf Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Sat, 22 Nov 2014 18:43:11 +0100 Subject: [PATCH 234/297] Changed configure-option: '--enable-jit' => '--disable-jit' Reason: The latest version of pcre comes with a JIT compiler for regular expressions. The implementation of that requires that memory is writable and executable at the same time which is not allowed by grsecurity. --- lfs/pcre | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lfs/pcre b/lfs/pcre index 1062c9153..f5c771ca8 100644 --- a/lfs/pcre +++ b/lfs/pcre @@ -74,7 +74,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) --prefix=/usr \ --disable-static \ --enable-utf8 \ - --enable-jit \ + --disable-jit \ --enable-unicode-properties cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install From be51cfd97660ddf8a96f6b412bc614eebad34c5f Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 22 Nov 2014 23:12:28 +0100 Subject: [PATCH 235/297] kernel: update multiarm config for pandaboard. --- .../kernel.config.armv5tel-ipfire-multi | 87 ++++++++++++++++--- 1 file changed, 76 insertions(+), 11 deletions(-) diff --git a/config/kernel/kernel.config.armv5tel-ipfire-multi b/config/kernel/kernel.config.armv5tel-ipfire-multi index 1fc9fe18f..a1c49d433 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-multi +++ b/config/kernel/kernel.config.armv5tel-ipfire-multi @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 3.14.22 Kernel Configuration +# Linux/arm 3.14.25 Kernel Configuration # CONFIG_ARM=y CONFIG_MIGHT_HAVE_PCI=y @@ -2610,6 +2610,7 @@ CONFIG_INPUT_RETU_PWRBUTTON=m CONFIG_INPUT_AXP20X_PEK=y CONFIG_INPUT_TWL4030_PWRBUTTON=m CONFIG_INPUT_TWL4030_VIBRA=m +CONFIG_INPUT_TWL6040_VIBRA=m CONFIG_INPUT_UINPUT=m # CONFIG_INPUT_PCF8574 is not set CONFIG_INPUT_GPIO_ROTARY_ENCODER=m @@ -2906,6 +2907,7 @@ CONFIG_GPIO_TS5500=m # CONFIG_GPIO_PCF857X is not set # CONFIG_GPIO_SX150X is not set CONFIG_GPIO_TWL4030=y +CONFIG_GPIO_TWL6040=y # CONFIG_GPIO_ADP5588 is not set CONFIG_GPIO_ADNP=m @@ -3144,7 +3146,7 @@ CONFIG_ARMADA_THERMAL=m # # Texas Instruments thermal drivers # -CONFIG_TI_SOC_THERMAL=m +CONFIG_TI_SOC_THERMAL=y CONFIG_TI_THERMAL=y CONFIG_OMAP4_THERMAL=y CONFIG_OMAP5_THERMAL=y @@ -3280,7 +3282,7 @@ CONFIG_TWL4030_CORE=y CONFIG_TWL4030_MADC=y CONFIG_TWL4030_POWER=y CONFIG_MFD_TWL4030_AUDIO=y -# CONFIG_TWL6040_CORE is not set +CONFIG_TWL6040_CORE=y CONFIG_MFD_WL1273_CORE=m CONFIG_MFD_LM3533=m # CONFIG_MFD_TIMBERDALE is not set @@ -3309,7 +3311,7 @@ CONFIG_REGULATOR_ANATOP=m CONFIG_REGULATOR_AXP20X=y # CONFIG_REGULATOR_DA9210 is not set # CONFIG_REGULATOR_FAN53555 is not set -# CONFIG_REGULATOR_GPIO is not set +CONFIG_REGULATOR_GPIO=y # CONFIG_REGULATOR_ISL6271A is not set # CONFIG_REGULATOR_LP3971 is not set # CONFIG_REGULATOR_LP3972 is not set @@ -3321,7 +3323,7 @@ CONFIG_REGULATOR_LP8755=m # CONFIG_REGULATOR_MAX8952 is not set # CONFIG_REGULATOR_MAX8973 is not set CONFIG_REGULATOR_PFUZE100=y -# CONFIG_REGULATOR_TI_ABB is not set +CONFIG_REGULATOR_TI_ABB=y # CONFIG_REGULATOR_TPS51632 is not set # CONFIG_REGULATOR_TPS62360 is not set # CONFIG_REGULATOR_TPS65023 is not set @@ -4248,19 +4250,24 @@ CONFIG_SND_SOC_IMX_WM8962=m CONFIG_SND_SOC_IMX_SGTL5000=m CONFIG_SND_SOC_IMX_SPDIF=m CONFIG_SND_OMAP_SOC=m +CONFIG_SND_OMAP_SOC_DMIC=m CONFIG_SND_OMAP_SOC_MCBSP=m +CONFIG_SND_OMAP_SOC_MCPDM=m CONFIG_SND_OMAP_SOC_HDMI=m CONFIG_SND_OMAP_SOC_RX51=m CONFIG_SND_OMAP_SOC_AM3517EVM=m CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m +CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m CONFIG_SND_OMAP_SOC_OMAP_HDMI=m CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m CONFIG_SND_SOC_I2C_AND_SPI=m +CONFIG_SND_SOC_DMIC=m CONFIG_SND_SOC_HDMI_CODEC=m CONFIG_SND_SOC_SGTL5000=m CONFIG_SND_SOC_TLV320AIC23=m CONFIG_SND_SOC_TLV320AIC3X=m CONFIG_SND_SOC_TWL4030=m +CONFIG_SND_SOC_TWL6040=m CONFIG_SND_SOC_WM8962=m CONFIG_SND_SOC_TPA6130A2=m CONFIG_SND_SIMPLE_CARD=m @@ -4384,6 +4391,7 @@ CONFIG_USB_WUSB_CBAF=m # # CONFIG_USB_C67X00_HCD is not set CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PLATFORM=m CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y @@ -4406,10 +4414,12 @@ CONFIG_USB_UHCI_PLATFORM=y CONFIG_USB_SL811_HCD=m CONFIG_USB_SL811_HCD_ISO=y # CONFIG_USB_R8A66597_HCD is not set +CONFIG_USB_RENESAS_USBHS_HCD=m CONFIG_USB_IMX21_HCD=y CONFIG_USB_HCD_BCMA=m CONFIG_USB_HCD_SSB=m # CONFIG_USB_HCD_TEST_MODE is not set +CONFIG_USB_RENESAS_USBHS=m # # USB Device Class drivers @@ -4449,7 +4459,9 @@ CONFIG_USB_STORAGE_ENE_UB6250=m CONFIG_USB_MDC800=m CONFIG_USB_MICROTEK=m CONFIG_USB_MUSB_HDRC=m -CONFIG_USB_MUSB_HOST=y +# CONFIG_USB_MUSB_HOST is not set +# CONFIG_USB_MUSB_GADGET is not set +CONFIG_USB_MUSB_DUAL_ROLE=y CONFIG_USB_MUSB_TUSB6010=m CONFIG_USB_MUSB_OMAP2PLUS=m CONFIG_USB_MUSB_AM35X=m @@ -4462,7 +4474,9 @@ CONFIG_USB_MUSB_AM335X_CHILD=m # CONFIG_USB_TUSB_OMAP_DMA is not set CONFIG_MUSB_PIO_ONLY=y CONFIG_USB_DWC3=m -CONFIG_USB_DWC3_HOST=y +# CONFIG_USB_DWC3_HOST is not set +# CONFIG_USB_DWC3_GADGET is not set +CONFIG_USB_DWC3_DUAL_ROLE=y # # Platform Glue Driver Support @@ -4479,6 +4493,7 @@ CONFIG_USB_DWC2=m # CONFIG_USB_DWC2_DEBUG is not set # CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set CONFIG_USB_CHIPIDEA=m +CONFIG_USB_CHIPIDEA_UDC=y CONFIG_USB_CHIPIDEA_HOST=y # CONFIG_USB_CHIPIDEA_DEBUG is not set @@ -4593,7 +4608,58 @@ CONFIG_USB_ISP1301=m CONFIG_USB_MXS_PHY=m CONFIG_USB_RCAR_PHY=m CONFIG_USB_ULPI=y -# CONFIG_USB_GADGET is not set +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_VBUS_DRAW=500 +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 + +# +# USB Peripheral Controller +# +# CONFIG_USB_FSL_USB2 is not set +# CONFIG_USB_FUSB300 is not set +# CONFIG_USB_FOTG210_UDC is not set +# CONFIG_USB_GR_UDC is not set +# CONFIG_USB_R8A66597 is not set +# CONFIG_USB_RENESAS_USBHS_UDC is not set +# CONFIG_USB_PXA27X is not set +# CONFIG_USB_S3C_HSOTG is not set +# CONFIG_USB_MV_UDC is not set +# CONFIG_USB_MV_U3D is not set +# CONFIG_USB_M66592 is not set +# CONFIG_USB_AMD5536UDC is not set +# CONFIG_USB_NET2272 is not set +# CONFIG_USB_NET2280 is not set +# CONFIG_USB_GOKU is not set +# CONFIG_USB_EG20T is not set +# CONFIG_USB_DUMMY_HCD is not set +CONFIG_USB_LIBCOMPOSITE=m +CONFIG_USB_U_ETHER=m +CONFIG_USB_F_ECM=m +CONFIG_USB_F_EEM=m +CONFIG_USB_F_SUBSET=m +CONFIG_USB_F_RNDIS=m +# CONFIG_USB_CONFIGFS is not set +# CONFIG_USB_ZERO is not set +# CONFIG_USB_AUDIO is not set +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_ETH_EEM=y +# CONFIG_USB_G_NCM is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FUNCTIONFS is not set +# CONFIG_USB_MASS_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +# CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_ACM_MS is not set +# CONFIG_USB_G_MULTI is not set +# CONFIG_USB_G_HID is not set +# CONFIG_USB_G_DBGP is not set +# CONFIG_USB_G_WEBCAM is not set # CONFIG_UWB is not set CONFIG_MMC=y # CONFIG_MMC_DEBUG is not set @@ -4693,7 +4759,7 @@ CONFIG_LEDS_TLC59116=m CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_TIMER=m CONFIG_LEDS_TRIGGER_ONESHOT=m -CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=y CONFIG_LEDS_TRIGGER_BACKLIGHT=m CONFIG_LEDS_TRIGGER_CPU=y CONFIG_LEDS_TRIGGER_GPIO=m @@ -4993,6 +5059,7 @@ CONFIG_COMMON_CLK=y CONFIG_COMMON_CLK_VERSATILE=y CONFIG_COMMON_CLK_SI5351=m CONFIG_COMMON_CLK_SI570=m +CONFIG_CLK_TWL6040=m CONFIG_COMMON_CLK_AXI_CLKGEN=m CONFIG_COMMON_CLK_QCOM=m CONFIG_MSM_GCC_8660=m @@ -5795,7 +5862,6 @@ CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_CRYPTD=y CONFIG_CRYPTO_AUTHENC=m CONFIG_CRYPTO_TEST=m -CONFIG_CRYPTO_ABLK_HELPER=m # # Authenticated Encryption with Associated Data @@ -5849,7 +5915,6 @@ CONFIG_CRYPTO_WP512=m # CONFIG_CRYPTO_AES=y CONFIG_CRYPTO_AES_ARM=m -CONFIG_CRYPTO_AES_ARM_BS=m CONFIG_CRYPTO_ANUBIS=m CONFIG_CRYPTO_ARC4=m CONFIG_CRYPTO_BLOWFISH=m From 071bb64388a6c687ed7059240728005df0448f7d Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 22 Nov 2014 23:13:18 +0100 Subject: [PATCH 236/297] u-boot: update pandaboard config. --- config/u-boot/boot.scr | Bin 453 -> 419 bytes config/u-boot/boot.script | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/u-boot/boot.scr b/config/u-boot/boot.scr index 672b15277a2196c387b4804da9f994d564cd25eb..0fb1193fe4c7347dacc36b8a47ea61e54c0108f8 100755 GIT binary patch delta 115 zcmX@gyqH;DomDc-!Qj`EkZj9c3=E9P3{Y_4iNbbPCbo%+iYh?iXpm@eYDsEdnL=h> zW=T;>d`4z^hJvL51aM9C(4V+eaALdM#Bza&+k6-eCNneIPi|tg;MG-7sZL8NNlZy8 Hs^tOz^q3$= delta 139 zcmZ3?e3V&UomDbyMMGs;&|jt93=E8|3{bFRiJ}E76Wc^ZMGl~FEl6}?ivGkYdJ`uL zPQ2v9XgFD((cVrWATci`F)2T>C`BP7u~?xvwJ0;cv{)gaC_gDDHMdwHGfyF Date: Sat, 22 Nov 2014 23:13:49 +0100 Subject: [PATCH 237/297] kernel: update to 3.14.25. --- lfs/linux | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lfs/linux b/lfs/linux index 13fd1d2d7..1e6298c39 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,11 +24,11 @@ include Config -VER = 3.14.24 +VER = 3.14.25 -RPI_PATCHES = 3.14.24-grsec-ipfire2 -A7M_PATCHES = 3.14.24-grsec-ipfire1 -GRS_PATCHES = grsecurity-3.0-3.14.24-201411150026.patch.xz +RPI_PATCHES = 3.14.25-grsec-ipfire1 +A7M_PATCHES = 3.14.25-grsec-ipfire1 +GRS_PATCHES = grsecurity-3.0-3.14.25-201411220954.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -77,10 +77,10 @@ rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES). arm7-multi-patches-$(A7M_PATCHES).patch.xz = $(URL_IPFIRE)/arm7-multi-patches-$(A7M_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = a32e402545c45180b943d43d1746fed9 -rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = 854d8f1d9a8275170ace5cee535613c7 -arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = 7cdd1c384cc5e51e40fdd51b3e984f2d -$(GRS_PATCHES)_MD5 = b7d344dbf2ad00e966870a21c7e2c855 +$(DL_FILE)_MD5 = 3ae910d35292706d85870c3939547123 +rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = b573af847c28ebed8c15a74542360db1 +arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = 8b47b81a530db68cb2c2f6bb6418ca28 +$(GRS_PATCHES)_MD5 = 6b2c8669e39304cfe647f9de16260929 install : $(TARGET) From 8c80423c129f632712cc9a43c7be2e9c0d75b698 Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Sat, 22 Nov 2014 23:43:46 +0100 Subject: [PATCH 238/297] tar: Update to 1.28 --- config/rootfiles/common/tar | 4 ++++ lfs/tar | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/config/rootfiles/common/tar b/config/rootfiles/common/tar index 9e31cc0b7..6dbb6ee71 100644 --- a/config/rootfiles/common/tar +++ b/config/rootfiles/common/tar @@ -2,4 +2,8 @@ bin/tar #usr/share/info/tar.info #usr/share/info/tar.info-1 #usr/share/info/tar.info-2 +#usr/share/info/tar.info-3 +#usr/share/man/man1/tar.1 +#usr/share/man/man8/rmt.8 #usr/sbin/rmt + diff --git a/lfs/tar b/lfs/tar index b1ef2fc98..5919b0474 100644 --- a/lfs/tar +++ b/lfs/tar @@ -24,7 +24,7 @@ include Config -VER = 1.22 +VER = 1.28 THISAPP = tar-$(VER) DL_FILE = $(THISAPP).tar.bz2 @@ -36,7 +36,7 @@ DIR_APP = $(DIR_SRC)/$(THISAPP) ifeq "$(ROOT)" "" TARGET = $(DIR_INFO)/$(THISAPP) EXTRA_CONFIG = --prefix=/usr --bindir=/bin \ - --libexecdir=/usr/sbin --disable-nls + --libexecdir=/usr/sbin --disable-nls FORCE_UNSAFE_CONFIGURE=1 EXTRA_MAKE = EXTRA_INSTALL = else @@ -54,7 +54,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 07fa517027f426bb80f5f5ff91b63585 +$(DL_FILE)_MD5 = 8f32b2bc1ed7ddf4cf4e4a39711341b0 install : $(TARGET) From 8b48e20bb3ecf9f4c56d040f9e91fccb5e859313 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 23 Nov 2014 01:01:58 +0100 Subject: [PATCH 239/297] tzdata: Update to 2014j --- config/rootfiles/common/tzdata | 13 ++++++++++++- lfs/tzdata | 6 +++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/config/rootfiles/common/tzdata b/config/rootfiles/common/tzdata index 4bb0df248..a18ba0a88 100644 --- a/config/rootfiles/common/tzdata +++ b/config/rootfiles/common/tzdata @@ -234,6 +234,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/Antarctica/Rothera #usr/share/zoneinfo/Antarctica/South_Pole #usr/share/zoneinfo/Antarctica/Syowa +#usr/share/zoneinfo/Antarctica/Troll #usr/share/zoneinfo/Antarctica/Vostok #usr/share/zoneinfo/Arctic #usr/share/zoneinfo/Arctic/Longyearbyen @@ -254,6 +255,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/Asia/Bishkek #usr/share/zoneinfo/Asia/Brunei #usr/share/zoneinfo/Asia/Calcutta +#usr/share/zoneinfo/Asia/Chita #usr/share/zoneinfo/Asia/Choibalsan #usr/share/zoneinfo/Asia/Chongqing #usr/share/zoneinfo/Asia/Chungking @@ -311,6 +313,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/Asia/Seoul #usr/share/zoneinfo/Asia/Shanghai #usr/share/zoneinfo/Asia/Singapore +#usr/share/zoneinfo/Asia/Srednekolymsk #usr/share/zoneinfo/Asia/Taipei #usr/share/zoneinfo/Asia/Tashkent #usr/share/zoneinfo/Asia/Tbilisi @@ -488,7 +491,6 @@ usr/share/zoneinfo #usr/share/zoneinfo/Europe/Zagreb #usr/share/zoneinfo/Europe/Zaporozhye #usr/share/zoneinfo/Europe/Zurich -#usr/share/zoneinfo/Factory #usr/share/zoneinfo/GB #usr/share/zoneinfo/GB-Eire #usr/share/zoneinfo/GMT @@ -532,6 +534,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/Pacific #usr/share/zoneinfo/Pacific/Apia #usr/share/zoneinfo/Pacific/Auckland +#usr/share/zoneinfo/Pacific/Bougainville #usr/share/zoneinfo/Pacific/Chatham #usr/share/zoneinfo/Pacific/Chuuk #usr/share/zoneinfo/Pacific/Easter @@ -835,6 +838,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/posix/Antarctica/Rothera #usr/share/zoneinfo/posix/Antarctica/South_Pole #usr/share/zoneinfo/posix/Antarctica/Syowa +#usr/share/zoneinfo/posix/Antarctica/Troll #usr/share/zoneinfo/posix/Antarctica/Vostok #usr/share/zoneinfo/posix/Arctic #usr/share/zoneinfo/posix/Arctic/Longyearbyen @@ -855,6 +859,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/posix/Asia/Bishkek #usr/share/zoneinfo/posix/Asia/Brunei #usr/share/zoneinfo/posix/Asia/Calcutta +#usr/share/zoneinfo/posix/Asia/Chita #usr/share/zoneinfo/posix/Asia/Choibalsan #usr/share/zoneinfo/posix/Asia/Chongqing #usr/share/zoneinfo/posix/Asia/Chungking @@ -912,6 +917,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/posix/Asia/Seoul #usr/share/zoneinfo/posix/Asia/Shanghai #usr/share/zoneinfo/posix/Asia/Singapore +#usr/share/zoneinfo/posix/Asia/Srednekolymsk #usr/share/zoneinfo/posix/Asia/Taipei #usr/share/zoneinfo/posix/Asia/Tashkent #usr/share/zoneinfo/posix/Asia/Tbilisi @@ -1132,6 +1138,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/posix/Pacific #usr/share/zoneinfo/posix/Pacific/Apia #usr/share/zoneinfo/posix/Pacific/Auckland +#usr/share/zoneinfo/posix/Pacific/Bougainville #usr/share/zoneinfo/posix/Pacific/Chatham #usr/share/zoneinfo/posix/Pacific/Chuuk #usr/share/zoneinfo/posix/Pacific/Easter @@ -1435,6 +1442,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/right/Antarctica/Rothera #usr/share/zoneinfo/right/Antarctica/South_Pole #usr/share/zoneinfo/right/Antarctica/Syowa +#usr/share/zoneinfo/right/Antarctica/Troll #usr/share/zoneinfo/right/Antarctica/Vostok #usr/share/zoneinfo/right/Arctic #usr/share/zoneinfo/right/Arctic/Longyearbyen @@ -1455,6 +1463,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/right/Asia/Bishkek #usr/share/zoneinfo/right/Asia/Brunei #usr/share/zoneinfo/right/Asia/Calcutta +#usr/share/zoneinfo/right/Asia/Chita #usr/share/zoneinfo/right/Asia/Choibalsan #usr/share/zoneinfo/right/Asia/Chongqing #usr/share/zoneinfo/right/Asia/Chungking @@ -1512,6 +1521,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/right/Asia/Seoul #usr/share/zoneinfo/right/Asia/Shanghai #usr/share/zoneinfo/right/Asia/Singapore +#usr/share/zoneinfo/right/Asia/Srednekolymsk #usr/share/zoneinfo/right/Asia/Taipei #usr/share/zoneinfo/right/Asia/Tashkent #usr/share/zoneinfo/right/Asia/Tbilisi @@ -1732,6 +1742,7 @@ usr/share/zoneinfo #usr/share/zoneinfo/right/Pacific #usr/share/zoneinfo/right/Pacific/Apia #usr/share/zoneinfo/right/Pacific/Auckland +#usr/share/zoneinfo/right/Pacific/Bougainville #usr/share/zoneinfo/right/Pacific/Chatham #usr/share/zoneinfo/right/Pacific/Chuuk #usr/share/zoneinfo/right/Pacific/Easter diff --git a/lfs/tzdata b/lfs/tzdata index afe3124e0..7d13c9596 100644 --- a/lfs/tzdata +++ b/lfs/tzdata @@ -24,7 +24,7 @@ include Config -VER = 2014a +VER = 2014j TZDATA_VER = $(VER) TZCODE_VER = $(VER) @@ -45,8 +45,8 @@ objects = tzdata$(TZDATA_VER).tar.gz tzcode$(TZCODE_VER).tar.gz tzdata$(TZDATA_VER).tar.gz = $(DL_FROM)/tzdata$(TZDATA_VER).tar.gz tzcode$(TZCODE_VER).tar.gz = $(DL_FROM)/tzcode$(TZCODE_VER).tar.gz -tzdata$(TZDATA_VER).tar.gz_MD5 = 423a11bcffc10dda578058cf1587d048 -tzcode$(TZCODE_VER).tar.gz_MD5 = 77ccbb720f0f2076f12dff6ded70eb98 +tzdata$(TZDATA_VER).tar.gz_MD5 = 2d7ea9c309f0d4e162e426e568290ca3 +tzcode$(TZCODE_VER).tar.gz_MD5 = 970119e9765bc5a9320368851c91ecb6 install : $(TARGET) From df24f329fdd943945ba6eca34aa7624eb5404737 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 23 Nov 2014 01:16:12 +0100 Subject: [PATCH 240/297] tzdata: Fix build to include leap seconds --- lfs/tzdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lfs/tzdata b/lfs/tzdata index 7d13c9596..9d6079353 100644 --- a/lfs/tzdata +++ b/lfs/tzdata @@ -86,7 +86,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cd $(DIR_APP) && zic -y ./yearistype -d zoneinfo/posix \ -L /dev/null $(FILES) cd $(DIR_APP) && zic -y ./yearistype -d zoneinfo/right \ - -L /dev/null $(FILES) + -L leapseconds $(FILES) rm -rf /usr/share/zoneinfo cd $(DIR_APP) && cp -prd zoneinfo /usr/share From 191e9a0c964df070d3e63dd49d88dbe3664056f9 Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Sun, 23 Nov 2014 14:30:47 +0100 Subject: [PATCH 241/297] ethtool: Update to 3.16 --- lfs/ethtool | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/ethtool b/lfs/ethtool index 15f0419d8..16527b6e3 100644 --- a/lfs/ethtool +++ b/lfs/ethtool @@ -24,10 +24,10 @@ include Config -VER = 3.0 +VER = 3.16 THISAPP = ethtool-$(VER) -DL_FILE = $(THISAPP).tar.bz2 +DL_FILE = $(THISAPP).tar.xz DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = cb129398cbbf39859901b55ecac101da +$(DL_FILE)_MD5 = 7eee202accb86104adc8463a36a1a468 install : $(TARGET) @@ -69,7 +69,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar Jxf $(DIR_DL)/$(DL_FILE) cd $(DIR_APP) && ./configure --prefix=/usr cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install From 7f88f8f569060f8f06c8dcc3875f4056b33f6dbb Mon Sep 17 00:00:00 2001 From: Matthias Fischer Date: Wed, 26 Nov 2014 21:05:28 +0100 Subject: [PATCH 242/297] grep: Update to 2.21 --- lfs/grep | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lfs/grep b/lfs/grep index e9b0b18d4..ac201613d 100644 --- a/lfs/grep +++ b/lfs/grep @@ -24,7 +24,7 @@ include Config -VER = 2.14 +VER = 2.21 THISAPP = grep-$(VER) DL_FILE = $(THISAPP).tar.xz @@ -54,7 +54,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = d4a3f03849d1e17ce56ab76aa5a24cab +$(DL_FILE)_MD5 = 43c48064d6409862b8a850db83c8038a install : $(TARGET) From 01e64ad1310344c78aee3b2634acaed5b8e988cf Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 27 Nov 2014 07:33:50 +0100 Subject: [PATCH 243/297] kernel: remove obsolete modules and patches. --- lfs/compat-drivers | 138 - lfs/e1000 | 90 - lfs/kvm-kmod | 86 - lfs/linux | 2 - lfs/mISDN | 119 - lfs/r8101 | 90 - lfs/r8168 | 89 - lfs/r8169 | 95 - lfs/v4l-dvb | 103 - make.sh | 23 - ...mmon-Add-default-power-configuration.patch | 88 - ...p3isp-Use-the-common-clock-framework.patch | 444 -- .../3isp/0002-mt9m032-Fix-PLL-setup.patch | 91 - ...9m032-Define-MT9M032_READ_MODE1-bits.patch | 55 - ...04-mt9p031-Use-devm_-managed-helpers.patch | 62 - ...5-mt9p031-Add-support-for-regulators.patch | 82 - ...9p031-Use-the-common-clock-framework.patch | 110 - ...-Toshiba-LTA070B220F-800x480-support.patch | 30 - ...dd-TLC59108-backlight-control-driver.patch | 217 - ...lc59108-adjust-for-beagleboard-uLCD7.patch | 124 - .../beagle/0004-zeroMAP-Open-your-eyes.patch | 31 - ...gle-use-TWL4030-generic-reset-script.patch | 29 - ...-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch | 28 - ...-add-buddy-param-for-expansionboard-.patch | 63 - .../0002-Beagle-expansion-add-zippy.patch | 242 - .../0003-Beagle-expansion-add-zippy2.patch | 86 - .../0004-Beagle-expansion-add-trainer.patch | 55 - ...expansion-add-CircuitCo-ulcd-Support.patch | 285 - .../0006-Beagle-expansion-add-wifi.patch | 180 - ...0007-Beagle-expansion-add-beaglefpga.patch | 117 - .../0008-Beagle-expansion-add-spidev.patch | 35 - ...e-expansion-add-Aptina-li5m03-camera.patch | 217 - ...xpansion-add-LSR-COM6L-Adapter-Board.patch | 123 - ...-LSR-COM6L-Adapter-Board-also-initia.patch | 73 - ...gle-expansion-extend-spidev-to-uart2.patch | 43 - .../0001-panda-fix-wl12xx-regulator.patch | 27 - ...02-ti-st-st-kim-fixing-firmware-path.patch | 36 - .../0003-Panda-expansion-add-spidev.patch | 112 - ...S-disable-cpufreq-so-board-will-boot.patch | 38 - ...t-Enable-debug-powerdown-only-if-sys.patch | 122 - ...or-twl-Remove-TWL6030_FIXED_RESOURCE.patch | 39 - ...-twl-Remove-another-unused-variable-.patch | 34 - ...-twl-Remove-references-to-the-twl403.patch | 28 - ...-twl-Remove-references-to-32kHz-cloc.patch | 49 - .../0011-panda-spidev-setup-pinmux.patch | 50 - ...SS2-add-bootarg-for-selecting-svideo.patch | 78 - .../0002-video-add-timings-for-hd720.patch | 28 - ...-flush-management-symbols-when-MULTI.patch | 34 - .../0001-imx6qdl-wandboard-dts-backport.patch | 6354 ----------------- ...wandboard-add-gpio-lines-to-wandboar.patch | 41 - ...x6qdl-wandboard-Add-support-for-i2c1.patch | 33 - ...d-add-binding-for-wand-rfkill-driver.patch | 52 - ...ARM-dts-imx6qdl-add-pcie-device-node.patch | 38 - .../imx/0001-i2c-imx-retry-on-NAK.patch | 38 - ....MX6-Wandboard-add-CKO1-clock-output.patch | 29 - ...ermal-add-imx-thermal-driver-support.patch | 489 -- ...-Wandboard-add-wifi-bt-rfkill-driver.patch | 341 - .../imx/0005-Add-IMX6Q-AHCI-support.patch | 85 - .../imx/0006-imx-Add-IMX53-AHCI-support.patch | 25 - ...nable-sata-clk-if-SATA_AHCI_PLATFORM.patch | 33 - ...e-the-sata-bits-definitions-of-gpr13.patch | 150 - ...d-ahci-sata-support-on-imx-platforms.patch | 316 - ...ahci_imx-depend-on-CONFIG_MFD_SYSCON.patch | 24 - .../imx/0011-add-pcie-designware.patch | 636 -- .../imx/0012-pcie-backport-fixes.patch | 17 - ...upport-for-parsing-PCI-DT-ranges-pro.patch | 194 - ...d-PCIe-bits-to-GPR-syscon-definition.patch | 37 - ...dd-support-for-i.MX6-PCIe-controller.patch | 616 -- .../wandboard/imx/0016-imx6-pci-tweaks.patch | 24 - ...VDS-general-purpose-clocks-to-i.MX6Q.patch | 70 - ...-and-Kconfig-update-for-PCIe-support.patch | 38 - .../linux-2.6-arm-asm-constraint.patch | 347 - .../linux-2.6-silence-acpi-blacklist.patch | 25 - ...vmscan_remove_wait_on_page_writeback.patch | 37 - src/patches/linux-2.6.32-crypto-mv_cesa.patch | 647 -- src/patches/linux-2.6.32-imq-test2.patch | 1462 ---- src/patches/linux-2.6.32.11-netdev-1.patch | 478 -- ...-2.6.32.15-option_add_huawei_android.patch | 19 - .../linux-2.6.32.27_ipg-fix-driver-name.patch | 15 - ...45_align_ssb_modtable_32bit_boundary.patch | 12 - .../linux-2.6.32.8-ipp2p-0.8.2-pomng.patch | 1033 --- .../linux-2.6.32.8-xen-imq-test2.patch | 1353 ---- ...inux-2.x-smsc95xx-add_mac_addr_param.patch | 149 - .../linux-3.0-ipp2p-0.8.2-ipfire.patch | 1039 --- src/patches/linux-3.1-imq.patch | 1603 ----- src/patches/linux-3.10-layer7-filter.patch | 2185 ------ .../linux-3.10.10-arm_kirkwood_setups.patch | 704 -- ...4-operand-requires-impossible-reload.patch | 11 - src/patches/linux-3.10.30-imq.patch | 3304 --------- ...34-iwlwifi-noibss_only_on_radar_chan.patch | 23 - .../linux-3.10.39-pie_packet_sch.patch | 674 -- .../linux-3.10.57-mmc_add_eMMC_5.x.patch | 12 - .../linux-3.10.9-ledtrig-netdev-1.patch | 478 -- ....y-usbnet_mcs7830_rework_link_detect.patch | 71 - .../linux-3.2-0001-panda-wlan-fix.patch | 12 - src/patches/linux-3.2-0002-panda-i2c.patch | 51 - src/patches/linux-3.2-imq.patch | 1603 ----- src/patches/linux-3.2-panda-reboot.patch | 29 - .../linux-3.2.25-arm_kirkwood_setups.patch | 692 -- ...inux-3.2.27-rpi_fix_dwc_common_build.patch | 38 - .../linux-3.2.33-ledtrig-netdev-1.patch | 479 -- src/patches/linux-3.9-dvbsky-wot2.patch | 6161 ---------------- 102 files changed, 38846 deletions(-) delete mode 100644 lfs/compat-drivers delete mode 100644 lfs/e1000 delete mode 100644 lfs/kvm-kmod delete mode 100644 lfs/mISDN delete mode 100644 lfs/r8101 delete mode 100644 lfs/r8168 delete mode 100644 lfs/r8169 delete mode 100644 lfs/v4l-dvb delete mode 100644 src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch delete mode 100644 src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch delete mode 100644 src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch delete mode 100644 src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch delete mode 100644 src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch delete mode 100644 src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch delete mode 100644 src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch delete mode 100644 src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch delete mode 100644 src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch delete mode 100644 src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch delete mode 100644 src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch delete mode 100644 src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch delete mode 100644 src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch delete mode 100644 src/patches/kernel/omap/beagle/expansion/0011-WIP-Beagle-expansion-extend-spidev-to-uart2.patch delete mode 100644 src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch delete mode 100644 src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch delete mode 100644 src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch delete mode 100644 src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch delete mode 100644 src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch delete mode 100644 src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch delete mode 100644 src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch delete mode 100644 src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch delete mode 100644 src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch delete mode 100644 src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch delete mode 100644 src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch delete mode 100644 src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch delete mode 100644 src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch delete mode 100644 src/patches/kernel/wandboard/dts/0001-imx6qdl-wandboard-dts-backport.patch delete mode 100644 src/patches/kernel/wandboard/dts/0002-ARM-dts-imx6qdl-wandboard-add-gpio-lines-to-wandboar.patch delete mode 100644 src/patches/kernel/wandboard/dts/0003-ARM-dts-imx6qdl-wandboard-Add-support-for-i2c1.patch delete mode 100644 src/patches/kernel/wandboard/dts/0004-ARM-dts-wandboard-add-binding-for-wand-rfkill-driver.patch delete mode 100644 src/patches/kernel/wandboard/dts/0005-ARM-dts-imx6qdl-add-pcie-device-node.patch delete mode 100644 src/patches/kernel/wandboard/imx/0001-i2c-imx-retry-on-NAK.patch delete mode 100644 src/patches/kernel/wandboard/imx/0002-i.MX6-Wandboard-add-CKO1-clock-output.patch delete mode 100644 src/patches/kernel/wandboard/imx/0003-thermal-add-imx-thermal-driver-support.patch delete mode 100644 src/patches/kernel/wandboard/imx/0004-ARM-i.MX6-Wandboard-add-wifi-bt-rfkill-driver.patch delete mode 100644 src/patches/kernel/wandboard/imx/0005-Add-IMX6Q-AHCI-support.patch delete mode 100644 src/patches/kernel/wandboard/imx/0006-imx-Add-IMX53-AHCI-support.patch delete mode 100644 src/patches/kernel/wandboard/imx/0007-imx6-enable-sata-clk-if-SATA_AHCI_PLATFORM.patch delete mode 100644 src/patches/kernel/wandboard/imx/0008-ARM-imx6q-update-the-sata-bits-definitions-of-gpr13.patch delete mode 100644 src/patches/kernel/wandboard/imx/0009-ahci_imx-add-ahci-sata-support-on-imx-platforms.patch delete mode 100644 src/patches/kernel/wandboard/imx/0010-ahci_imx-depend-on-CONFIG_MFD_SYSCON.patch delete mode 100644 src/patches/kernel/wandboard/imx/0011-add-pcie-designware.patch delete mode 100644 src/patches/kernel/wandboard/imx/0012-pcie-backport-fixes.patch delete mode 100644 src/patches/kernel/wandboard/imx/0013-of-pci-Provide-support-for-parsing-PCI-DT-ranges-pro.patch delete mode 100644 src/patches/kernel/wandboard/imx/0014-ARM-imx6q-Add-PCIe-bits-to-GPR-syscon-definition.patch delete mode 100644 src/patches/kernel/wandboard/imx/0015-PCI-imx6-Add-support-for-i.MX6-PCIe-controller.patch delete mode 100644 src/patches/kernel/wandboard/imx/0016-imx6-pci-tweaks.patch delete mode 100644 src/patches/kernel/wandboard/imx/0017-ARM-imx-Add-LVDS-general-purpose-clocks-to-i.MX6Q.patch delete mode 100644 src/patches/kernel/wandboard/imx/0018-ARM-imx6q-clock-and-Kconfig-update-for-PCIe-support.patch delete mode 100644 src/patches/linux-2.6-arm-asm-constraint.patch delete mode 100644 src/patches/linux-2.6-silence-acpi-blacklist.patch delete mode 100644 src/patches/linux-2.6-vmscan_remove_wait_on_page_writeback.patch delete mode 100644 src/patches/linux-2.6.32-crypto-mv_cesa.patch delete mode 100644 src/patches/linux-2.6.32-imq-test2.patch delete mode 100644 src/patches/linux-2.6.32.11-netdev-1.patch delete mode 100644 src/patches/linux-2.6.32.15-option_add_huawei_android.patch delete mode 100644 src/patches/linux-2.6.32.27_ipg-fix-driver-name.patch delete mode 100644 src/patches/linux-2.6.32.45_align_ssb_modtable_32bit_boundary.patch delete mode 100644 src/patches/linux-2.6.32.8-ipp2p-0.8.2-pomng.patch delete mode 100644 src/patches/linux-2.6.32.8-xen-imq-test2.patch delete mode 100644 src/patches/linux-2.x-smsc95xx-add_mac_addr_param.patch delete mode 100644 src/patches/linux-3.0-ipp2p-0.8.2-ipfire.patch delete mode 100644 src/patches/linux-3.1-imq.patch delete mode 100644 src/patches/linux-3.10-layer7-filter.patch delete mode 100644 src/patches/linux-3.10.10-arm_kirkwood_setups.patch delete mode 100644 src/patches/linux-3.10.27-fs-exec-atomic64-operand-requires-impossible-reload.patch delete mode 100644 src/patches/linux-3.10.30-imq.patch delete mode 100644 src/patches/linux-3.10.34-iwlwifi-noibss_only_on_radar_chan.patch delete mode 100644 src/patches/linux-3.10.39-pie_packet_sch.patch delete mode 100644 src/patches/linux-3.10.57-mmc_add_eMMC_5.x.patch delete mode 100644 src/patches/linux-3.10.9-ledtrig-netdev-1.patch delete mode 100644 src/patches/linux-3.10.y-usbnet_mcs7830_rework_link_detect.patch delete mode 100644 src/patches/linux-3.2-0001-panda-wlan-fix.patch delete mode 100644 src/patches/linux-3.2-0002-panda-i2c.patch delete mode 100644 src/patches/linux-3.2-imq.patch delete mode 100644 src/patches/linux-3.2-panda-reboot.patch delete mode 100644 src/patches/linux-3.2.25-arm_kirkwood_setups.patch delete mode 100644 src/patches/linux-3.2.27-rpi_fix_dwc_common_build.patch delete mode 100644 src/patches/linux-3.2.33-ledtrig-netdev-1.patch delete mode 100644 src/patches/linux-3.9-dvbsky-wot2.patch diff --git a/lfs/compat-drivers b/lfs/compat-drivers deleted file mode 100644 index 57a9b163f..000000000 --- a/lfs/compat-drivers +++ /dev/null @@ -1,138 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007-2013 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -############################################################################### -# Definitions -############################################################################### - -include Config - -VERSUFIX=ipfire$(KCFG) - -VER = 3.8.3-2-snpu - -ifeq "$(KCFG)" "-xen" - KVER = 2.6.32.61 -endif - -THISAPP = compat-drivers-$(VER) -DL_FILE = compat-drivers-$(VER).tar.bz2 -DL_FROM = $(URL_IPFIRE) -DIR_APP = $(DIR_SRC)/$(THISAPP) -TARGET = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX) - -############################################################################### -# Top-level Rules -############################################################################### - -objects = $(DL_FILE) asix-4.7.0a.tar.xz asix_gb-1.4.0a.tar.xz - -$(DL_FILE) = $(DL_FROM)/$(DL_FILE) -asix-4.7.0a.tar.xz = $(DL_FROM)/asix-4.7.0a.tar.xz -asix_gb-1.4.0a.tar.xz = $(DL_FROM)/asix_gb-1.4.0a.tar.xz - -$(DL_FILE)_MD5 = 5a1e27e5b694aa5022116a5a3220bfdc -asix-4.7.0a.tar.xz_MD5=491f7e8c3ee74433975812d86a0fa98b -asix_gb-1.4.0a.tar.xz_MD5=9c9db731631abf00da2069d03253f9a7 - -install : $(TARGET) - -check : $(patsubst %,$(DIR_CHK)/%,$(objects)) - -download :$(patsubst %,$(DIR_DL)/%,$(objects)) - -md5 : $(subst %,%_MD5,$(objects)) - -############################################################################### -# Downloading, checking, md5sum -############################################################################### - -$(patsubst %,$(DIR_CHK)/%,$(objects)) : - @$(CHECK) - -$(patsubst %,$(DIR_DL)/%,$(objects)) : - @$(LOAD) - -$(subst %,%_MD5,$(objects)) : - @$(MD5) - -############################################################################### -# Installation Details -############################################################################### - -$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) - @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar xaf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-drivers-3.8-1-u-kref_get_unless_zero.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-drivers-3.8.3-ath_ignore_eeprom_regdomain.patch - - # kfifo has no license info and taints kernel - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-wireless-2.6.39_kfifo_module_info.patch - - # Codel patches - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-wireless_codel-avoid-a-nul-rec_inv_sqrt.patch - - # Build ath5k only if target has pci - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-wireless-3.5-build_ath5k_only_with_pci.patch - - # Copy USB-Net drivers from Kernel... - mkdir $(DIR_APP)/drivers/net/usb/new - cp $(DIR_APP)/drivers/net/usb/*.c $(DIR_APP)/drivers/net/usb/new - cp /usr/src/linux/drivers/net/usb/{*.c,*.h,Makefile} $(DIR_APP)/drivers/net/usb - cp $(DIR_APP)/drivers/net/usb/new/*.c $(DIR_APP)/drivers/net/usb - - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-wireless-2.6.34-usbnet_compile.patch - - # Build Updated asix usb lan driver - cd $(DIR_APP)/drivers/net/usb && tar xvJf $(DIR_DL)/asix-4.7.0a.tar.xz - - # Build Updated asix usb gigabit lan driver - cd $(DIR_APP)/drivers/net/usb && tar xvJf $(DIR_DL)/asix_gb-1.4.0a.tar.xz - echo 'obj-$$(CONFIG_USB_ASIX_GB) += asix_gb.o' >> $(DIR_APP)/drivers/net/usb/Makefile - cd $(DIR_APP) && echo export CONFIG_USB_ASIX_GB=m >> config.mk - - # Add libartas uAP driver - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-wireless-3.5-libertas_uap.patch - - # uAP will not build with xen-kernel (2.6) -ifneq "$(KCFG)" "-xen" - cd $(DIR_APP) && echo export CONFIG_LIBERTAS_UAP=m >> config.mk -endif - -ifeq "$(MACHINE_TYPE)" "arm" - # disable video because it not build on Arm - cd $(DIR_APP) && sed -i -e \ - "s/export CONFIG_COMPAT_VIDEO_MODULES=y//g" config.mk -endif - - # Erase some modules that are obsolete or moved to other path - rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/net/bluetooth - rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/wireless/wl12* - - cd $(DIR_APP) && make KLIB=/lib/modules/$(KVER)-$(VERSUFIX) \ - KLIB_BUILD=/lib/modules/$(KVER)-$(VERSUFIX)/build \ - KMODPATH_ARG='INSTALL_MOD_PATH=' KMODDIR=kernel install-modules - - # Install firmware udev files... - cd $(DIR_APP)/udev && install -m 644 50-compat_firmware.rules /lib/udev/rules.d/ - cd $(DIR_APP)/udev && install -m 755 compat_firmware.sh /lib/udev/ - - -rm -rf $(DIR_APP) - @$(POSTBUILD) diff --git a/lfs/e1000 b/lfs/e1000 deleted file mode 100644 index d9ae7c63f..000000000 --- a/lfs/e1000 +++ /dev/null @@ -1,90 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007-2012 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -############################################################################### -# Definitions -############################################################################### - -include Config - -VERSUFIX = ipfire$(KCFG) - -# e1000 vendor modul is only for legacy xen kernel -# The 3.2.x kernel has newer module. - -KVER = 2.6.32.61 -MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/e1000/ - -VER = 8.0.35 - -THISAPP = e1000-$(VER) -DL_FILE = $(THISAPP).tar.gz -DL_FROM = $(URL_IPFIRE) -DIR_APP = $(DIR_SRC)/$(THISAPP) -TARGET = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX) - -############################################################################### -# Top-level Rules -############################################################################### - -objects = $(DL_FILE) - -$(DL_FILE) = $(DL_FROM)/$(DL_FILE) - -$(DL_FILE)_MD5 = 0f452b979f7a7b9ea0b5a87a117f7408 - -install : $(TARGET) - -check : $(patsubst %,$(DIR_CHK)/%,$(objects)) - -download :$(patsubst %,$(DIR_DL)/%,$(objects)) - -md5 : $(subst %,%_MD5,$(objects)) - -dist: - $(PAK) - -############################################################################### -# Downloading, checking, md5sum -############################################################################### - -$(patsubst %,$(DIR_CHK)/%,$(objects)) : - @$(CHECK) - -$(patsubst %,$(DIR_DL)/%,$(objects)) : - @$(LOAD) - -$(subst %,%_MD5,$(objects)) : - @$(MD5) - -############################################################################### -# Installation Details -############################################################################### - -$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) - @$(PREBUILD) - #Save original e1000 module - -mv $(MODPATH)/e1000.ko \ - $(MODPATH)/e1000.ko.org - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP)/src && make BUILD_KERNEL=$(KVER)-$(VERSUFIX) - cd $(DIR_APP)/src && install -m 644 e1000.ko $(MODPATH) - @rm -rf $(DIR_APP) - @$(POSTBUILD) diff --git a/lfs/kvm-kmod b/lfs/kvm-kmod deleted file mode 100644 index 90bd790a9..000000000 --- a/lfs/kvm-kmod +++ /dev/null @@ -1,86 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007-2011 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -############################################################################### -# Definitions -############################################################################### - -include Config - -VERSUFIX=ipfire$(KCFG) - -VER = 3.6 - -THISAPP = kvm-kmod-$(VER) -DL_FILE = $(THISAPP).tar.bz2 -DL_FROM = $(URL_IPFIRE) -DIR_APP = $(DIR_SRC)/$(THISAPP) -TARGET = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX) -SUP_ARCH = i586 - -############################################################################### -# Top-level Rules -############################################################################### - -objects = $(DL_FILE) - -$(DL_FILE) = $(DL_FROM)/$(DL_FILE) - -$(DL_FILE)_MD5 = 3e51d395d6a0ecac6ae600a0515880c2 - -install : $(TARGET) - -check : $(patsubst %,$(DIR_CHK)/%,$(objects)) - -download :$(patsubst %,$(DIR_DL)/%,$(objects)) - -md5 : $(subst %,%_MD5,$(objects)) - -dist: - $(PAK) - -############################################################################### -# Downloading, checking, md5sum -############################################################################### - -$(patsubst %,$(DIR_CHK)/%,$(objects)) : - @$(CHECK) - -$(patsubst %,$(DIR_DL)/%,$(objects)) : - @$(LOAD) - -$(subst %,%_MD5,$(objects)) : - @$(MD5) - -############################################################################### -# Installation Details -############################################################################### - -$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) - @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && ./configure --kerneldir=/usr/src/linux - cd $(DIR_APP) && make $(MAKETUNING) - cd $(DIR_APP) && install -m 644 x86/*.ko \ - /lib/modules/$(KVER)-$(VERSUFIX)/kernel/arch/x86/kvm/ - cd $(DIR_APP) && cp -f include/asm/* /usr/include/asm - cd $(DIR_APP) && cp -f include/linux/* /usr/include/linux - @rm -rf $(DIR_APP) - @$(POSTBUILD) diff --git a/lfs/linux b/lfs/linux index 1e6298c39..383dac04a 100644 --- a/lfs/linux +++ b/lfs/linux @@ -125,11 +125,9 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14-layer7-filter.patch # Grsecurity-patches -ifneq "$(KCFG)" "-headers" cd $(DIR_APP) && xz -c -d $(DIR_DL)/$(GRS_PATCHES) | patch -Np1 cd $(DIR_APP) && rm localversion-grsec cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.7-disable-compat_vdso.patch -endif # DVB Patches cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-dvbsky.patch diff --git a/lfs/mISDN b/lfs/mISDN deleted file mode 100644 index 5cd4972ca..000000000 --- a/lfs/mISDN +++ /dev/null @@ -1,119 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007-2012 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -############################################################################### -# Definitions -############################################################################### - -include Config - -VERSUFIX=ipfire$(KCFG) - -ifeq "$(KCFG)" "-xen" - KVER = "2.6.32.61" -endif - -VER = 20121008 - -THISAPP = mISDN-$(VER) -DL_FILE = $(THISAPP).tar.xz -DL_FROM = $(URL_IPFIRE) -DIR_APP = $(DIR_SRC)/$(THISAPP) -TARGET = $(DIR_INFO)/$(THISAPP)-kmod-$(VERSUFIX) - -############################################################################### -# Top-level Rules -############################################################################### - -objects = $(DL_FILE) - -$(DL_FILE) = $(DL_FROM)/$(DL_FILE) - -$(DL_FILE)_MD5 = 7fee0514fd523176b36fca53b02b45cc - -install : $(TARGET) - -check : $(patsubst %,$(DIR_CHK)/%,$(objects)) - -download :$(patsubst %,$(DIR_DL)/%,$(objects)) - -md5 : $(subst %,%_MD5,$(objects)) - -############################################################################### -# Downloading, checking, md5sum -############################################################################### - -$(patsubst %,$(DIR_CHK)/%,$(objects)) : - @$(CHECK) - -$(patsubst %,$(DIR_DL)/%,$(objects)) : - @$(LOAD) - -$(subst %,%_MD5,$(objects)) : - @$(MD5) - -############################################################################### -# Installation Details -############################################################################### - -$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) - @$(PREBUILD) - @rm -rf $(DIR_SRC)/mISDN* && cd $(DIR_SRC) && tar Jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_SRC)/mISDN && patch -Np1 < $(DIR_SRC)/src/patches/mISDN-hfcusb-reportl1down.patch - cd $(DIR_SRC)/mISDN && patch -Np1 < $(DIR_SRC)/src/patches/mISDN_hfc-s_add_id.patch -ifeq "$(MACHINE_TYPE)" "arm" - # Remove unsupported timestampcounter on arm. the result seems to be unused - cd $(DIR_SRC)/mISDN && sed -i -e "s|rdtscl(pChan->ulTimestampIn);||g" drivers/isdn/mISDN/octvqe/octvqe_linux.c -endif -ifeq "$(NOPCI)" "1" - # Disable PCI drivers if kernel has no PCI - cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_HFCPCI|#&|g" mISDN.cfg.default - cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_HFCMULTI|#&|g" mISDN.cfg.default - cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_XHFC|#&|g" mISDN.cfg.default - cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_AVMFRITZ|#&|g" mISDN.cfg.default - cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_SPEEDFAX|#&|g" mISDN.cfg.default - cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_INFINEON|#&|g" mISDN.cfg.default - cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_W6692|#&|g" mISDN.cfg.default - cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_NETJET|#&|g" mISDN.cfg.default - cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_IPAC|#&|g" mISDN.cfg.default - cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_ISAR|#&|g" mISDN.cfg.default -endif - cd $(DIR_SRC)/mISDN && ./configure --with-kerneldir=/usr/src/linux - cd $(DIR_SRC)/mISDN && make KVERS=$(KVER)-$(VERSUFIX) modules - cd $(DIR_SRC)/mISDN && make KVERS=$(KVER)-$(VERSUFIX) \ - INSTALL_PREFIX=$(DIR_SRC)/mISDN/dest/ \ - modules_install - mv $(DIR_SRC)/mISDN/dest/lib/modules/*/extra \ - /lib/modules/$(KVER)-$(VERSUFIX)/mISDN - -ifneq "$(XEN)" "1" - # Blacklist misdn modules - for f in $$(find /lib/modules/$(KVER)-$(VERSUFIX)/mISDN -name *.ko); do \ - echo "blacklist $$(basename $$f)" >> /etc/modprobe.d/mISDN.conf ; \ - done - sed -i -e "s|.ko||g" /etc/modprobe.d/mISDN.conf -endif - - # Remove mISDN modules that was shipped with the kernel - rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/isdn/mISDN - rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/isdn/hardware/mISDN - - @rm -rf $(DIR_SRC)/mISDN* - @$(POSTBUILD) diff --git a/lfs/r8101 b/lfs/r8101 deleted file mode 100644 index fb03e56f9..000000000 --- a/lfs/r8101 +++ /dev/null @@ -1,90 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007-2013 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -############################################################################### -# Definitions -############################################################################### - -include Config - -VERSUFIX = ipfire$(KCFG) -ifeq "$(KCFG)" "-xen" - KVER = 2.6.32.61 - MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net - MODNAME = r8101.ko -else - MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/realtek - MODNAME = r8101.ko.vendor -endif - -VER = 1.023.00 - -THISAPP = r8101-$(VER) -DL_FILE = $(THISAPP).tar.bz2 -DL_FROM = $(URL_IPFIRE) -DIR_APP = $(DIR_SRC)/$(THISAPP) -TARGET = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX) - -############################################################################### -# Top-level Rules -############################################################################### - -objects = $(DL_FILE) - -$(DL_FILE) = $(DL_FROM)/$(DL_FILE) - -$(DL_FILE)_MD5 = 03cfc34e41522cd34ac6f4b1b6508896 - -install : $(TARGET) - -check : $(patsubst %,$(DIR_CHK)/%,$(objects)) - -download :$(patsubst %,$(DIR_DL)/%,$(objects)) - -md5 : $(subst %,%_MD5,$(objects)) - -dist: - $(PAK) - -############################################################################### -# Downloading, checking, md5sum -############################################################################### - -$(patsubst %,$(DIR_CHK)/%,$(objects)) : - @$(CHECK) - -$(patsubst %,$(DIR_DL)/%,$(objects)) : - @$(LOAD) - -$(subst %,%_MD5,$(objects)) : - @$(MD5) - -############################################################################### -# Installation Details -############################################################################### - -$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) - @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/r8101_add_missing_pciids.patch - cd $(DIR_APP) && make -C /lib/modules/$(KVER)-$(VERSUFIX)/build/ SUBDIRS=$(DIR_APP)/src modules - cd $(DIR_APP)/src && install -m 644 r8101.ko $(MODPATH)/$(MODNAME) - @rm -rf $(DIR_APP) - @$(POSTBUILD) diff --git a/lfs/r8168 b/lfs/r8168 deleted file mode 100644 index 98267370a..000000000 --- a/lfs/r8168 +++ /dev/null @@ -1,89 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007-2013 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -############################################################################### -# Definitions -############################################################################### - -include Config - -VERSUFIX = ipfire$(KCFG) -ifeq "$(KCFG)" "-xen" - KVER = 2.6.32.61 - MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net - MODNAME = r8168.ko -else - MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/realtek - MODNAME = r8168.ko.vendor -endif - -VER = 8.035.00 - -THISAPP = r8168-$(VER) -DL_FILE = $(THISAPP).tar.bz2 -DL_FROM = $(URL_IPFIRE) -DIR_APP = $(DIR_SRC)/$(THISAPP) -TARGET = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX) - -############################################################################### -# Top-level Rules -############################################################################### - -objects = $(DL_FILE) - -$(DL_FILE) = $(DL_FROM)/$(DL_FILE) - -$(DL_FILE)_MD5 = 80b8d23e463e5408dced1b1377579dae - -install : $(TARGET) - -check : $(patsubst %,$(DIR_CHK)/%,$(objects)) - -download :$(patsubst %,$(DIR_DL)/%,$(objects)) - -md5 : $(subst %,%_MD5,$(objects)) - -dist: - $(PAK) - -############################################################################### -# Downloading, checking, md5sum -############################################################################### - -$(patsubst %,$(DIR_CHK)/%,$(objects)) : - @$(CHECK) - -$(patsubst %,$(DIR_DL)/%,$(objects)) : - @$(LOAD) - -$(subst %,%_MD5,$(objects)) : - @$(MD5) - -############################################################################### -# Installation Details -############################################################################### - -$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) - @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && make -C /lib/modules/$(KVER)-$(VERSUFIX)/build/ SUBDIRS=$(DIR_APP)/src modules - cd $(DIR_APP)/src && install -m 644 r8168.ko $(MODPATH)/$(MODNAME) - @rm -rf $(DIR_APP) - @$(POSTBUILD) diff --git a/lfs/r8169 b/lfs/r8169 deleted file mode 100644 index 5a8be3c31..000000000 --- a/lfs/r8169 +++ /dev/null @@ -1,95 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007-2013 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -############################################################################### -# Definitions -############################################################################### - -include Config - -VERSUFIX = ipfire$(KCFG) -ifeq "$(KCFG)" "-xen" - KVER = 2.6.32.61 - MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net - MODNAME = r8169.ko -else - MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/realtek - MODNAME = r8169.ko.vendor -endif - -VER = 6.017.00 - -THISAPP = r8169-$(VER) -DL_FILE = $(THISAPP).tar.bz2 -DL_FROM = $(URL_IPFIRE) -DIR_APP = $(DIR_SRC)/$(THISAPP) -TARGET = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX) - -############################################################################### -# Top-level Rules -############################################################################### - -objects = $(DL_FILE) - -$(DL_FILE) = $(DL_FROM)/$(DL_FILE) - -$(DL_FILE)_MD5 = 396d7e28d573bde416fbdfdef723f4bd - -install : $(TARGET) - -check : $(patsubst %,$(DIR_CHK)/%,$(objects)) - -download :$(patsubst %,$(DIR_DL)/%,$(objects)) - -md5 : $(subst %,%_MD5,$(objects)) - -dist: - $(PAK) - -############################################################################### -# Downloading, checking, md5sum -############################################################################### - -$(patsubst %,$(DIR_CHK)/%,$(objects)) : - @$(CHECK) - -$(patsubst %,$(DIR_DL)/%,$(objects)) : - @$(LOAD) - -$(subst %,%_MD5,$(objects)) : - @$(MD5) - -############################################################################### -# Installation Details -############################################################################### - -$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) - @$(PREBUILD) - #Save original r8169 module -ifeq "$(KCFG)" "-xen" - -mv $(MODPATH)/r8169.ko \ - $(MODPATH)/r8169.ko.org -endif - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/r8169_add_missing_pciids.patch - cd $(DIR_APP) && make -C /lib/modules/$(KVER)-$(VERSUFIX)/build/ SUBDIRS=$(DIR_APP)/src modules - cd $(DIR_APP)/src && install -m 644 r8169.ko $(MODPATH)/$(MODNAME) - @rm -rf $(DIR_APP) - @$(POSTBUILD) diff --git a/lfs/v4l-dvb b/lfs/v4l-dvb deleted file mode 100644 index 9cf277caf..000000000 --- a/lfs/v4l-dvb +++ /dev/null @@ -1,103 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007-2012 IPFire Team # -# # -# 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 3 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, see . # -# # -############################################################################### - -############################################################################### -# Definitions -############################################################################### - -include Config - -VERSUFIX=ipfire$(KCFG) - -VER = 20120916 -THISAPP = v4l-dvb-$(VER) -DL_FILE = $(THISAPP).tar.xz -DL_FROM = $(URL_IPFIRE) -DIR_APP = $(DIR_SRC)/$(THISAPP) -TARGET = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX) - -ifeq "$(KCFG)" "-xen" - XVER = 2.6.32 - KVER = 2.6.32.61 -else - XVER = 3.2.0 -endif -############################################################################### -# Top-level Rules -############################################################################### - -objects = $(DL_FILE) - -$(DL_FILE) = $(DL_FROM)/$(DL_FILE) - -$(DL_FILE)_MD5 = 7824fdd540605c54584df0d16f0e923b - -install : $(TARGET) - -check : $(patsubst %,$(DIR_CHK)/%,$(objects)) - -download :$(patsubst %,$(DIR_DL)/%,$(objects)) - -md5 : $(subst %,%_MD5,$(objects)) - -############################################################################### -# Downloading, checking, md5sum -############################################################################### - -$(patsubst %,$(DIR_CHK)/%,$(objects)) : - @$(CHECK) - -$(patsubst %,$(DIR_DL)/%,$(objects)) : - @$(LOAD) - -$(subst %,%_MD5,$(objects)) : - @$(MD5) - -############################################################################### -# Installation Details -############################################################################### - -$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) - @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar Jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/v4l-dvb_rtl28xx_add_usb_ids.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/v4l-dvb_rtl28xx_commented_usb_clear_halt.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/v4l-dvb_usbv2_dont_report_pidfilter_fail.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/v4l-dvb_fix_tua6034_pll.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/v4l-dvb_bestunar_us638x.patch - - cd $(DIR_APP) && make allyesconfig KERNELRELEASE=$(KVER)-$(VERSUFIX) VER=$(XVER) -ifeq "$(KCFG)" "-omap" - # Disable failing OMAP2 Video Out and IR RX51 driver - cd $(DIR_APP) && sed -i -e \ - "s|^CONFIG_VIDEO_OMAP2_VOUT=m|# CONFIG_VIDEO_OMAP2_VOUT is not set|g" \ - v4l/.config - cd $(DIR_APP) && sed -i -e \ - "s|^CONFIG_IR_RX51=m|# CONFIG_IR_RX51 is not set|g" \ - v4l/.config -endif - # Disable Radio Shark (missing tuner module) - cd $(DIR_APP) && sed -i -e \ - "s|^CONFIG_RADIO_SHARK=m|# CONFIG_RADIO_SHARK is not set|g" \ - v4l/.config - cd $(DIR_APP) && make all KERNELRELEASE=$(KVER)-$(VERSUFIX) VER=$(XVER) - cd $(DIR_APP) && make install KERNELRELEASE=$(KVER)-$(VERSUFIX) VER=$(XVER) - ln -sf $(DIR_APP)/ /usr/src/v4l-dvb - @$(POSTBUILD) diff --git a/make.sh b/make.sh index 3121fdd31..40075916e 100755 --- a/make.sh +++ b/make.sh @@ -408,14 +408,7 @@ buildipfire() { i586) # x86-pae (Native and new XEN) kernel build ipfiremake linux KCFG="-pae" -# ipfiremake kvm-kmod KCFG="-pae" -# ipfiremake v4l-dvb KCFG="-pae" -# ipfiremake mISDN KCFG="-pae" ipfiremake cryptodev KCFG="-pae" -# ipfiremake compat-drivers KCFG="-pae" -# ipfiremake r8169 KCFG="-pae" -# ipfiremake r8168 KCFG="-pae" -# ipfiremake r8101 KCFG="-pae" ipfiremake e1000e KCFG="-pae" ipfiremake igb KCFG="-pae" ipfiremake ixgbe KCFG="-pae" @@ -423,14 +416,7 @@ buildipfire() { # x86 kernel build ipfiremake linux KCFG="" -# ipfiremake kvm-kmod KCFG="" -# ipfiremake v4l-dvb KCFG="" -# ipfiremake mISDN KCFG="" ipfiremake cryptodev KCFG="" -# ipfiremake compat-drivers KCFG="" -# ipfiremake r8169 KCFG="" -# ipfiremake r8168 KCFG="" -# ipfiremake r8101 KCFG="" ipfiremake e1000e KCFG="" ipfiremake igb KCFG="" ipfiremake ixgbe KCFG="" @@ -440,10 +426,7 @@ buildipfire() { armv5tel) # arm-rpi (Raspberry Pi) kernel build ipfiremake linux KCFG="-rpi" -# ipfiremake v4l-dvb KCFG="-rpi" -# ipfiremake mISDN KCFG="-rpi" NOPCI=1 ipfiremake cryptodev KCFG="-rpi" -# ipfiremake compat-drivers KCFG="-rpi" ipfiremake linux-initrd KCFG="-rpi" # arm multi platform (Panda, Wandboard ...) kernel build @@ -456,13 +439,7 @@ buildipfire() { # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build ipfiremake linux KCFG="-kirkwood" -# ipfiremake v4l-dvb KCFG="-kirkwood" -# ipfiremake mISDN KCFG="-kirkwood" ipfiremake cryptodev KCFG="-kirkwood" -# ipfiremake compat-drivers KCFG="-kirkwood" -# ipfiremake r8169 KCFG="-kirkwood" -# ipfiremake r8168 KCFG="-kirkwood" -# ipfiremake r8101 KCFG="-kirkwood" ipfiremake e1000e KCFG="-kirkwood" ipfiremake igb KCFG="-kirkwood" ipfiremake ixgbe KCFG="-kirkwood" diff --git a/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch b/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch deleted file mode 100644 index d27ad54ea..000000000 --- a/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 2e908aeebd6804296e7d14a96de6be1e2de38e93 Mon Sep 17 00:00:00 2001 -From: Matthias Brugger -Date: Wed, 23 Jan 2013 19:50:38 +0100 -Subject: [PATCH 2/2] omap2: twl-common: Add default power configuration - -This patch adds a generic power script configuration. -When rebooting an OMAP3530 at 125 MHz, the reboot hangs. -With the generic power script, TWL4030 will be reset -when a warm reset occures. This way the OMAP3530 does not -hang on reboot. - -Signed-off-by: Matthias Brugger ---- - arch/arm/mach-omap2/twl-common.c | 38 ++++++++++++++++++++++++++++++++++++++ - arch/arm/mach-omap2/twl-common.h | 1 + - 2 files changed, 39 insertions(+) - -diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c -index e49b40b..f096beb 100644 ---- a/arch/arm/mach-omap2/twl-common.c -+++ b/arch/arm/mach-omap2/twl-common.c -@@ -120,6 +120,41 @@ static struct twl4030_audio_data omap3_audio_pdata = { - .codec = &omap3_codec, - }; - -+static struct twl4030_ins wrst_seq[] __initdata = { -+ {MSG_SINGULAR(DEV_GRP_NULL, 0x1b, RES_STATE_OFF), 2}, -+ {MSG_SINGULAR(DEV_GRP_P1, 0xf, RES_STATE_WRST), 15}, -+ {MSG_SINGULAR(DEV_GRP_P1, 0x10, RES_STATE_WRST), 15}, -+ {MSG_SINGULAR(DEV_GRP_P1, 0x7, RES_STATE_WRST), 0x60}, -+ {MSG_SINGULAR(DEV_GRP_P1, 0x19, RES_STATE_ACTIVE), 2}, -+ {MSG_SINGULAR(DEV_GRP_NULL, 0x1b, RES_STATE_ACTIVE), 2}, -+}; -+ -+static struct twl4030_script wrst_script __initdata = { -+ .script = wrst_seq, -+ .size = ARRAY_SIZE(wrst_seq), -+ .flags = TWL4030_WRST_SCRIPT, -+}; -+ -+static struct twl4030_script *omap3_power_scripts[] __initdata = { -+ &wrst_script, -+}; -+ -+static struct twl4030_resconfig omap3_rconfig[] = { -+ { .resource = RES_HFCLKOUT, .devgroup = DEV_GRP_P3, .type = -1, -+ .type2 = -1 }, -+ { .resource = RES_VDD1, .devgroup = DEV_GRP_P1, .type = -1, -+ .type2 = -1 }, -+ { .resource = RES_VDD2, .devgroup = DEV_GRP_P1, .type = -1, -+ .type2 = -1 }, -+ { 0, 0}, -+}; -+ -+static struct twl4030_power_data omap3_power_pdata = { -+ .scripts = omap3_power_scripts, -+ .num = ARRAY_SIZE(omap3_power_scripts), -+ .resource_config = omap3_rconfig, -+}; -+ - static struct regulator_consumer_supply omap3_vdda_dac_supplies[] = { - REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"), - }; -@@ -224,6 +259,9 @@ void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data, - if (pdata_flags & TWL_COMMON_PDATA_AUDIO && !pmic_data->audio) - pmic_data->audio = &omap3_audio_pdata; - -+ if (pdata_flags & TWL_COMMON_PDATA_POWER && !pmic_data->power) -+ pmic_data->power = &omap3_power_pdata; -+ - /* Common regulator configurations */ - if (regulators_flags & TWL_COMMON_REGULATOR_VDAC && !pmic_data->vdac) - pmic_data->vdac = &omap3_vdac_idata; -diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h -index dcfbad5..dbeb905 100644 ---- a/arch/arm/mach-omap2/twl-common.h -+++ b/arch/arm/mach-omap2/twl-common.h -@@ -7,6 +7,7 @@ - #define TWL_COMMON_PDATA_BCI (1 << 1) - #define TWL_COMMON_PDATA_MADC (1 << 2) - #define TWL_COMMON_PDATA_AUDIO (1 << 3) -+#define TWL_COMMON_PDATA_POWER (1 << 4) - - /* Common LDO regulators for TWL4030/TWL6030 */ - #define TWL_COMMON_REGULATOR_VDAC (1 << 0) --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch b/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch deleted file mode 100644 index a61d5b811..000000000 --- a/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch +++ /dev/null @@ -1,444 +0,0 @@ -From 369b60c157f67a71a6f302ab9843ae2de1805a2a Mon Sep 17 00:00:00 2001 -From: Laurent Pinchart -Date: Mon, 22 Oct 2012 15:43:00 +0200 -Subject: [PATCH 1/6] omap3isp: Use the common clock framework - -Expose the two ISP external clocks XCLKA and XCLKB as common clocks for -subdev drivers. - -Signed-off-by: Laurent Pinchart -Acked-by: Mike Turquette ---- - drivers/media/platform/omap3isp/isp.c | 277 ++++++++++++++++++++++++--------- - drivers/media/platform/omap3isp/isp.h | 22 ++- - include/media/omap3isp.h | 10 +- - 3 files changed, 225 insertions(+), 84 deletions(-) - -diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c -index 6e5ad8e..1d7dbd5 100644 ---- a/drivers/media/platform/omap3isp/isp.c -+++ b/drivers/media/platform/omap3isp/isp.c -@@ -55,6 +55,7 @@ - #include - - #include -+#include - #include - #include - #include -@@ -148,6 +149,201 @@ void omap3isp_flush(struct isp_device *isp) - isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_REVISION); - } - -+/* ----------------------------------------------------------------------------- -+ * XCLK -+ */ -+ -+#define to_isp_xclk(_hw) container_of(_hw, struct isp_xclk, hw) -+ -+static void isp_xclk_update(struct isp_xclk *xclk, u32 divider) -+{ -+ switch (xclk->id) { -+ case ISP_XCLK_A: -+ isp_reg_clr_set(xclk->isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, -+ ISPTCTRL_CTRL_DIVA_MASK, -+ divider << ISPTCTRL_CTRL_DIVA_SHIFT); -+ break; -+ case ISP_XCLK_B: -+ isp_reg_clr_set(xclk->isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, -+ ISPTCTRL_CTRL_DIVB_MASK, -+ divider << ISPTCTRL_CTRL_DIVB_SHIFT); -+ break; -+ } -+} -+ -+static int isp_xclk_prepare(struct clk_hw *hw) -+{ -+ struct isp_xclk *xclk = to_isp_xclk(hw); -+ -+ omap3isp_get(xclk->isp); -+ -+ return 0; -+} -+ -+static void isp_xclk_unprepare(struct clk_hw *hw) -+{ -+ struct isp_xclk *xclk = to_isp_xclk(hw); -+ -+ omap3isp_put(xclk->isp); -+} -+ -+static int isp_xclk_enable(struct clk_hw *hw) -+{ -+ struct isp_xclk *xclk = to_isp_xclk(hw); -+ unsigned long flags; -+ -+ spin_lock_irqsave(&xclk->lock, flags); -+ isp_xclk_update(xclk, xclk->divider); -+ xclk->enabled = true; -+ spin_unlock_irqrestore(&xclk->lock, flags); -+ -+ return 0; -+} -+ -+static void isp_xclk_disable(struct clk_hw *hw) -+{ -+ struct isp_xclk *xclk = to_isp_xclk(hw); -+ unsigned long flags; -+ -+ spin_lock_irqsave(&xclk->lock, flags); -+ isp_xclk_update(xclk, 0); -+ xclk->enabled = false; -+ spin_unlock_irqrestore(&xclk->lock, flags); -+} -+ -+static unsigned long isp_xclk_recalc_rate(struct clk_hw *hw, -+ unsigned long parent_rate) -+{ -+ struct isp_xclk *xclk = to_isp_xclk(hw); -+ -+ return parent_rate / xclk->divider; -+} -+ -+static u32 isp_xclk_calc_divider(unsigned long *rate, unsigned long parent_rate) -+{ -+ u32 divider; -+ -+ if (*rate >= parent_rate) { -+ *rate = parent_rate; -+ return ISPTCTRL_CTRL_DIV_BYPASS; -+ } -+ -+ divider = DIV_ROUND_CLOSEST(parent_rate, *rate); -+ if (divider >= ISPTCTRL_CTRL_DIV_BYPASS) -+ divider = ISPTCTRL_CTRL_DIV_BYPASS - 1; -+ -+ *rate = parent_rate / divider; -+ return divider; -+} -+ -+static long isp_xclk_round_rate(struct clk_hw *hw, unsigned long rate, -+ unsigned long *parent_rate) -+{ -+ isp_xclk_calc_divider(&rate, *parent_rate); -+ return rate; -+} -+ -+static int isp_xclk_set_rate(struct clk_hw *hw, unsigned long rate, -+ unsigned long parent_rate) -+{ -+ struct isp_xclk *xclk = to_isp_xclk(hw); -+ unsigned long flags; -+ u32 divider; -+ -+ divider = isp_xclk_calc_divider(&rate, parent_rate); -+ -+ spin_lock_irqsave(&xclk->lock, flags); -+ -+ xclk->divider = divider; -+ if (xclk->enabled) -+ isp_xclk_update(xclk, divider); -+ -+ spin_unlock_irqrestore(&xclk->lock, flags); -+ -+ dev_dbg(xclk->isp->dev, "%s: cam_xclk%c set to %lu Hz (div %u)\n", -+ __func__, xclk->id == ISP_XCLK_A ? 'a' : 'b', rate, divider); -+ return 0; -+} -+ -+static const struct clk_ops isp_xclk_ops = { -+ .prepare = isp_xclk_prepare, -+ .unprepare = isp_xclk_unprepare, -+ .enable = isp_xclk_enable, -+ .disable = isp_xclk_disable, -+ .recalc_rate = isp_xclk_recalc_rate, -+ .round_rate = isp_xclk_round_rate, -+ .set_rate = isp_xclk_set_rate, -+}; -+ -+static const char *isp_xclk_parent_name = "cam_mclk"; -+ -+static const struct clk_init_data isp_xclk_init_data = { -+ .name = "cam_xclk", -+ .ops = &isp_xclk_ops, -+ .parent_names = &isp_xclk_parent_name, -+ .num_parents = 1, -+}; -+ -+static int isp_xclk_init(struct isp_device *isp) -+{ -+ struct isp_platform_data *pdata = isp->pdata; -+ struct clk_init_data init; -+ unsigned int i; -+ -+ for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) { -+ struct isp_xclk *xclk = &isp->xclks[i]; -+ struct clk *clk; -+ -+ xclk->isp = isp; -+ xclk->id = i == 0 ? ISP_XCLK_A : ISP_XCLK_B; -+ xclk->divider = 1; -+ spin_lock_init(&xclk->lock); -+ -+ init.name = i == 0 ? "cam_xclka" : "cam_xclkb"; -+ init.ops = &isp_xclk_ops; -+ init.parent_names = &isp_xclk_parent_name; -+ init.num_parents = 1; -+ -+ xclk->hw.init = &init; -+ -+ clk = devm_clk_register(isp->dev, &xclk->hw); -+ if (IS_ERR(clk)) -+ return PTR_ERR(clk); -+ -+ if (pdata->xclks[i].con_id == NULL && -+ pdata->xclks[i].dev_id == NULL) -+ continue; -+ -+ xclk->lookup = kzalloc(sizeof(*xclk->lookup), GFP_KERNEL); -+ if (xclk->lookup == NULL) -+ return -ENOMEM; -+ -+ xclk->lookup->con_id = pdata->xclks[i].con_id; -+ xclk->lookup->dev_id = pdata->xclks[i].dev_id; -+ xclk->lookup->clk = clk; -+ -+ clkdev_add(xclk->lookup); -+ } -+ -+ return 0; -+} -+ -+static void isp_xclk_cleanup(struct isp_device *isp) -+{ -+ unsigned int i; -+ -+ for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) { -+ struct isp_xclk *xclk = &isp->xclks[i]; -+ -+ if (xclk->lookup) -+ clkdev_drop(xclk->lookup); -+ } -+} -+ -+/* ----------------------------------------------------------------------------- -+ * Interrupts -+ */ -+ - /* - * isp_enable_interrupts - Enable ISP interrupts. - * @isp: OMAP3 ISP device -@@ -180,80 +376,6 @@ static void isp_disable_interrupts(struct isp_device *isp) - isp_reg_writel(isp, 0, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0ENABLE); - } - --/** -- * isp_set_xclk - Configures the specified cam_xclk to the desired frequency. -- * @isp: OMAP3 ISP device -- * @xclk: Desired frequency of the clock in Hz. 0 = stable low, 1 is stable high -- * @xclksel: XCLK to configure (0 = A, 1 = B). -- * -- * Configures the specified MCLK divisor in the ISP timing control register -- * (TCTRL_CTRL) to generate the desired xclk clock value. -- * -- * Divisor = cam_mclk_hz / xclk -- * -- * Returns the final frequency that is actually being generated -- **/ --static u32 isp_set_xclk(struct isp_device *isp, u32 xclk, u8 xclksel) --{ -- u32 divisor; -- u32 currentxclk; -- unsigned long mclk_hz; -- -- if (!omap3isp_get(isp)) -- return 0; -- -- mclk_hz = clk_get_rate(isp->clock[ISP_CLK_CAM_MCLK]); -- -- if (xclk >= mclk_hz) { -- divisor = ISPTCTRL_CTRL_DIV_BYPASS; -- currentxclk = mclk_hz; -- } else if (xclk >= 2) { -- divisor = mclk_hz / xclk; -- if (divisor >= ISPTCTRL_CTRL_DIV_BYPASS) -- divisor = ISPTCTRL_CTRL_DIV_BYPASS - 1; -- currentxclk = mclk_hz / divisor; -- } else { -- divisor = xclk; -- currentxclk = 0; -- } -- -- switch (xclksel) { -- case ISP_XCLK_A: -- isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, -- ISPTCTRL_CTRL_DIVA_MASK, -- divisor << ISPTCTRL_CTRL_DIVA_SHIFT); -- dev_dbg(isp->dev, "isp_set_xclk(): cam_xclka set to %d Hz\n", -- currentxclk); -- break; -- case ISP_XCLK_B: -- isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, -- ISPTCTRL_CTRL_DIVB_MASK, -- divisor << ISPTCTRL_CTRL_DIVB_SHIFT); -- dev_dbg(isp->dev, "isp_set_xclk(): cam_xclkb set to %d Hz\n", -- currentxclk); -- break; -- case ISP_XCLK_NONE: -- default: -- omap3isp_put(isp); -- dev_dbg(isp->dev, "ISP_ERR: isp_set_xclk(): Invalid requested " -- "xclk. Must be 0 (A) or 1 (B).\n"); -- return -EINVAL; -- } -- -- /* Do we go from stable whatever to clock? */ -- if (divisor >= 2 && isp->xclk_divisor[xclksel - 1] < 2) -- omap3isp_get(isp); -- /* Stopping the clock. */ -- else if (divisor < 2 && isp->xclk_divisor[xclksel - 1] >= 2) -- omap3isp_put(isp); -- -- isp->xclk_divisor[xclksel - 1] = divisor; -- -- omap3isp_put(isp); -- -- return currentxclk; --} -- - /* - * isp_core_init - ISP core settings - * @isp: OMAP3 ISP device -@@ -1969,6 +2091,7 @@ static int isp_remove(struct platform_device *pdev) - - isp_unregister_entities(isp); - isp_cleanup_modules(isp); -+ isp_xclk_cleanup(isp); - - __omap3isp_get(isp, false); - iommu_detach_device(isp->domain, &pdev->dev); -@@ -2042,7 +2165,6 @@ static int isp_probe(struct platform_device *pdev) - } - - isp->autoidle = autoidle; -- isp->platform_cb.set_xclk = isp_set_xclk; - - mutex_init(&isp->isp_mutex); - spin_lock_init(&isp->stat_lock); -@@ -2093,6 +2215,10 @@ static int isp_probe(struct platform_device *pdev) - if (ret < 0) - goto error_isp; - -+ ret = isp_xclk_init(isp); -+ if (ret < 0) -+ goto error_isp; -+ - /* Memory resources */ - for (m = 0; m < ARRAY_SIZE(isp_res_maps); m++) - if (isp->revision == isp_res_maps[m].isp_rev) -@@ -2162,6 +2288,7 @@ detach_dev: - free_domain: - iommu_domain_free(isp->domain); - error_isp: -+ isp_xclk_cleanup(isp); - omap3isp_put(isp); - error: - platform_set_drvdata(pdev, NULL); -diff --git a/drivers/media/platform/omap3isp/isp.h b/drivers/media/platform/omap3isp/isp.h -index c77e1f2..cd3eff4 100644 ---- a/drivers/media/platform/omap3isp/isp.h -+++ b/drivers/media/platform/omap3isp/isp.h -@@ -29,6 +29,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -125,8 +126,20 @@ struct isp_reg { - u32 val; - }; - --struct isp_platform_callback { -- u32 (*set_xclk)(struct isp_device *isp, u32 xclk, u8 xclksel); -+enum isp_xclk_id { -+ ISP_XCLK_A, -+ ISP_XCLK_B, -+}; -+ -+struct isp_xclk { -+ struct isp_device *isp; -+ struct clk_hw hw; -+ struct clk_lookup *lookup; -+ enum isp_xclk_id id; -+ -+ spinlock_t lock; /* Protects enabled and divider */ -+ bool enabled; -+ unsigned int divider; - }; - - /* -@@ -149,6 +162,7 @@ struct isp_platform_callback { - * @cam_mclk: Pointer to camera functional clock structure. - * @csi2_fck: Pointer to camera CSI2 complexIO clock structure. - * @l3_ick: Pointer to OMAP3 L3 bus interface clock. -+ * @xclks: External clocks provided by the ISP - * @irq: Currently attached ISP ISR callbacks information structure. - * @isp_af: Pointer to current settings for ISP AutoFocus SCM. - * @isp_hist: Pointer to current settings for ISP Histogram SCM. -@@ -185,12 +199,12 @@ struct isp_device { - int has_context; - int ref_count; - unsigned int autoidle; -- u32 xclk_divisor[2]; /* Two clocks, a and b. */ - #define ISP_CLK_CAM_ICK 0 - #define ISP_CLK_CAM_MCLK 1 - #define ISP_CLK_CSI2_FCK 2 - #define ISP_CLK_L3_ICK 3 - struct clk *clock[4]; -+ struct isp_xclk xclks[2]; - - /* ISP modules */ - struct ispstat isp_af; -@@ -209,8 +223,6 @@ struct isp_device { - unsigned int subclk_resources; - - struct iommu_domain *domain; -- -- struct isp_platform_callback platform_cb; - }; - - #define v4l2_dev_to_isp_device(dev) \ -diff --git a/include/media/omap3isp.h b/include/media/omap3isp.h -index 9584269..c9d06d9 100644 ---- a/include/media/omap3isp.h -+++ b/include/media/omap3isp.h -@@ -29,10 +29,6 @@ - struct i2c_board_info; - struct isp_device; - --#define ISP_XCLK_NONE 0 --#define ISP_XCLK_A 1 --#define ISP_XCLK_B 2 -- - enum isp_interface_type { - ISP_INTERFACE_PARALLEL, - ISP_INTERFACE_CSI2A_PHY2, -@@ -153,7 +149,13 @@ struct isp_v4l2_subdevs_group { - } bus; /* gcc < 4.6.0 chokes on anonymous union initializers */ - }; - -+struct isp_platform_xclk { -+ const char *dev_id; -+ const char *con_id; -+}; -+ - struct isp_platform_data { -+ struct isp_platform_xclk xclks[2]; - struct isp_v4l2_subdevs_group *subdevs; - void (*set_constraints)(struct isp_device *isp, bool enable); - }; --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch b/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch deleted file mode 100644 index 9d2b19caf..000000000 --- a/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 7c44c8a989ad01bd7cd02370d4ca4a742db218be Mon Sep 17 00:00:00 2001 -From: Laurent Pinchart -Date: Tue, 25 Sep 2012 15:46:34 +0200 -Subject: [PATCH 2/6] mt9m032: Fix PLL setup - -The MT9M032 PLL was assumed to be identical to the MT9P031 PLL but -differs significantly. Update the registers definitions and PLL limits -according to the datasheet. - -Signed-off-by: Laurent Pinchart ---- - drivers/media/i2c/mt9m032.c | 24 +++++++++++++----------- - 1 file changed, 13 insertions(+), 11 deletions(-) - -diff --git a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c -index f80c1d7e..30d755a 100644 ---- a/drivers/media/i2c/mt9m032.c -+++ b/drivers/media/i2c/mt9m032.c -@@ -87,7 +87,7 @@ - #define MT9M032_RESTART 0x0b - #define MT9M032_RESET 0x0d - #define MT9M032_PLL_CONFIG1 0x11 --#define MT9M032_PLL_CONFIG1_OUTDIV_MASK 0x3f -+#define MT9M032_PLL_CONFIG1_PREDIV_MASK 0x3f - #define MT9M032_PLL_CONFIG1_MUL_SHIFT 8 - #define MT9M032_READ_MODE1 0x1e - #define MT9M032_READ_MODE2 0x20 -@@ -106,6 +106,8 @@ - #define MT9M032_GAIN_AMUL_SHIFT 6 - #define MT9M032_GAIN_ANALOG_MASK 0x3f - #define MT9M032_FORMATTER1 0x9e -+#define MT9M032_FORMATTER1_PLL_P1_6 (1 << 8) -+#define MT9M032_FORMATTER1_PARALLEL (1 << 12) - #define MT9M032_FORMATTER2 0x9f - #define MT9M032_FORMATTER2_DOUT_EN 0x1000 - #define MT9M032_FORMATTER2_PIXCLK_EN 0x2000 -@@ -121,8 +123,6 @@ - #define MT9P031_PLL_CONTROL_PWROFF 0x0050 - #define MT9P031_PLL_CONTROL_PWRON 0x0051 - #define MT9P031_PLL_CONTROL_USEPLL 0x0052 --#define MT9P031_PLL_CONFIG2 0x11 --#define MT9P031_PLL_CONFIG2_P1_DIV_MASK 0x1f - - struct mt9m032 { - struct v4l2_subdev subdev; -@@ -255,13 +255,14 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor) - .n_max = 64, - .m_min = 16, - .m_max = 255, -- .p1_min = 1, -- .p1_max = 128, -+ .p1_min = 6, -+ .p1_max = 7, - }; - - struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); - struct mt9m032_platform_data *pdata = sensor->pdata; - struct aptina_pll pll; -+ u16 reg_val; - int ret; - - pll.ext_clock = pdata->ext_clock; -@@ -274,18 +275,19 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor) - sensor->pix_clock = pdata->pix_clock; - - ret = mt9m032_write(client, MT9M032_PLL_CONFIG1, -- (pll.m << MT9M032_PLL_CONFIG1_MUL_SHIFT) -- | (pll.p1 - 1)); -- if (!ret) -- ret = mt9m032_write(client, MT9P031_PLL_CONFIG2, pll.n - 1); -+ (pll.m << MT9M032_PLL_CONFIG1_MUL_SHIFT) | -+ ((pll.n - 1) & MT9M032_PLL_CONFIG1_PREDIV_MASK)); - if (!ret) - ret = mt9m032_write(client, MT9P031_PLL_CONTROL, - MT9P031_PLL_CONTROL_PWRON | - MT9P031_PLL_CONTROL_USEPLL); - if (!ret) /* more reserved, Continuous, Master Mode */ - ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8006); -- if (!ret) /* Set 14-bit mode, select 7 divider */ -- ret = mt9m032_write(client, MT9M032_FORMATTER1, 0x111e); -+ if (!ret) { -+ reg_val = (pll.p1 == 6 ? MT9M032_FORMATTER1_PLL_P1_6 : 0) -+ | MT9M032_FORMATTER1_PARALLEL | 0x001e; /* 14-bit */ -+ ret = mt9m032_write(client, MT9M032_FORMATTER1, reg_val); -+ } - - return ret; - } --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch b/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch deleted file mode 100644 index c80e87641..000000000 --- a/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 1115becbb4875d62abb10f94a9510c81f376606f Mon Sep 17 00:00:00 2001 -From: Laurent Pinchart -Date: Wed, 26 Sep 2012 10:54:17 +0200 -Subject: [PATCH 3/6] mt9m032: Define MT9M032_READ_MODE1 bits - -Replace hardcoded values with #define's. - -Signed-off-by: Laurent Pinchart ---- - drivers/media/i2c/mt9m032.c | 22 +++++++++++++++++++++- - 1 file changed, 21 insertions(+), 1 deletion(-) - -diff --git a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c -index 30d755a..de150d3 100644 ---- a/drivers/media/i2c/mt9m032.c -+++ b/drivers/media/i2c/mt9m032.c -@@ -90,6 +90,24 @@ - #define MT9M032_PLL_CONFIG1_PREDIV_MASK 0x3f - #define MT9M032_PLL_CONFIG1_MUL_SHIFT 8 - #define MT9M032_READ_MODE1 0x1e -+#define MT9M032_READ_MODE1_OUTPUT_BAD_FRAMES (1 << 13) -+#define MT9M032_READ_MODE1_MAINTAIN_FRAME_RATE (1 << 12) -+#define MT9M032_READ_MODE1_XOR_LINE_VALID (1 << 11) -+#define MT9M032_READ_MODE1_CONT_LINE_VALID (1 << 10) -+#define MT9M032_READ_MODE1_INVERT_TRIGGER (1 << 9) -+#define MT9M032_READ_MODE1_SNAPSHOT (1 << 8) -+#define MT9M032_READ_MODE1_GLOBAL_RESET (1 << 7) -+#define MT9M032_READ_MODE1_BULB_EXPOSURE (1 << 6) -+#define MT9M032_READ_MODE1_INVERT_STROBE (1 << 5) -+#define MT9M032_READ_MODE1_STROBE_ENABLE (1 << 4) -+#define MT9M032_READ_MODE1_STROBE_START_TRIG1 (0 << 2) -+#define MT9M032_READ_MODE1_STROBE_START_EXP (1 << 2) -+#define MT9M032_READ_MODE1_STROBE_START_SHUTTER (2 << 2) -+#define MT9M032_READ_MODE1_STROBE_START_TRIG2 (3 << 2) -+#define MT9M032_READ_MODE1_STROBE_END_TRIG1 (0 << 0) -+#define MT9M032_READ_MODE1_STROBE_END_EXP (1 << 0) -+#define MT9M032_READ_MODE1_STROBE_END_SHUTTER (2 << 0) -+#define MT9M032_READ_MODE1_STROBE_END_TRIG2 (3 << 0) - #define MT9M032_READ_MODE2 0x20 - #define MT9M032_READ_MODE2_VFLIP_SHIFT 15 - #define MT9M032_READ_MODE2_HFLIP_SHIFT 14 -@@ -282,7 +300,9 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor) - MT9P031_PLL_CONTROL_PWRON | - MT9P031_PLL_CONTROL_USEPLL); - if (!ret) /* more reserved, Continuous, Master Mode */ -- ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8006); -+ ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8000 | -+ MT9M032_READ_MODE1_STROBE_START_EXP | -+ MT9M032_READ_MODE1_STROBE_END_SHUTTER); - if (!ret) { - reg_val = (pll.p1 == 6 ? MT9M032_FORMATTER1_PLL_P1_6 : 0) - | MT9M032_FORMATTER1_PARALLEL | 0x001e; /* 14-bit */ --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch b/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch deleted file mode 100644 index bcc436014..000000000 --- a/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch +++ /dev/null @@ -1,62 +0,0 @@ -From d3f188f38eaa34acf6375d5d88fe27971aae1170 Mon Sep 17 00:00:00 2001 -From: Laurent Pinchart -Date: Fri, 21 Dec 2012 20:34:06 +0100 -Subject: [PATCH 4/6] mt9p031: Use devm_* managed helpers - -Replace kzalloc and gpio_request_one by their managed equivalents. - -Signed-off-by: Laurent Pinchart ---- - drivers/media/i2c/mt9p031.c | 13 +++---------- - 1 file changed, 3 insertions(+), 10 deletions(-) - -diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c -index e328332..e0bad59 100644 ---- a/drivers/media/i2c/mt9p031.c -+++ b/drivers/media/i2c/mt9p031.c -@@ -927,7 +927,7 @@ static int mt9p031_probe(struct i2c_client *client, - return -EIO; - } - -- mt9p031 = kzalloc(sizeof(*mt9p031), GFP_KERNEL); -+ mt9p031 = devm_kzalloc(&client->dev, sizeof(*mt9p031), GFP_KERNEL); - if (mt9p031 == NULL) - return -ENOMEM; - -@@ -1001,8 +1001,8 @@ static int mt9p031_probe(struct i2c_client *client, - mt9p031->format.colorspace = V4L2_COLORSPACE_SRGB; - - if (pdata->reset != -1) { -- ret = gpio_request_one(pdata->reset, GPIOF_OUT_INIT_LOW, -- "mt9p031_rst"); -+ ret = devm_gpio_request_one(&client->dev, pdata->reset, -+ GPIOF_OUT_INIT_LOW, "mt9p031_rst"); - if (ret < 0) - goto done; - -@@ -1013,12 +1013,8 @@ static int mt9p031_probe(struct i2c_client *client, - - done: - if (ret < 0) { -- if (mt9p031->reset != -1) -- gpio_free(mt9p031->reset); -- - v4l2_ctrl_handler_free(&mt9p031->ctrls); - media_entity_cleanup(&mt9p031->subdev.entity); -- kfree(mt9p031); - } - - return ret; -@@ -1032,9 +1028,6 @@ static int mt9p031_remove(struct i2c_client *client) - v4l2_ctrl_handler_free(&mt9p031->ctrls); - v4l2_device_unregister_subdev(subdev); - media_entity_cleanup(&subdev->entity); -- if (mt9p031->reset != -1) -- gpio_free(mt9p031->reset); -- kfree(mt9p031); - - return 0; - } --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch b/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch deleted file mode 100644 index 57c80fd0e..000000000 --- a/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 9ff2bc0c9458f0eecde6d9b52a899fd2bb1dd3a3 Mon Sep 17 00:00:00 2001 -From: Laurent Pinchart -Date: Tue, 8 May 2012 15:10:36 +0200 -Subject: [PATCH 5/6] mt9p031: Add support for regulators - -Enable the regulators when powering the sensor up, and disable them when -powering it down. - -The regulators are mandatory. Boards that don't allow controlling the -sensor power lines must provide fixed voltage regulators. - -Signed-off-by: Laurent Pinchart ---- - drivers/media/i2c/mt9p031.c | 24 ++++++++++++++++++++++++ - 1 file changed, 24 insertions(+) - -diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c -index e0bad59..ecf4492 100644 ---- a/drivers/media/i2c/mt9p031.c -+++ b/drivers/media/i2c/mt9p031.c -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -121,6 +122,10 @@ struct mt9p031 { - struct mutex power_lock; /* lock to protect power_count */ - int power_count; - -+ struct regulator *vaa; -+ struct regulator *vdd; -+ struct regulator *vdd_io; -+ - enum mt9p031_model model; - struct aptina_pll pll; - int reset; -@@ -264,6 +269,11 @@ static int mt9p031_power_on(struct mt9p031 *mt9p031) - usleep_range(1000, 2000); - } - -+ /* Bring up the supplies */ -+ regulator_enable(mt9p031->vdd); -+ regulator_enable(mt9p031->vdd_io); -+ regulator_enable(mt9p031->vaa); -+ - /* Emable clock */ - if (mt9p031->pdata->set_xclk) - mt9p031->pdata->set_xclk(&mt9p031->subdev, -@@ -285,6 +295,10 @@ static void mt9p031_power_off(struct mt9p031 *mt9p031) - usleep_range(1000, 2000); - } - -+ regulator_disable(mt9p031->vaa); -+ regulator_disable(mt9p031->vdd_io); -+ regulator_disable(mt9p031->vdd); -+ - if (mt9p031->pdata->set_xclk) - mt9p031->pdata->set_xclk(&mt9p031->subdev, 0); - } -@@ -937,6 +951,16 @@ static int mt9p031_probe(struct i2c_client *client, - mt9p031->model = did->driver_data; - mt9p031->reset = -1; - -+ mt9p031->vaa = devm_regulator_get(&client->dev, "vaa"); -+ mt9p031->vdd = devm_regulator_get(&client->dev, "vdd"); -+ mt9p031->vdd_io = devm_regulator_get(&client->dev, "vdd_io"); -+ -+ if (IS_ERR(mt9p031->vaa) || IS_ERR(mt9p031->vdd) || -+ IS_ERR(mt9p031->vdd_io)) { -+ dev_err(&client->dev, "Unable to get regulators\n"); -+ return -ENODEV; -+ } -+ - v4l2_ctrl_handler_init(&mt9p031->ctrls, ARRAY_SIZE(mt9p031_ctrls) + 6); - - v4l2_ctrl_new_std(&mt9p031->ctrls, &mt9p031_ctrl_ops, --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch b/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch deleted file mode 100644 index fc8d583e8..000000000 --- a/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 6cd62f5ae305142c0490e80caa04f99f00029b68 Mon Sep 17 00:00:00 2001 -From: Laurent Pinchart -Date: Fri, 21 Dec 2012 20:11:55 +0100 -Subject: [PATCH 6/6] mt9p031: Use the common clock framework - -Configure the device external clock using the common clock framework -instead of a board code callback function. - -Signed-off-by: Laurent Pinchart -Acked-by: Sakari Ailus ---- - drivers/media/i2c/mt9p031.c | 21 ++++++++++++++------- - include/media/mt9p031.h | 2 -- - 2 files changed, 14 insertions(+), 9 deletions(-) - -diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c -index ecf4492..28cf95b 100644 ---- a/drivers/media/i2c/mt9p031.c -+++ b/drivers/media/i2c/mt9p031.c -@@ -12,6 +12,7 @@ - * published by the Free Software Foundation. - */ - -+#include - #include - #include - #include -@@ -122,6 +123,7 @@ struct mt9p031 { - struct mutex power_lock; /* lock to protect power_count */ - int power_count; - -+ struct clk *clk; - struct regulator *vaa; - struct regulator *vdd; - struct regulator *vdd_io; -@@ -200,7 +202,7 @@ static int mt9p031_reset(struct mt9p031 *mt9p031) - 0); - } - --static int mt9p031_pll_setup(struct mt9p031 *mt9p031) -+static int mt9p031_clk_setup(struct mt9p031 *mt9p031) - { - static const struct aptina_pll_limits limits = { - .ext_clock_min = 6000000, -@@ -221,6 +223,12 @@ static int mt9p031_pll_setup(struct mt9p031 *mt9p031) - struct i2c_client *client = v4l2_get_subdevdata(&mt9p031->subdev); - struct mt9p031_platform_data *pdata = mt9p031->pdata; - -+ mt9p031->clk = devm_clk_get(&client->dev, NULL); -+ if (IS_ERR(mt9p031->clk)) -+ return PTR_ERR(mt9p031->clk); -+ -+ clk_set_rate(mt9p031->clk, pdata->ext_freq); -+ - mt9p031->pll.ext_clock = pdata->ext_freq; - mt9p031->pll.pix_clock = pdata->target_freq; - -@@ -275,9 +283,8 @@ static int mt9p031_power_on(struct mt9p031 *mt9p031) - regulator_enable(mt9p031->vaa); - - /* Emable clock */ -- if (mt9p031->pdata->set_xclk) -- mt9p031->pdata->set_xclk(&mt9p031->subdev, -- mt9p031->pdata->ext_freq); -+ if (mt9p031->clk) -+ clk_prepare_enable(mt9p031->clk); - - /* Now RESET_BAR must be high */ - if (mt9p031->reset != -1) { -@@ -299,8 +306,8 @@ static void mt9p031_power_off(struct mt9p031 *mt9p031) - regulator_disable(mt9p031->vdd_io); - regulator_disable(mt9p031->vdd); - -- if (mt9p031->pdata->set_xclk) -- mt9p031->pdata->set_xclk(&mt9p031->subdev, 0); -+ if (mt9p031->clk) -+ clk_disable_unprepare(mt9p031->clk); - } - - static int __mt9p031_set_power(struct mt9p031 *mt9p031, bool on) -@@ -1033,7 +1040,7 @@ static int mt9p031_probe(struct i2c_client *client, - mt9p031->reset = pdata->reset; - } - -- ret = mt9p031_pll_setup(mt9p031); -+ ret = mt9p031_clk_setup(mt9p031); - - done: - if (ret < 0) { -diff --git a/include/media/mt9p031.h b/include/media/mt9p031.h -index 0c97b19..b1e63f2 100644 ---- a/include/media/mt9p031.h -+++ b/include/media/mt9p031.h -@@ -5,13 +5,11 @@ struct v4l2_subdev; - - /* - * struct mt9p031_platform_data - MT9P031 platform data -- * @set_xclk: Clock frequency set callback - * @reset: Chip reset GPIO (set to -1 if not used) - * @ext_freq: Input clock frequency - * @target_freq: Pixel clock frequency - */ - struct mt9p031_platform_data { -- int (*set_xclk)(struct v4l2_subdev *subdev, int hz); - int reset; - int ext_freq; - int target_freq; --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch b/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch deleted file mode 100644 index 34d60349b..000000000 --- a/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 6ac98647956cbff190954b4cac6bd71fdbb8647b Mon Sep 17 00:00:00 2001 -From: Robert Nelson -Date: Wed, 23 Mar 2011 08:37:54 -0500 -Subject: [PATCH 1/5] meego: modedb add Toshiba LTA070B220F 800x480 support - - from http://wiki.meego.com/ARM/Meego_on_Beagleboard_from_scratch - -Signed-off-by: Robert Nelson ---- - drivers/video/modedb.c | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c -index 5b686de..69ad1ec 100644 ---- a/drivers/video/modedb.c -+++ b/drivers/video/modedb.c -@@ -293,6 +293,10 @@ static const struct fb_videomode modedb[] = { - /* 864x480 @ 60 Hz, 35.15 kHz hsync */ - { NULL, 60, 864, 480, 27777, 1, 1, 1, 1, 0, 0, - 0, FB_VMODE_NONINTERLACED }, -+ -+ /* 800x480 @ 60 Hz, Toshiba LTA070B220F 7 inch LCD */ -+ { NULL, 60, 800, 480, 32787, 48, 80, 33, 31, 32, 2, -+ FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED }, - }; - - #ifdef CONFIG_FB_MODE_HELPERS --- -1.7.7.6 - diff --git a/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch b/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch deleted file mode 100644 index ce4df825b..000000000 --- a/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch +++ /dev/null @@ -1,217 +0,0 @@ -From e989473bea15beef8d480b822a619e7b8fca860c Mon Sep 17 00:00:00 2001 -From: "Manjunathappa, Prakash" -Date: Mon, 1 Aug 2011 18:25:11 +0530 -Subject: [PATCH 2/5] backlight: Add TLC59108 backlight control driver - -This patch adds support for I2C configurable TLC59108 backlight -control driver. - -Signed-off-by: Manjunathappa, Prakash -Signed-off-by: Vaibhav Hiremath ---- - drivers/video/backlight/Kconfig | 8 ++ - drivers/video/backlight/Makefile | 1 + - drivers/video/backlight/tlc59108.c | 160 ++++++++++++++++++++++++++++++++++++ - 3 files changed, 169 insertions(+) - create mode 100644 drivers/video/backlight/tlc59108.c - -diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig -index db10d01..04a2275 100644 ---- a/drivers/video/backlight/Kconfig -+++ b/drivers/video/backlight/Kconfig -@@ -418,6 +418,14 @@ config BACKLIGHT_AS3711 - If you have an Austrian Microsystems AS3711 say Y to enable the - backlight driver. - -+config BACKLIGHT_TLC59108 -+ tristate "TLC59108 LCD Backlight Driver" -+ depends on I2C && BACKLIGHT_CLASS_DEVICE -+ default n -+ help -+ If you have an LCD Panel with backlight control via TLC59108, -+ say Y to enable its LCD control driver. -+ - endif # BACKLIGHT_CLASS_DEVICE - - endif # BACKLIGHT_LCD_SUPPORT -diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile -index 96c4d62..3687852 100644 ---- a/drivers/video/backlight/Makefile -+++ b/drivers/video/backlight/Makefile -@@ -41,6 +41,7 @@ obj-$(CONFIG_BACKLIGHT_LP855X) += lp855x_bl.o - obj-$(CONFIG_BACKLIGHT_LP8788) += lp8788_bl.o - obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o - obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o -+obj-$(CONFIG_BACKLIGHT_TLC59108) += tlc59108.o - obj-$(CONFIG_BACKLIGHT_OT200) += ot200_bl.o - obj-$(CONFIG_BACKLIGHT_PANDORA) += pandora_bl.o - obj-$(CONFIG_BACKLIGHT_PCF50633) += pcf50633-backlight.o -diff --git a/drivers/video/backlight/tlc59108.c b/drivers/video/backlight/tlc59108.c -new file mode 100644 -index 0000000..4f4ea34 ---- /dev/null -+++ b/drivers/video/backlight/tlc59108.c -@@ -0,0 +1,160 @@ -+/* -+ * ti81xxhdmi_tlc59108.c -+ * -+ * Copyright (C) 2011 Texas Instruments -+ * Author: Senthil Natarajan -+ * -+ * tlc59108 HDMI Driver -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published by -+ * the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ * more details. -+ * -+ * You should have received a copy of the GNU General Public License along with -+ * this program. If not, see . -+ * History: -+ * -+ * Senthil Natarajan July 2011 I2C driver for tlc59108 -+ * backlight control -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#define tlc59108_MODULE_NAME "tlc59108" -+#define TLC59108_MODE1 0x00 -+#define TLC59108_PWM2 0x04 -+#define TLC59108_LEDOUT0 0x0c -+#define TLC59108_LEDOUT1 0x0d -+#define TLC59108_MAX_BRIGHTNESS 0xFF -+ -+struct tlc59108_bl { -+ struct i2c_client *client; -+ struct backlight_device *bl; -+}; -+ -+static void tlc59108_bl_set_backlight(struct tlc59108_bl *data, int brightness) -+{ -+ /* Set Mode1 Register */ -+ i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00); -+ -+ /* Set LEDOUT0 Register */ -+ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x21); -+ -+ /* Set Backlight Duty Cycle*/ -+ i2c_smbus_write_byte_data(data->client, TLC59108_PWM2, -+ brightness & 0xff); -+} -+ -+static int tlc59108_bl_get_brightness(struct backlight_device *dev) -+{ -+ struct backlight_properties *props = &dev->props; -+ -+ return props->brightness; -+} -+ -+static int tlc59108_bl_update_status(struct backlight_device *dev) -+{ -+ struct backlight_properties *props = &dev->props; -+ struct tlc59108_bl *data = dev_get_drvdata(&dev->dev); -+ int brightness = props->brightness; -+ -+ tlc59108_bl_set_backlight(data, brightness); -+ -+ return 0; -+} -+ -+static const struct backlight_ops bl_ops = { -+ .get_brightness = tlc59108_bl_get_brightness, -+ .update_status = tlc59108_bl_update_status, -+}; -+ -+static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id) -+{ -+ struct backlight_properties props; -+ struct tlc59108_bl *data = kzalloc(sizeof(struct tlc59108_bl), -+ GFP_KERNEL); -+ int ret = 0; -+ -+ if (!data) -+ return -ENOMEM; -+ -+ i2c_set_clientdata(c, data); -+ data->client = c; -+ -+ memset(&props, 0, sizeof(struct backlight_properties)); -+ props.max_brightness = TLC59108_MAX_BRIGHTNESS; -+ props.type = BACKLIGHT_RAW; -+ data->bl = backlight_device_register("tlc59108-bl", &c->dev, data, -+ &bl_ops, &props); -+ if (IS_ERR(data->bl)) { -+ ret = PTR_ERR(data->bl); -+ goto err_reg; -+ } -+ -+ data->bl->props.brightness = TLC59108_MAX_BRIGHTNESS; -+ -+ backlight_update_status(data->bl); -+ -+ return 0; -+ -+err_reg: -+ data->bl = NULL; -+ kfree(data); -+ return ret; -+} -+ -+static int tlc59108_remove(struct i2c_client *c) -+{ -+ struct tlc59108_bl *data = i2c_get_clientdata(c); -+ -+ backlight_device_unregister(data->bl); -+ data->bl = NULL; -+ -+ kfree(data); -+ -+ return 0; -+} -+ -+/* I2C Device ID table */ -+static const struct i2c_device_id tlc59108_id[] = { -+ { "tlc59108", 0 }, -+ { } -+}; -+MODULE_DEVICE_TABLE(i2c, tlc59108_id); -+ -+/* I2C driver data */ -+static struct i2c_driver tlc59108_driver = { -+ .driver = { -+ .owner = THIS_MODULE, -+ .name = tlc59108_MODULE_NAME, -+ }, -+ .probe = tlc59108_probe, -+ .remove = tlc59108_remove, -+ .id_table = tlc59108_id, -+}; -+ -+static int __init tlc59108_init(void) -+{ -+ return i2c_add_driver(&tlc59108_driver); -+} -+ -+static void __exit tlc59108_exit(void) -+{ -+ i2c_del_driver(&tlc59108_driver); -+} -+ -+module_init(tlc59108_init); -+module_exit(tlc59108_exit); -+ -+MODULE_DESCRIPTION("LCD/Backlight control for TLC59108"); -+MODULE_AUTHOR("Senthil Natarajan "); -+MODULE_LICENSE("GPL v2"); --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch b/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch deleted file mode 100644 index 5c9659b6b..000000000 --- a/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch +++ /dev/null @@ -1,124 +0,0 @@ -From 40cbddde06a9f0e1845810b904502f922fc3288f Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Fri, 27 Apr 2012 21:30:00 +0200 -Subject: [PATCH 3/5] tlc59108: adjust for beagleboard+uLCD7 - -Signed-off-by: Koen Kooi ---- - drivers/video/backlight/tlc59108.c | 46 ++++++++++++++++++++++++----------- - 1 files changed, 31 insertions(+), 15 deletions(-) - -diff --git a/drivers/video/backlight/tlc59108.c b/drivers/video/backlight/tlc59108.c -index 4f4ea34..40a21e7 100644 ---- a/drivers/video/backlight/tlc59108.c -+++ b/drivers/video/backlight/tlc59108.c -@@ -29,9 +29,16 @@ - #include - #include - --#define tlc59108_MODULE_NAME "tlc59108" - #define TLC59108_MODE1 0x00 --#define TLC59108_PWM2 0x04 -+#define TLC59108_MODE2 0x01 -+#define TLC59108_PWM0 0x02 -+#define TLC59108_PWM1 0x03 -+#define TLC59108_PWM2 0x04 -+#define TLC59108_PWM3 0x05 -+#define TLC59108_PWM4 0x06 -+#define TLC59108_PWM5 0x07 -+#define TLC59108_PWM6 0x08 -+#define TLC59108_PWM7 0x09 - #define TLC59108_LEDOUT0 0x0c - #define TLC59108_LEDOUT1 0x0d - #define TLC59108_MAX_BRIGHTNESS 0xFF -@@ -43,15 +50,9 @@ struct tlc59108_bl { - - static void tlc59108_bl_set_backlight(struct tlc59108_bl *data, int brightness) - { -- /* Set Mode1 Register */ -- i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00); -- -- /* Set LEDOUT0 Register */ -- i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x21); -- - /* Set Backlight Duty Cycle*/ - i2c_smbus_write_byte_data(data->client, TLC59108_PWM2, -- brightness & 0xff); -+ 0xff - brightness ); - } - - static int tlc59108_bl_get_brightness(struct backlight_device *dev) -@@ -65,8 +66,18 @@ static int tlc59108_bl_update_status(struct backlight_device *dev) - { - struct backlight_properties *props = &dev->props; - struct tlc59108_bl *data = dev_get_drvdata(&dev->dev); -+ - int brightness = props->brightness; - -+ if (dev->props.state & BL_CORE_FBBLANK) { -+ brightness = 0; -+ /* Set LEDOUT0 Register */ -+ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x10); -+ } else { -+ /* Set LEDOUT0 Register */ -+ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x30); -+ } -+ - tlc59108_bl_set_backlight(data, brightness); - - return 0; -@@ -77,7 +88,7 @@ static const struct backlight_ops bl_ops = { - .update_status = tlc59108_bl_update_status, - }; - --static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id) -+static int __devinit tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id) - { - struct backlight_properties props; - struct tlc59108_bl *data = kzalloc(sizeof(struct tlc59108_bl), -@@ -104,6 +115,11 @@ static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id) - - backlight_update_status(data->bl); - -+ i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00); -+ i2c_smbus_write_byte_data(data->client, TLC59108_PWM2, 0x80); -+ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT1, 0x05); -+ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT1, 0x15); -+ - return 0; - - err_reg: -@@ -125,7 +141,7 @@ static int tlc59108_remove(struct i2c_client *c) - } - - /* I2C Device ID table */ --static const struct i2c_device_id tlc59108_id[] = { -+static struct i2c_device_id tlc59108_id[] = { - { "tlc59108", 0 }, - { } - }; -@@ -134,12 +150,12 @@ MODULE_DEVICE_TABLE(i2c, tlc59108_id); - /* I2C driver data */ - static struct i2c_driver tlc59108_driver = { - .driver = { -- .owner = THIS_MODULE, -- .name = tlc59108_MODULE_NAME, -+ .owner = THIS_MODULE, -+ .name = "tlc59108" - }, -+ .id_table = tlc59108_id, - .probe = tlc59108_probe, - .remove = tlc59108_remove, -- .id_table = tlc59108_id, - }; - - static int __init tlc59108_init(void) -@@ -157,4 +173,4 @@ module_exit(tlc59108_exit); - - MODULE_DESCRIPTION("LCD/Backlight control for TLC59108"); - MODULE_AUTHOR("Senthil Natarajan "); --MODULE_LICENSE("GPL v2"); -+MODULE_LICENSE("GPL"); --- -1.7.7.6 - diff --git a/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch b/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch deleted file mode 100644 index d17942081..000000000 --- a/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 81ff7627ad0d958a5c156cb7d880af8707e14f47 Mon Sep 17 00:00:00 2001 -From: Alexander Holler -Date: Wed, 4 Jul 2012 00:03:04 +0200 -Subject: [PATCH 4/5] zeroMAP: Open your eyes! - -Signed-off-by: Alexander Holler ---- - kernel/printk.c | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -diff --git a/kernel/printk.c b/kernel/printk.c -index 22e070f..3678740 100644 ---- a/kernel/printk.c -+++ b/kernel/printk.c -@@ -1759,6 +1759,13 @@ static int __init console_setup(char *str) - char *s, *options, *brl_options = NULL; - int idx; - -+#ifdef CONFIG_SERIAL_OMAP -+ if (!strncmp(str, "tty0", 4) && '0' <= str[4] && '9' >= str[4]) { -+ str[3] = 'O'; -+ pr_warn("We are opening your eyes, assuming you want to use an OMAP based serial driver and not a zeroMAP based one! ;)\n"); -+ pr_warn("Which means 'tty0%s' was changed to 'ttyO%s' automagically for your pleasure.\n", str+4, str+4); -+ } -+#endif - #ifdef CONFIG_A11Y_BRAILLE_CONSOLE - if (!memcmp(str, "brl,", 4)) { - brl_options = ""; --- -1.7.7.6 - diff --git a/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch b/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch deleted file mode 100644 index ffb5ffb57..000000000 --- a/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch +++ /dev/null @@ -1,29 +0,0 @@ -From f2ec859cb99e6137d78b457f8a6693e69e3b1f33 Mon Sep 17 00:00:00 2001 -From: Robert Nelson -Date: Thu, 24 Jan 2013 09:43:51 -0600 -Subject: [PATCH 5/5] ARM: OMAP: Beagle: use TWL4030 generic reset script - -Enable TWL_COMMON_PDATA_POWER such that OMAP3530 revisions of the -Beagle (Bx/Cx) will not hang on reboot when running at 125 Mhz. - -Signed-off-by: Robert Nelson ---- - arch/arm/mach-omap2/board-omap3beagle.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 5b57885..9a2c80b 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -831,7 +831,7 @@ static int __init omap3_beagle_i2c_init(void) - { - omap3_pmic_get_config(&beagle_twldata, - TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_MADC | -- TWL_COMMON_PDATA_AUDIO, -+ TWL_COMMON_PDATA_AUDIO | TWL_COMMON_PDATA_POWER, - TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2); - - beagle_twldata.vpll2->constraints.name = "VDVI"; --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch b/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch deleted file mode 100644 index 56879cbaf..000000000 --- a/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 40d889a09a05765138f3b737becadfe927c9b004 Mon Sep 17 00:00:00 2001 -From: Robert Nelson -Date: Tue, 19 Mar 2013 13:40:50 -0500 -Subject: [PATCH 6/6] DSS2: use DSI PLL for DPI with OMAP3 - -Signed-off-by: Robert Nelson ---- - drivers/video/omap2/dss/dpi.c | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c -index 757b57f..12ed14f 100644 ---- a/drivers/video/omap2/dss/dpi.c -+++ b/drivers/video/omap2/dss/dpi.c -@@ -58,10 +58,6 @@ static struct platform_device *dpi_get_dsidev(enum omap_channel channel) - */ - switch (omapdss_get_version()) { - case OMAPDSS_VER_OMAP24xx: -- case OMAPDSS_VER_OMAP34xx_ES1: -- case OMAPDSS_VER_OMAP34xx_ES3: -- case OMAPDSS_VER_OMAP3630: -- case OMAPDSS_VER_AM35xx: - return NULL; - - case OMAPDSS_VER_OMAP4430_ES1: --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch b/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch deleted file mode 100644 index 44a1ae367..000000000 --- a/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch +++ /dev/null @@ -1,63 +0,0 @@ -From c070885eaf883884f89a77e2f71def5b447f914b Mon Sep 17 00:00:00 2001 -From: Robert Nelson -Date: Tue, 11 Dec 2012 06:25:27 -0600 -Subject: [PATCH 01/10] Beagle: expansion: add buddy param for expansionboard - names - -Signed-off-by: Robert Nelson ---- - arch/arm/mach-omap2/board-omap3beagle.c | 17 +++++++++++++++++ - 1 file changed, 17 insertions(+) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index c3558f9..29d549c 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -191,6 +192,8 @@ static void __init omap3_beagle_init_rev(void) - } - } - -+char expansionboard_name[16]; -+ - static struct mtd_partition omap3beagle_nand_partitions[] = { - /* All the partition sizes are listed in terms of NAND block size */ - { -@@ -470,6 +473,18 @@ static struct omap_board_mux board_mux[] __initdata = { - }; - #endif - -+static int __init expansionboard_setup(char *str) -+{ -+ if (!machine_is_omap3_beagle()) -+ return 0; -+ -+ if (!str) -+ return -EINVAL; -+ strncpy(expansionboard_name, str, 16); -+ pr_info("Beagle expansionboard: %s\n", expansionboard_name); -+ return 0; -+} -+ - static int __init beagle_opp_init(void) - { - int r = 0; -@@ -559,6 +574,8 @@ static void __init omap3_beagle_init(void) - pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup)); - } - -+early_param("buddy", expansionboard_setup); -+ - MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") - /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ - .atag_offset = 0x100, --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch b/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch deleted file mode 100644 index fff62431e..000000000 --- a/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch +++ /dev/null @@ -1,242 +0,0 @@ -From e71075202707e044a28604bd929fd6f7a89adeae Mon Sep 17 00:00:00 2001 -From: Robert Nelson -Date: Mon, 21 Jan 2013 11:47:02 -0600 -Subject: [PATCH 02/10] Beagle: expansion: add zippy - -v2: add #include -build fix from Pantelis Antoniou - -Signed-off-by: Robert Nelson ---- - arch/arm/mach-omap2/board-omap3beagle.c | 164 +++++++++++++++++++++++++++++-- - 1 file changed, 158 insertions(+), 6 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 4e6e767..b3685ed 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -37,6 +37,7 @@ - #include - - #include -+#include - #include - - #include -@@ -195,6 +196,86 @@ static void __init omap3_beagle_init_rev(void) - - char expansionboard_name[16]; - -+enum { -+ EXPANSION_MMC_NONE = 0, -+ EXPANSION_MMC_ZIPPY, -+ EXPANSION_MMC_WIFI, -+}; -+ -+enum { -+ EXPANSION_I2C_NONE = 0, -+ EXPANSION_I2C_ZIPPY, -+}; -+ -+static struct { -+ int mmc_settings; -+ int i2c_settings; -+} expansion_config = { -+ .mmc_settings = EXPANSION_MMC_NONE, -+ .i2c_settings = EXPANSION_I2C_NONE, -+}; -+ -+//rcn-ee: this is just a fake regulator, the zippy hardware provides 3.3/1.8 with jumper.. -+static struct fixed_voltage_config beagle_vzippy = { -+ .supply_name = "vzippy", -+ .microvolts = 3300000, /* 3.3V */ -+ .startup_delay = 70000, /* 70ms */ -+ .enable_high = 1, -+ .enabled_at_boot = 0, -+ .init_data = &beagle_vmmc2, -+}; -+ -+static struct platform_device omap_zippy_device = { -+ .name = "reg-fixed-voltage", -+ .id = 1, -+ .dev = { -+ .platform_data = &beagle_vzippy, -+ }, -+}; -+ -+#define OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP 141 -+#define OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD 162 -+ -+#if IS_ENABLED(CONFIG_ENC28J60) -+#include -+#include -+ -+#define OMAP3BEAGLE_GPIO_ENC28J60_IRQ 157 -+ -+static struct omap2_mcspi_device_config enc28j60_spi_chip_info = { -+ .turbo_mode = 0, -+}; -+ -+static struct spi_board_info omap3beagle_zippy_spi_board_info[] __initdata = { -+ { -+ .modalias = "enc28j60", -+ .bus_num = 4, -+ .chip_select = 0, -+ .max_speed_hz = 20000000, -+ .controller_data = &enc28j60_spi_chip_info, -+ }, -+}; -+ -+static void __init omap3beagle_enc28j60_init(void) -+{ -+ if ((gpio_request(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, "ENC28J60_IRQ") == 0) && -+ (gpio_direction_input(OMAP3BEAGLE_GPIO_ENC28J60_IRQ) == 0)) { -+ gpio_export(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, 0); -+ omap3beagle_zippy_spi_board_info[0].irq = gpio_to_irq(OMAP3BEAGLE_GPIO_ENC28J60_IRQ); -+ irq_set_irq_type(omap3beagle_zippy_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING); -+ } else { -+ pr_err("Beagle expansionboard: could not obtain gpio for ENC28J60_IRQ\n"); -+ return; -+ } -+ -+ spi_register_board_info(omap3beagle_zippy_spi_board_info, -+ ARRAY_SIZE(omap3beagle_zippy_spi_board_info)); -+} -+ -+#else -+static inline void __init omap3beagle_enc28j60_init(void) { return; } -+#endif -+ - static struct mtd_partition omap3beagle_nand_partitions[] = { - /* All the partition sizes are listed in terms of NAND block size */ - { -@@ -271,6 +352,23 @@ static struct omap2_hsmmc_info mmc[] = { - {} /* Terminator */ - }; - -+static struct omap2_hsmmc_info mmc_zippy[] = { -+ { -+ .mmc = 1, -+ .caps = MMC_CAP_4_BIT_DATA, -+ .gpio_wp = -EINVAL, -+ .deferred = true, -+ }, -+ { -+ .mmc = 2, -+ .caps = MMC_CAP_4_BIT_DATA, -+ .gpio_wp = OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP, -+ .gpio_cd = OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, -+ .transceiver = true, -+ .deferred = true, -+ }, -+ {} /* Terminator */ -+}; - static struct regulator_consumer_supply beagle_vmmc1_supply[] = { - REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"), - }; -@@ -301,10 +399,21 @@ static int beagle_twl_gpio_setup(struct device *dev, - { - int r; - -- mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp; -- /* gpio + 0 is "mmc0_cd" (input/IRQ) */ -- mmc[0].gpio_cd = gpio + 0; -- omap_hsmmc_late_init(mmc); -+ switch (expansion_config.mmc_settings) { -+ case EXPANSION_MMC_ZIPPY: -+ mmc_zippy[0].gpio_wp = beagle_config.mmc1_gpio_wp; -+ /* gpio + 0 is "mmc0_cd" (input/IRQ) */ -+ mmc_zippy[0].gpio_cd = gpio + 0; -+ -+ omap_hsmmc_late_init(mmc_zippy); -+ break; -+ default: -+ mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp; -+ /* gpio + 0 is "mmc0_cd" (input/IRQ) */ -+ mmc[0].gpio_cd = gpio + 0; -+ -+ omap_hsmmc_late_init(mmc); -+ } - - /* - * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active -@@ -396,6 +505,14 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = { - }, - }; - -+static struct i2c_board_info __initdata zippy_i2c2_rtc[] = { -+#if defined(CONFIG_RTC_DRV_DS1307) || defined(CONFIG_RTC_DRV_DS1307_MODULE) -+ { -+ I2C_BOARD_INFO("ds1307", 0x68), -+ }, -+#endif -+}; -+ - static int __init omap3_beagle_i2c_init(void) - { - omap3_pmic_get_config(&beagle_twldata, -@@ -406,6 +523,15 @@ static int __init omap3_beagle_i2c_init(void) - beagle_twldata.vpll2->constraints.name = "VDVI"; - - omap3_pmic_init("twl4030", &beagle_twldata); -+ -+ switch (expansion_config.i2c_settings) { -+ case EXPANSION_I2C_ZIPPY: -+ omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc)); -+ break; -+ default: -+ omap_register_i2c_bus(2, 400, NULL, 0); -+ } -+ - /* Bus 3 is attached to the DVI port where devices like the pico DLP - * projector don't work reliably with 400kHz */ - omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom)); -@@ -548,10 +674,30 @@ static void __init omap3_beagle_init(void) - omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); - omap3_beagle_init_rev(); - -+ if (!strcmp(expansionboard_name, "zippy")) -+ { -+ pr_info("Beagle expansionboard: initializing zippy mmc\n"); -+ platform_device_register(&omap_zippy_device); -+ -+ expansion_config.i2c_settings = EXPANSION_I2C_ZIPPY; -+ expansion_config.mmc_settings = EXPANSION_MMC_ZIPPY; -+ -+ omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP, OMAP_PIN_INPUT); -+ omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT); -+ } -+ - if (gpio_is_valid(beagle_config.mmc1_gpio_wp)) - omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT); -- mmc[0].caps = beagle_config.mmc_caps; -- omap_hsmmc_init(mmc); -+ -+ switch (expansion_config.mmc_settings) { -+ case EXPANSION_MMC_ZIPPY: -+ mmc_zippy[0].caps = beagle_config.mmc_caps; -+ omap_hsmmc_init(mmc_zippy); -+ break; -+ default: -+ mmc[0].caps = beagle_config.mmc_caps; -+ omap_hsmmc_init(mmc); -+ } - - omap3_beagle_i2c_init(); - -@@ -566,6 +712,12 @@ static void __init omap3_beagle_init(void) - omap_sdrc_init(mt46h32m32lf6_sdrc_params, - mt46h32m32lf6_sdrc_params); - -+ if (!strcmp(expansionboard_name, "zippy")) -+ { -+ pr_info("Beagle expansionboard: initializing enc28j60\n"); -+ omap3beagle_enc28j60_init(); -+ } -+ - usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); - usb_musb_init(NULL); - --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch b/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch deleted file mode 100644 index b569f92d6..000000000 --- a/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 45bed17e65e1a83f753896e250f3458654dcb229 Mon Sep 17 00:00:00 2001 -From: Robert Nelson -Date: Tue, 11 Dec 2012 06:32:15 -0600 -Subject: [PATCH 03/10] Beagle: expansion: add zippy2 - -Signed-off-by: Robert Nelson ---- - arch/arm/mach-omap2/board-omap3beagle.c | 48 ++++++++++++++++++++++++++++++- - 1 file changed, 47 insertions(+), 1 deletion(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index b3685ed..74da505 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -276,6 +276,46 @@ static void __init omap3beagle_enc28j60_init(void) - static inline void __init omap3beagle_enc28j60_init(void) { return; } - #endif - -+#if IS_ENABLED(CONFIG_KS8851) -+#include -+#include -+ -+#define OMAP3BEAGLE_GPIO_KS8851_IRQ 157 -+ -+static struct omap2_mcspi_device_config ks8851_spi_chip_info = { -+ .turbo_mode = 0, -+}; -+ -+static struct spi_board_info omap3beagle_zippy2_spi_board_info[] __initdata = { -+ { -+ .modalias = "ks8851", -+ .bus_num = 4, -+ .chip_select = 0, -+ .max_speed_hz = 36000000, -+ .controller_data = &ks8851_spi_chip_info, -+ }, -+}; -+ -+static void __init omap3beagle_ks8851_init(void) -+{ -+ if ((gpio_request(OMAP3BEAGLE_GPIO_KS8851_IRQ, "KS8851_IRQ") == 0) && -+ (gpio_direction_input(OMAP3BEAGLE_GPIO_KS8851_IRQ) == 0)) { -+ gpio_export(OMAP3BEAGLE_GPIO_KS8851_IRQ, 0); -+ omap3beagle_zippy2_spi_board_info[0].irq = gpio_to_irq(OMAP3BEAGLE_GPIO_KS8851_IRQ); -+ irq_set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING); -+ } else { -+ pr_err("Beagle expansionboard: could not obtain gpio for KS8851_IRQ\n"); -+ return; -+ } -+ -+ spi_register_board_info(omap3beagle_zippy2_spi_board_info, -+ ARRAY_SIZE(omap3beagle_zippy2_spi_board_info)); -+} -+ -+#else -+static inline void __init omap3beagle_ks8851_init(void) { return; } -+#endif -+ - static struct mtd_partition omap3beagle_nand_partitions[] = { - /* All the partition sizes are listed in terms of NAND block size */ - { -@@ -674,7 +714,7 @@ static void __init omap3_beagle_init(void) - omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); - omap3_beagle_init_rev(); - -- if (!strcmp(expansionboard_name, "zippy")) -+ if ((!strcmp(expansionboard_name, "zippy")) || (!strcmp(expansionboard_name, "zippy2"))) - { - pr_info("Beagle expansionboard: initializing zippy mmc\n"); - platform_device_register(&omap_zippy_device); -@@ -718,6 +758,12 @@ static void __init omap3_beagle_init(void) - omap3beagle_enc28j60_init(); - } - -+ if (!strcmp(expansionboard_name, "zippy2")) -+ { -+ pr_info("Beagle expansionboard: initializing ks_8851\n"); -+ omap3beagle_ks8851_init(); -+ } -+ - usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); - usb_musb_init(NULL); - --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch b/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch deleted file mode 100644 index 08ace67a1..000000000 --- a/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 4d9b4e5795e322ed3efed9b8402f604e2e53cc6f Mon Sep 17 00:00:00 2001 -From: Robert Nelson -Date: Tue, 11 Dec 2012 06:33:24 -0600 -Subject: [PATCH 04/10] Beagle: expansion: add trainer - -Signed-off-by: Robert Nelson ---- - arch/arm/mach-omap2/board-omap3beagle.c | 31 +++++++++++++++++++++++++++++++ - 1 file changed, 31 insertions(+) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 74da505..b5ed547 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -764,6 +764,37 @@ static void __init omap3_beagle_init(void) - omap3beagle_ks8851_init(); - } - -+ if (!strcmp(expansionboard_name, "trainer")) -+ { -+ pr_info("Beagle expansionboard: exporting GPIOs 130-141,162 to userspace\n"); -+ gpio_request(130, "sysfs"); -+ gpio_export(130, 1); -+ gpio_request(131, "sysfs"); -+ gpio_export(131, 1); -+ gpio_request(132, "sysfs"); -+ gpio_export(132, 1); -+ gpio_request(133, "sysfs"); -+ gpio_export(133, 1); -+ gpio_request(134, "sysfs"); -+ gpio_export(134, 1); -+ gpio_request(135, "sysfs"); -+ gpio_export(135, 1); -+ gpio_request(136, "sysfs"); -+ gpio_export(136, 1); -+ gpio_request(137, "sysfs"); -+ gpio_export(137, 1); -+ gpio_request(138, "sysfs"); -+ gpio_export(138, 1); -+ gpio_request(139, "sysfs"); -+ gpio_export(139, 1); -+ gpio_request(140, "sysfs"); -+ gpio_export(140, 1); -+ gpio_request(141, "sysfs"); -+ gpio_export(141, 1); -+ gpio_request(162, "sysfs"); -+ gpio_export(162, 1); -+ } -+ - usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); - usb_musb_init(NULL); - --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch b/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch deleted file mode 100644 index 8b716eebc..000000000 --- a/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch +++ /dev/null @@ -1,285 +0,0 @@ -From a53e7913a95faefde1ee87a7ea048c04b0850066 Mon Sep 17 00:00:00 2001 -From: Robert Nelson -Date: Tue, 11 Dec 2012 06:42:03 -0600 -Subject: [PATCH 05/10] Beagle: expansion: add CircuitCo ulcd Support - -This of a cleanup, squashed both ulcd commits into one: - -====================================================================== - -expansion: add ulcd -Signed-off-by: Robert Nelson - -====================================================================== - -beagleboard: fix uLCD7 support -Signed-off-by: Koen Kooi - -====================================================================== - -Signed-off-by: Robert Nelson ---- - arch/arm/mach-omap2/board-omap3beagle.c | 136 ++++++++++++++++++++++ - drivers/video/omap2/displays/panel-generic-dpi.c | 27 +++++ - 2 files changed, 163 insertions(+) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 0f9b253..b2807c2 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -118,12 +118,16 @@ static struct { - int dvi_pd_gpio; - int usr_button_gpio; - int mmc_caps; -+ char *lcd_driver_name; -+ int lcd_pwren; - } beagle_config = { - .mmc1_gpio_wp = -EINVAL, - .usb_pwr_level = 0, - .dvi_pd_gpio = -EINVAL, - .usr_button_gpio = 4, - .mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, -+ .lcd_driver_name = "", -+ .lcd_pwren = 156, - }; - - static struct gpio omap3_beagle_rev_gpios[] __initdata = { -@@ -195,6 +199,7 @@ static void __init omap3_beagle_init_rev(void) - } - - char expansionboard_name[16]; -+char expansionboard2_name[16]; - - enum { - EXPANSION_MMC_NONE = 0, -@@ -205,6 +210,7 @@ enum { - enum { - EXPANSION_I2C_NONE = 0, - EXPANSION_I2C_ZIPPY, -+ EXPANSION_I2C_7ULCD, - }; - - static struct { -@@ -369,9 +375,53 @@ static struct omap_dss_device beagle_tv_device = { - .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO, - }; - -+static int beagle_enable_lcd(struct omap_dss_device *dssdev) -+{ -+ if (gpio_is_valid(beagle_config.lcd_pwren)) { -+ pr_info("%s: Enabling LCD\n", __FUNCTION__); -+ gpio_set_value(beagle_config.lcd_pwren, 0); -+ } else { -+ pr_info("%s: Invalid LCD enable GPIO: %d\n", -+ __FUNCTION__, beagle_config.lcd_pwren); -+ } -+ -+ return 0; -+} -+ -+static void beagle_disable_lcd(struct omap_dss_device *dssdev) -+{ -+ if (gpio_is_valid(beagle_config.lcd_pwren)) { -+ pr_info("%s: Disabling LCD\n", __FUNCTION__); -+ gpio_set_value(beagle_config.lcd_pwren, 1); -+ } else { -+ pr_info("%s: Invalid LCD enable GPIO: %d\n", -+ __FUNCTION__, beagle_config.lcd_pwren); -+ } -+ -+ return; -+} -+ -+static struct panel_generic_dpi_data lcd_panel = { -+ .name = "tfc_s9700rtwv35tr-01b", -+ .platform_enable = beagle_enable_lcd, -+ .platform_disable = beagle_disable_lcd, -+}; -+ -+static struct omap_dss_device beagle_lcd_device = { -+ .type = OMAP_DISPLAY_TYPE_DPI, -+ .name = "lcd", -+ .driver_name = "generic_dpi_panel", -+ .phy.dpi.data_lines = 24, -+ .platform_enable = beagle_enable_lcd, -+ .platform_disable = beagle_disable_lcd, -+ .reset_gpio = -EINVAL, -+ .data = &lcd_panel, -+}; -+ - static struct omap_dss_device *beagle_dss_devices[] = { - &beagle_dvi_device, - &beagle_tv_device, -+ &beagle_lcd_device, - }; - - static struct omap_dss_board_info beagle_dss_data = { -@@ -553,6 +603,53 @@ static struct i2c_board_info __initdata zippy_i2c2_rtc[] = { - #endif - }; - -+#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007) -+/* Touchscreen */ -+#include -+ -+#define OMAP3BEAGLE_TSC2007_GPIO 157 -+ -+static int omap3beagle_tsc2007_get_pendown_state(void) -+{ -+ return !gpio_get_value(OMAP3BEAGLE_TSC2007_GPIO); -+} -+ -+static struct tsc2007_platform_data tsc2007_info = { -+ .model = 2007, -+ .x_plate_ohms = 180, -+ .get_pendown_state = omap3beagle_tsc2007_get_pendown_state, -+}; -+ -+static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = { -+ { -+ I2C_BOARD_INFO("tlc59108", 0x40), -+ }, -+ { -+ I2C_BOARD_INFO("tsc2007", 0x48), -+ .platform_data = &tsc2007_info, -+ }, -+}; -+ -+static void __init omap3beagle_tsc2007_init(void) -+{ -+ int r; -+ -+ omap_mux_init_gpio(OMAP3BEAGLE_TSC2007_GPIO, OMAP_PIN_INPUT_PULLUP); -+ -+ r = gpio_request_one(OMAP3BEAGLE_TSC2007_GPIO, GPIOF_IN, "tsc2007_pen_down"); -+ if (r < 0) { -+ pr_err("Beagle expansionboard: failed to request GPIO#%d for " -+ "tsc2007 pen down IRQ\n", OMAP3BEAGLE_TSC2007_GPIO); -+ return; -+ } -+ -+ beagle_i2c2_bbtoys_ulcd[0].irq = gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO); -+ irq_set_irq_type(gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO), IRQ_TYPE_EDGE_FALLING); -+} -+#else -+static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {}; -+#endif -+ - static int __init omap3_beagle_i2c_init(void) - { - omap3_pmic_get_config(&beagle_twldata, -@@ -565,6 +662,10 @@ static int __init omap3_beagle_i2c_init(void) - omap3_pmic_init("twl4030", &beagle_twldata); - - switch (expansion_config.i2c_settings) { -+ case EXPANSION_I2C_7ULCD: -+ omap_register_i2c_bus(2, 400, beagle_i2c2_bbtoys_ulcd, -+ ARRAY_SIZE(beagle_i2c2_bbtoys_ulcd)); -+ break; - case EXPANSION_I2C_ZIPPY: - omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc)); - break; -@@ -661,6 +762,18 @@ static int __init expansionboard_setup(char *str) - return 0; - } - -+static int __init expansionboard2_setup(char *str) -+{ -+ if (!machine_is_omap3_beagle()) -+ return 0; -+ -+ if (!str) -+ return -EINVAL; -+ strncpy(expansionboard2_name, str, 16); -+ pr_info("Beagle expansionboard2: %s\n", expansionboard2_name); -+ return 0; -+} -+ - static int __init beagle_opp_init(void) - { - int r = 0; -@@ -726,6 +839,20 @@ static void __init omap3_beagle_init(void) - omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT); - } - -+ if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) -+ { -+ int r; -+ expansion_config.i2c_settings = EXPANSION_I2C_7ULCD; -+ -+ /* TODO: set lcd_driver_name by command line or device tree */ -+ beagle_config.lcd_driver_name = "tfc_s9700rtwv35tr-01b", -+ lcd_panel.name = beagle_config.lcd_driver_name; -+ -+ r = gpio_request_one(beagle_config.lcd_pwren, GPIOF_OUT_INIT_LOW, "LCD power"); -+ if (r < 0) -+ pr_err("Beagle expansionboard: Unable to get LCD power enable GPIO\n"); -+ } -+ - if (gpio_is_valid(beagle_config.mmc1_gpio_wp)) - omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT); - -@@ -795,6 +922,14 @@ static void __init omap3_beagle_init(void) - gpio_export(162, 1); - } - -+ if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) -+ { -+ #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007) -+ pr_info("Beagle expansionboard: initializing touchscreen: tsc2007\n"); -+ omap3beagle_tsc2007_init(); -+ #endif -+ } -+ - usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); - usb_musb_init(NULL); - -@@ -816,6 +951,7 @@ static void __init omap3_beagle_init(void) - } - - early_param("buddy", expansionboard_setup); -+early_param("buddy2", expansionboard2_setup); - - MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") - /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ -diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c -index 97363f7..614031f 100644 ---- a/drivers/video/omap2/displays/panel-generic-dpi.c -+++ b/drivers/video/omap2/displays/panel-generic-dpi.c -@@ -515,6 +515,33 @@ static struct panel_config generic_dpi_panels[] = { - }, - .name = "primeview_pd104slf", - }, -+ -+ /* ThreeFiveCorp S9700RTWV35TR-01B */ -+ { -+ { -+ .x_res = 800, -+ .y_res = 480, -+ -+ .pixel_clock = 30000, -+ -+ .hsw = 49, -+ .hfp = 41, -+ .hbp = 40, -+ -+ .vsw = 4, -+ .vfp = 14, -+ .vbp = 29, -+ -+ .vsync_level = OMAPDSS_SIG_ACTIVE_LOW, -+ .hsync_level = OMAPDSS_SIG_ACTIVE_LOW, -+ .data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE, -+ .de_level = OMAPDSS_SIG_ACTIVE_HIGH, -+ .sync_pclk_edge = OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES, -+ }, -+ .power_on_delay = 50, -+ .power_off_delay = 100, -+ .name = "tfc_s9700rtwv35tr-01b", -+ }, - }; - - struct panel_drv_data { --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch b/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch deleted file mode 100644 index 88d48af8c..000000000 --- a/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch +++ /dev/null @@ -1,180 +0,0 @@ -From f78cd93d767cd75969c4661723cfce46071e5b1b Mon Sep 17 00:00:00 2001 -From: Robert Nelson -Date: Tue, 11 Dec 2012 06:48:52 -0600 -Subject: [PATCH 06/10] Beagle: expansion: add wifi - -build fixes from Pantelis Antoniou - -Signed-off-by: Robert Nelson ---- - arch/arm/mach-omap2/board-omap3beagle.c | 119 +++++++++++++++++++++++++++++++ - 1 file changed, 119 insertions(+) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index a8de97e..2322d6c 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -221,6 +221,73 @@ static struct { - .i2c_settings = EXPANSION_I2C_NONE, - }; - -+#if IS_ENABLED(CONFIG_WL12XX) -+#include -+#include -+#include -+ -+#define OMAP_BEAGLE_WLAN_EN_GPIO (139) -+#define OMAP_BEAGLE_BT_EN_GPIO (138) -+#define OMAP_BEAGLE_WLAN_IRQ_GPIO (137) -+#define OMAP_BEAGLE_FM_EN_BT_WU (136) -+ -+struct wl12xx_platform_data omap_beagle_wlan_data __initdata = { -+ .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */ -+}; -+ -+static struct ti_st_plat_data wilink_platform_data = { -+ .nshutdown_gpio = OMAP_BEAGLE_BT_EN_GPIO, -+ .dev_name = "/dev/ttyO1", -+ .flow_cntrl = 1, -+ .baud_rate = 3000000, -+ .chip_enable = NULL, -+ .suspend = NULL, -+ .resume = NULL, -+}; -+ -+static struct platform_device wl12xx_device = { -+ .name = "kim", -+ .id = -1, -+ .dev.platform_data = &wilink_platform_data, -+}; -+ -+static struct platform_device btwilink_device = { -+ .name = "btwilink", -+ .id = -1, -+}; -+#endif -+ -+static struct regulator_consumer_supply beagle_vmmc2_supply = -+ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"); -+ -+static struct regulator_init_data beagle_vmmc2 = { -+ .constraints = { -+ .valid_ops_mask = REGULATOR_CHANGE_STATUS, -+ }, -+ .num_consumer_supplies = 1, -+ .consumer_supplies = &beagle_vmmc2_supply, -+}; -+ -+#if IS_ENABLED(CONFIG_WL12XX) -+static struct fixed_voltage_config beagle_vwlan = { -+ .supply_name = "vwl1271", -+ .microvolts = 1800000, /* 1.8V */ -+ .gpio = OMAP_BEAGLE_WLAN_EN_GPIO, -+ .startup_delay = 70000, /* 70ms */ -+ .enable_high = 1, -+ .enabled_at_boot = 0, -+ .init_data = &beagle_vmmc2, -+}; -+ -+static struct platform_device omap_vwlan_device = { -+ .name = "reg-fixed-voltage", -+ .id = 1, -+ .dev = { -+ .platform_data = &beagle_vwlan, -+ }, -+}; -+#endif -+ - //rcn-ee: this is just a fake regulator, the zippy hardware provides 3.3/1.8 with jumper.. - static struct fixed_voltage_config beagle_vzippy = { - .supply_name = "vzippy", -@@ -459,6 +526,26 @@ static struct omap2_hsmmc_info mmc_zippy[] = { - }, - {} /* Terminator */ - }; -+ -+static struct omap2_hsmmc_info mmcbbt[] = { -+ { -+ .mmc = 1, -+ .caps = MMC_CAP_4_BIT_DATA, -+ .gpio_wp = -EINVAL, -+ .deferred = true, -+ }, -+ { -+ .name = "wl1271", -+ .mmc = 2, -+ .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD, -+ .gpio_wp = -EINVAL, -+ .gpio_cd = -EINVAL, -+ .ocr_mask = MMC_VDD_165_195, -+ .nonremovable = true, -+ }, -+ {} /* Terminator */ -+}; -+ - static struct regulator_consumer_supply beagle_vmmc1_supply[] = { - REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"), - }; -@@ -490,6 +577,13 @@ static int beagle_twl_gpio_setup(struct device *dev, - int r; - - switch (expansion_config.mmc_settings) { -+ case EXPANSION_MMC_WIFI: -+ mmcbbt[0].gpio_wp = beagle_config.mmc1_gpio_wp; -+ /* gpio + 0 is "mmc0_cd" (input/IRQ) */ -+ mmcbbt[0].gpio_cd = gpio + 0; -+ -+ omap_hsmmc_late_init(mmcbbt); -+ break; - case EXPANSION_MMC_ZIPPY: - mmc_zippy[0].gpio_wp = beagle_config.mmc1_gpio_wp; - /* gpio + 0 is "mmc0_cd" (input/IRQ) */ -@@ -839,6 +933,13 @@ static void __init omap3_beagle_init(void) - omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT); - } - -+ if (!strcmp(expansionboard_name, "bbtoys-wifi")) -+ { -+ #if IS_ENABLED(CONFIG_WL12XX) -+ expansion_config.mmc_settings = EXPANSION_MMC_WIFI; -+ #endif -+ } -+ - if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) - { - int r; -@@ -857,6 +958,10 @@ static void __init omap3_beagle_init(void) - omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT); - - switch (expansion_config.mmc_settings) { -+ case EXPANSION_MMC_WIFI: -+ mmcbbt[0].caps = beagle_config.mmc_caps; -+ omap_hsmmc_init(mmcbbt); -+ break; - case EXPANSION_MMC_ZIPPY: - mmc_zippy[0].caps = beagle_config.mmc_caps; - omap_hsmmc_init(mmc_zippy); -@@ -922,6 +1027,20 @@ static void __init omap3_beagle_init(void) - gpio_export(162, 1); - } - -+ if (!strcmp(expansionboard_name, "bbtoys-wifi")) -+ { -+ #if IS_ENABLED(CONFIG_WL12XX) -+ omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO); -+ if (wl12xx_set_platform_data(&omap_beagle_wlan_data)) -+ pr_err("error setting wl12xx data\n"); -+ pr_info("Beagle expansionboard: registering wl12xx bt platform device\n"); -+ platform_device_register(&wl12xx_device); -+ platform_device_register(&btwilink_device); -+ pr_info("Beagle expansionboard: registering wl12xx wifi platform device\n"); -+ platform_device_register(&omap_vwlan_device); -+ #endif -+ } -+ - if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) - { - #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007) --- -1.7.10.4 - diff --git a/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch b/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch deleted file mode 100644 index a006c7b02..000000000 --- a/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch +++ /dev/null @@ -1,117 +0,0 @@ -From 0c361e9db10f9ec3598bf062a605a451857ee06e Mon Sep 17 00:00:00 2001 -From: Bas van der Doorn -Date: Tue, 11 Dec 2012 06:52:22 -0600 -Subject: [PATCH 07/10] Beagle: expansion: add beaglefpga - -Added SPI dev and McBSP 3 mux when FPGA is detected - -Signed-off-by: Bas van der Doorn -Signed-off-by: Robert Nelson ---- - arch/arm/mach-omap2/board-omap3beagle.c | 76 +++++++++++++++++++++++++++++++ - 1 file changed, 76 insertions(+) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 2322d6c..c257f3c 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -44,6 +44,7 @@ - #include - #include - #include -+#include - - #include

t6cLvry^}iqHXLo_>h$(h?s=pzLZA4+&jqvupL({H}ClwRrlv7uHKxp+iw3 zbEu1M*%*qk(6vgp#x6yXjrHFPRxQ7K;UdE1Yy?HDc^FaeG9#X5^X95T|$bS8r8^;ccNX`l0@77+;~4gfESa1zy@JcahOohH7`t4 z*pDiC7VYLEs{}!z8!7rHbIFKoL#Dok-F6QZ>foP)s*#_=PO$gT78BP8$ul05tH6$WlZLr5+&3M*y}^3qq%e8bIWO?-F-!JqIdd5ucciNbld=3bWu>Qd~L4o z`AVOAi(2*!&#fQx$T%v;;(Z4cli}z zl7*{jKa2$>N)XbIEIklwX@_!hlmT=Uz(S(o-`l|oo;b_)y4o`AebPBy7UVoQ*gOn& z*Lq4C{=PFq*!71T^(+>^CU65i#dwk2Y2Wh5uS8&u7}Y?P?Q*!g& zmoOeKv|{+kCR=86rF*-H@5f~ecA1-{24gd=wqzx91vQTfmwIKqX0z9TaIO{tGI6Wl z4ug8t>_=YMBL~kEOsS<}0Y~%QHKK}1m?k^q`Wbj*T)5u<338FWyMzz12JwaH<0RYJ zFN-4eN1J zJYt@WuD4$~1DF8%DlAlCln0n5bjiJ+P%;v~1# z;+QSpR&l!72Fl3DY(;Z!h&{61I$O<6E;H#r`jUJ~5*1{g^_Tf@vq(-)``ft)Eadb= zXlUI0+>dBl_Fu&gz+A~csvo9wWI|#tI~575aH{&Q$b7X-4zx(KNkcCf(CPhge3da} zB*#ILiE$rU7lrzrH)Dy@PjI!pHO#hMR^=~NNMpd-G>BIUData?(h_aEX6pV6LwU@` zMJ=|9dNvf}&v;7~xMXf6q6BQLU@g*}5yE~UCSytq%A?N{XegWzRz=08=x{ejty&#) zBW^6YVcS*PVx;`7KW0tg1 zovwGB>O~f`S67*U%VT>%U8bE9&C%K^#S06FUkR5D>ulX3?3|?cHV8)fIcZxeXP;wv z3Q9O@Bo^EY?q2((F7{bUBHC|is%eg)qB-lXDkzAxmb+t1KJFHJp`{@MwMw#Qn()>8 zqFGEN@C!l?SFp8tJn%pHBwR*afTXziQd@DP9HX9eU-AunfkJl-cD*@~)Rk1WdFO)b z{3Ard4DgzyMfX7l>#P5r1bNxp$o(~UP&HTE&_jPD4vF4SC|d!Th%*NEG&3kyRMEl3&TAom*g&m z!ft4<|C`dq{>Q~hW*?kwymoui2+;JI`VV5MHWlNSv-|oWi7#%LM=(A&kKu=YPTeyF z`_N3Q%UUJ0g_!7*<@kba;%4a}{=EI}HdzWgL_qCyP*{KS zYqwKtjrlM>o{BG;jccaS2eKVF@9FmB@a>r8-*V&s@Yl={=P^(ex+P_#Rr>sEhu!Lm zAQ&^a39X@mLmJr0QNL?ZHDs*c2+>(V%8g=$hD$_qASqOTG!AjUD$) zOS1zMA&~5ZR1=r^$6N_p942vTr9#nfMhYbhNc-2>&#$ai89R@&b4WxwktSx`o`tqi zrT(95<^*W*)M!H53!T>2Y65L!2069)lSXcj_R^!oq#VzUMdcyI)-%|8gg%>6pOypK zS+rv-t+wV~vC{?F^$|G1gosaHN$Q*C{8~m;Y zKu&Qy-|>)XaF}ocOwFIXb5Ac_&=%F5ji_2+@f9XnrG_5@pvqouh7~yla+De7=g#Rm z_VcQQ#z28Hn?{!FHtGA79^w@B2g`RHl6$wbE&cL%W3Bg=_+(A4C3o$%p?X4`1{^}gEZ7ns@|=jU{1 z@4Ry*-vqdV^*~gfr6W<_6qNg5uO}2AFB~g+n+nYO`uz@vYZpy6hTfCSVew}gkf%O& zz^NXi*b@~J6?fAV?8*qddq8McOZzC)8aSQQbs;-a+~+l87E|GSnwkZ!I7HNP$5*PEiE8r)*trc`5fIbN(TpQ z#W_$M@O>q!q);^w`qyx5#RTi01PyGqDTRARHq~16eD?$VLeG2#r`Q0@Ij`u_j5+N> zCseY}(yv1^u>Ya!Y%GNnj-+W*t52%P9ab;7H(}h4JYR(C2zoiftMOkg3-vb@X4EmL zPl?K-zup>H(Ux?=JM@jw83fo(o|_D(_7c6alH^=he+ylAXCq}vOOZAE$x{M+)~qNd zl1WJ&6znE`m#Ku(id1*t2pR=fa>G0CQ&!Ci6sdknI-|u`tRTbvJy}8vD;%NTev;a~ zzD6i0Z=c(^gwi|Vd)NbHha4neN)3Y|_-A$SNX2sS+2@LXXSIX7N!BI(JYvbW<#>w=TR zi0)PzfSxXI^EtcNkbj$f5fs?py4vTlSru8UAueGV`r_z*MaZ=Q%OC6>japxHkHy2S ziNZ&aHEr_2$3w*(ATvue=;;2$v`6<*gc@A5Ht;WGV2DLcwqetlOEUvU{l0X?JIPw;%G}!NszHczazpUR!>!S=8|0A)4XvA7}|l zbD4S4B!#L3OoTRMMv00<^%Bn7i;N|;whQwR2K$n}b9*L~R4Ps5@Le6kFY@8bliTdM zJNwY{-O=G%k*$@0v_(YuRb_;|T%3?})IY>=5$e52PNA`GaK8=ri=GTE$O>PjPSp^%?!0Z*lU`#7>Mf} zhsJQW)===YY9i(w=dkTs6y>s|?Gur*Vk5d8v;@mK*6yyXn0vK$ifqRV`NWX9g;fS9 zaYC&$26pP@-@KY@+e7%^|5SDSby2+5xTaS4^p5XG`)O!WgJ6U8kO+lotL(>5Zw>kr z0`5xAE-9}5rl^VdkqE%57i?eQGAp20C8_YLZ(Ws1sXfev7#*Dvnx#N5(!eOMNf_)G z_@_TvLjoLs^OkPEsl1xJAjOUn=t9GC2*U*%R0zOF&>EK_sPHl(Tp=3>FU;u`@Hcey zAeNj*K>WOKbv3b~ujiyim4Ciq5S|w`siE+B(VsTDuMsx@^@lrJo_N1M!~N!}SM-GG zTV&bFngI#c|FDPr)cxU0B&VmiPyf{&ef*2juU*XLZn&5X#evja&%izplIez^@h?|i zO)M69TXNq6)eHB>9O!0634g5p`!l{@Au@Lnbiz{PLx)J|7r=@89%2XpuN+Y|*3g#l z*`tvWxQI^>($9uFy(bH|+c*uYH8254&u#UR)>pAgMv zaXVW2ND2ADi;7C*(2|HkmRDi;gm`yfb8m9`lAZ_vKRI*C<=Z0*-e?%!VB0isd|rq@ zdz;m!Roc`fS=rWC2fE*?DfB@g$>68u*|!W`&qvyCZ$ul*0Okw-ZL7j7DVHTl&cI#5 zacD!Q{ny_iJ)#G+^J(=6{G&f$2n$bc2<7sl9AWuyE{WZg&6+qv7T;C&mvt26jrETw z2}|<<$raPP@)$9Whl$t!PO=bCmBt%rH#Dr<=s5pX*rNH*b_>_ z9v+n*iM>PsbQVt$@y&iJ_rJ!Cz#MXM^|)rEUe^m*b}-S-b@lKeFS0;O_v}T7okql; zlERSYu7eL^bxry({tbc9M$-&u`7q>9YVYsVK1r2s4eKA54wcFoJ*>BFgF9*jrv0QH*oO}68 zVcPB=?P1U5A~bH*|AD*Db@w9??Lc0fOzl^taMje4(h32*Vvj8QiC!m&HGAI!!Gzra zm+iv^y(IgDdZBP^)~34rcmBB8?g9kvt$EwPUxbhF3c(2?cnorS9x58BsBgBlar?wWrT8?f9ghio|F+G?2TlKzJ9{ThT@BChO`qOgj)&8#FzC|IG zd+dyOOkRyNo&V?u z+{jVV`L1(0aaYqn`BfLHR3b1?A&5gZ>yX+2TUH4RP3aE>BoPlx#Y~E_K(*d9g(O&m zWJD!QinhM%vZDQzK#Rb*ra3D)M=cvjnNEd|5tudbb#_6tXE8Z#y$6^(BR<`!WM!$N z_x%xy5*WZKXpokd=G{K|F2nl%)eca^J+h_Qx*UJr4}b=_G4$;5nnA@R9|-DEbPnSrd_H`w z(@YlT=+i63Y0=2{%W7ph{$?#!OV7CY5PN>T|vFfNTyyd9c<9i3@RD zNiC8j^|}qyL&7LUEnkGw;{UHlK6?DV-3rMeED!KQqAL4#B!Y3)KIbJU|Ja7yz8yYC z<^q4Yw2`|*b(Z3Pqqf&~P0IjOnz^PY&^+6Am>>QKvvxIYfAzdA;T*tB)-e`r@nix* zJaPzqPU`cSIj?#X`v%4qD%f%AQxz;(rlCK93;$in{81+(h2Z?g^ku8eq6Rh?2OZud|>6_}YmJES)h z{1b+>D*33dGQcem5k=!3c$GHsAJdNi~D1V)%o`tRzUyuEJqbPo13+oIUf z25~))QH`@kQ4Obr;yq7ijD4xhbPi@1DsO^^*n>B52=9y8uenE3xtz*f!C)XGE7=wE{H|;bS@TdH|2}UYP;0*$qpw} zvJU?$e!U+GxL2cim5uSgV}?+CyC-soux-5X;WiKd*&O2nPe73UpXGPYO5_0*4j3dk zF4r0&1;Z*Pw3mSMEfE_C=b_r0fAFSAVe%s7uPo@F!sd{SUMQHJ%f87S`T|;CcY7=( zy0Thy@LGR^>2~_-ldiuwLn4q;bQrBTa`Zd|#HZO!o;Df~EtIj<$2S$*2SUhXV+hIs zEVrcvvXEEk^tvSZ!TU=%h=00St}k3Aek?8(hFa0l`|`b&7?tH!y*UUjSiieeCIk9f(I_FzWTCW(=0ODuNLpF7xA&a`R8Lb%48V9xF z6?0$G4&kslWx@>N{q4_%ca32l_a`OYPp@tcXo&jgg&3Ej%g$T}IXDV-0)XudkkxwG ziHw~bgSiKooDjKzMaP5vz#4-lW|Eb1)f906n;0F6p~MOu4Z@!oN znU*>S^1mZ6FZGZQf9W9)J?u3%D$~AC)!q=zeexhltPBInr^l1Zkwn6@L4Qp-#|l`7>cNl)7&CNa$0zh3K&UpS$=; zj|-@;@4szP=iZ-bz6HQ6tB?jWKMwj%9kaZI3Z#iLb~im7shI*|C~=KfHr^pD zc0i&VaC+2$>GFRp>q8^wZ@^Jrg!krp@F!kVx8ffzTe<1ACpT@_G2I3m?iBV~{jNlz zT{cJjaw)8S;t^twDo)Oi@C;sQhFF^|qeh|jW~TpJO6MewvkMH+M_uth^vrrI?{hiZ z-}wW$zBJ1}E-I2(EEs1<3wv*Hdc*>lsr6u0Lx&P4>rfh~H9R z20Rm_WIy^=IQiXsoqOtVM5Dnt)NyV@-2UF!Iy_*|f+uci3K^ctJpuq3x`O2LkcTy=CIra$`GP)ev$Uk<25-F*@8gvwV zs4LS{d{bw|s-9TCsX^8VHhtr0|NgZ_*RMNs4iWl(*utc_jT%iXCQ#pX#B6*O{09#D zvV~EiJ;kghsAKpr*8;_X{b3AGkq-GB*-XA#D@4qmqvH?ytNAi~F3wD6Q)%AFvQR1a z&$AOVx5N8tX7f@TJ#G=p#&6Odmm6lHI0)&Hqjuv>*n>8A1vv8@0oq7bCOA&+3QcJWnIb zI;>VoOCt*^7+}kJCOs2+XUyd8=3#*#N8AptQxuedUBB3}Ti;AAz1f0iwOPQcr|u+d z0D-;xzE`eKrgUT6q%$R$ZY6Mmz;#z}IOOk~kwQ(OT@r_Mru>f^rs!Vc68(wa+W_Ln zQECnklUKf!xzquZXXsx|__xal08LnS+&_%F59B`PIWF&?8wr^T{`NZY4TVn-Se{~J zvNy;yob%ReVCM^NYNp5`vr*14Rhg|c#i+~@cTAJJD^e;nD``{uvIqQHuLL!vWss^T zRToB&7AF(i3`QRO*}qpxR+qIQsMcr#IAbcXvypqDaxnCRIWxhd+zS~l9P?_6-}dI5 z-cIvHD)(7Q3~&oW7sip#?qz(C&q5`2TPlgDPAJs2uJ@7Bks|?&*z>OhWCXBUSD5ARN8M`P?6KcAL7%II7eew;Wj(t@KZqCoMNutqmcc} z#_LN!>=`VODmIBDIEF$3a>h;xxw~weJnfxmZT$WLL46>Dqbr1{4}QUUgn{oc38-?+ zN^CfmrNJ{vUBT6h1*s?|R*xf4O5?Wz-_X7qA!cbnYK4^{?c0`D%@ooI&%ss3ut(rn z7tvr*f9o6<`}S#*x`YBgO)e=g4h1d10ll%EBbL)rk;g`@n2jZqd;l%^w97!$tz%NA zY;34jbg=cyU@aE-LCnWjW+kue5=#<6uxU$v$v4xDWQBglv_L3g^{7NhvV&-#z~ZQq zRJre&vZc3B=$~9QviE4dj`p+3Kk1Jh@S+c3&eo|O2Cz@fkuBGH`2goZ7bI-1a&8hAoY2|S=ACZ6{m7ERE*iXWG^B?QUmtM) z!FxY$d2Yx2W{gu|E)H|`w?H|8HIfQ82{F#wEmPTS`B8ge^r8(lE6NgzF8nF%(s1k! z3f!mf6n55UYdEf*`Th^E9d^IS_a;-wQN&e8*KDDMBtoS96$@p?Ku22`Cp0uqc?>!; zM;T&6O8{`W=|YhyLQ&}B8|4cSfOUHc_;3i?zMqLR_Blj?R)qs_b%mVy!M1P#qJz`8 z{?_!ty_Ozo@p5txG&APx^&w=YlVa4jna4)!3x6w!KGI%5{i0^Li>clA+71+l)H=RW z7?1g%BmCqRe8Os}JvYEVQVqJ0= z-aH)`P#%l#wFIlX0{$PwXLT;pf0>qev~uiy_xpMwCm3+BA!_vM6P+tr*lUTqpEf>z4qgr zuNK(>VNDDTa&}7>3_G4o0{Qtf`V;8Oh^N1)BYcoV=^|wKFpCo?B(L!uIP`UDM)_Ru zv0*cZ$rZRS^`?wbRG7w1W9|n&^iDbm)$(`nMjVII@|S#RSsT;Je@TxXVejyDvUNWtCY-o^?qL zT29(@9`cL8v`YHWmPAT36lCSYP;jH;OZFCp#D*ZPBkPEL93RkGWQd=#?vNBO_ z#$tG^H#ED6b-`~U*io+*82opf_RLL>b5+a$5Ii-WUefY$=u~WlS35k(1LM#59&8ka zF=L+}+2ipt(&gFaG8b#j{xs5K7}f=1kCF2~Sj2cJ6!QtM@zpu(BOfj7;;mg-q{5K70Q6giTtEEb@!vdmPC;`BC#5g+~?iI znQ@{??$T_s$WZ}L)O5W~CYgfLu=tk9v?T_Y8)jGd4~!G*6mYBfvD{d}ESO13-SiY| zu;6)pW&4e`?nPwWmjw~)}745Ja`II18iOpHG7A)Tb0%!MTzl9;p7+M{9Um{j&o|*N#&d zsw;n`ujW~VeXJYarQR>+roA^jzRb0U{Dt$twcr{1qS=HBRCGB8UWee%Uyd0_=1Cp> zlSZg|563JY)JPuGq8gpsL|HPemY5#uxtNwL4~#db(Y=5e-&Pm5bDz7u1oc&#gG~)D9vgyP-urkCV$NQSfv>oTM-eU@V>gX##{`a`Nphy`e@rhKh z8=Wz?#*vw7I=3>R*?t7A%=}N<*Lz_MsG&Hr*INIM>>_j;c7866q^kqcn9XQ~d~;%5Yp=xG#);GwV3 zPY;g7z^Bx(Bnnc`MSYP~cTnE>#ZS2{ z@nd;~Z?5SMwJ;_4xgG)yK8Ob`D6{>bs>`;g(Lsrul-}@xL>D0;OBQ z8L23eF}R`6W$5NN|IY5zG?GK23yKJTL(MkZn6EL}znOvFl}Ea^IF#;hho^9}6j4K_ z_`UCJT`bTwphe-84X#8@rLrbx!H_-{sec{FcpkN{r%gEyQLrP@N0;6KJv?|VO%Ynm z^?L_tDYO**A?np+mYMe!&ih8ZjG>%+jFXa@&WhQ|@#q=s@4h<-|8770?nUf`#S_sU zIFg%citPGmmo<#qh+ZT13?{p6EiD+L$@_mU#A!xgE3B@6`e1C-hHsiXbFaobB+5CQb zMUI8}$X`QxgCT48qfV7R6A5Br^9k+nOky%uI^Gp6@fND$8|nXX0o;5fy!h2smO{n~ zR3|N?ev=xK(Ln$5P5eM*BCj&Zkd8+*vs)`X3An#K@&c3fMb755GlDZrEU%Wuqa6NL zoXb%DulLYCH=`@8|{`{l(|xf<~@?(pg0h9Q zi1Gdq{vrIBB7p5_hr0Ph=_f4h)a&~Cy-m>P1h{EoEVs2JmTVv0!|v{=BBwKSIQDo7PrjMdY+Ht9$3StGyV4obog=S zxX~I1)nJ%txU^RnYxrT#kLk@QK zI@1N~$rEpG)@` zVmZx=t#1A9bt#s&cCR^WeGhIFah8adAaD7SbE_rxRf|sDH>FLZ&2->iMh#eZ36;J3 zmjj>CF#8hu``DS@4q9s_@7)wOOg^S5%3t`xezk;1z-<@p+X0V{J#b5Yf1?PE8p$Cl z5qIHc-u7+a7}W&?2X*zwc2FMt4qnO*?qIdVXDCnd51!5jqfY zr0dh)#z+TzqdxQlotalbS~wR~hVgz2j1-uMvbpscYm(0aubiJ&zn-}rij|`gsj`{? z-g3Hc5KXLfJER9pbiCig2}t;$_Ha~fmO@p~B2iEWC0j%%lVgLS$e?DYf!G>Npkgp? znzUQ3Rj&^hJO)q7-u)znYxC;{6KEZTW!GH;xyZhBs9+) zN&-kjqFYIKa#1cD7f0ER4zF;N$VSr^bCIIWGDB0EvEAte?FMpy|@-a%rH zm!Mz(uUgMNpZSJ=LtVc3FIf4n1yZJ=`QIohJEp+z{;sZ;1|V?jZ2*CBhb3rlJvf0f zm3Hpphx&U@l+BRBWxjt#YvGdq)-*PJFzH{Q>2`6U@-zwT?Vrl=y!y@Y!f};Rd9!De z@!|543r&nGplNNf0pFr@_W2!!LVaN8m0q#B*Y6*O3p?_x4*kTrib7<&wxIYWmwYx1 zeW}|eANbk-FO%@PaP6)89j(X)lA#(Lnl?|+uFYUA)gLSi`cHVjrO5O=jvTFlUiH=v zaI$9hGlB|b>!ZU89JXYoZz7uYW4W9%WEQTY>S_CsO;IsfYP$J)yAt4L`?i#a6UB6> zL5TNui5K_BUr-7sFX`;%3%nfG9N$PxQBJhl1w~|_7@m~aahBR5VbPNVw=v0rYe;xV zg3re?+h^@$+b`bux576!K}Kv?cOz>33lzcJ8MCcgzq|+@Ja?wi|F*IZw)c7L8K`Zp zN{4v-dmz=}GWCB7rW@zHEsVde@X*r&krrzT*kn6h)t|7EAtvyo{+OTGam6_D8272= zx@~($4i5!Ko$~yb&G&pK{Su0xco4ocKrLBB zB|3zNS!kq@7~-0&Km0%+UVHMOY6-YrhEHdJ89I!@OEiL)%nx`u7SQT+$>)jK$I}T$ zI8!w0A2w)CES_>JoWtgM7F~;xe3@FXEAu_yO4}kFrOA&2&u<4(3jyOEytU zzZs{VLuT&!Z&8E8n$eia3+0+Hj$}3ANB&>b+Vpgz+rGzh)AXh$6Kp zOU@+^77LIzr(m)VXf^W&siA*tLZJh$jr_VM$s{~0v~^QLBJYuQ^+}bNI80Q;H-~a z>Aw`LMBV-4Twc(=wI$STBQ(doJSXj_U7ig-O#fc#>rMbY_a%ruyqYFDH@-*@jzL&< zL13O$$ZLDzY5gYXs<&hDpXolV-{NzNRV_Z3PgquC=p8MER4g(c&IpF30iSCPvvPsn z6gUhsj9lFk#59fUR<2w=z7cfSMp);_1*N{vJI}Tf{mGtP ze6H*OHpL%2Jk3|$-36r6|N4>+sGp()dH9G z=fhZ>C(s(d^KBSAAf!ieU^3`-C%wM_Y9{va`PT(sPMt{fj$wbFBbSpT+`Qeho#S0b zlW&U6@TU>{HiME-nU;gc%S%jwY%SS|O>Vo>+~LZ_=!A#JrKdnhuBAfJFt*F*C0sgAWVUCyRc#G;*fZ zkOW9&uqOu*&AR7oUKd9W&B3&&Mg+#P`T}gqA=wbqi}uyuNQdGkjHa0Qi(It1JFdZ{ zk*61(;@siqnT{^_-w~nr+(%i=E*B`dLNPO_BEFd%GG~O}O-)+~6d=!MGG_&VXZh zw!dIG3}+fdZ!Xs4mcbnXE#CP!q{$8V7Kq0awOkEHqSJ)PoY@cSOex=ejcgQ0z;3)V zy?IXKVbQ7tW5p-;;6$~Mhf^KMD~Q9)_i`2`!<=*Q+0;8@fMUnwMaH7iPNJ4|gVg#@ z104|#|5;(^YH;UGk|mr2OS)W5P;#B5=<$jt3^lt=(VnA;g$=P0=)A4_{g zm;W7Uolw(ma=!6hDS0!BPy*7}r|)c}GXkfEM1^dt%&bA5ZG%IqIhnXh9_wVb_3}Em zt_LS}V@h}zqzX6x|A@rs?=!(IH9KDbwEY5i7T*lE-) z`IwC2(AC^uFSX7Z;pFcp_k`==E$}UC_rrF_s9s+{+#CxB^VdV89rlrFQ9<(Cq)o@^ zw2`-3-`c&jrQaebLS~P8b{-t`f1bZs&D|apO17|Z`u_}m?jk@Q+Z$d#JhbB3GKMC` z*Jsvo!5};Dzi@PEeotOP&Pt?XwjP-VEoI^T7 zEf&K?(g(3;Lkk)~Fm`ykdCb$s{*en# zlNS`ckC!S{Qy4G*oH}_U)5R0(u@=EKFyCSAaRA54yi{4#FJ)w=f+-Z65!GEx&YH%e zHzw9O$^Y~=qOSnyWe;(8Z{%g@-=~H=mY8m|JKi`>iRGH(@wuTLJf)# z`?nW=XC_=Yxb!1c755hZxbN-#o@f6!zxPRYl9iQ} zggc59`2Nv@!F(Y#KMw`W8RX-&z#cL4xAZEe0~ggQ<^iNFaGy&og(PK9_y+64n88h+ ze?lTk!S2)Nox&qhqJJglgJWk7=IJE^;B;-oD-qn#Y0ECq#>}I(NGE>v{_Q9C&2Zzi zCLh#on|ALGR`SUFE0Y((H%zo$CeJm}du4HaqP6{Oc;WAJ%6;E!W#ZSvkkCco^q-Dg zV!&J^qqiqKWq;nAR23Fi#)+>;%iXx2DU>@$!mP&=7sVaEKf}k?6|p4VxP~=ezuRRs z4%-=Yx7>x=5TobF@eGnKoSxqZd~)*LSMA^7Hmpp z_Ui)}fX*V+KSYP(BX&S9Q#n1{YWr>G9Pqj}FFNU!LHD}B4&2r2)-sLoJ1EmXJ4^96 zCqMl+`w&Hd2``UzY!YT~JTmUYF^R_?yYwXv-4t!YxuY$mZkEfTjP?$xs34WU>5nFO zW~&XiflEDsdxHlZp2Z|OA4NQ%tKA-j?gqxdtB)-fiC8@x-;L$9*CoSA%fIW+Fw^ob+=ocZ~zy<^()qFvK$dJVv%FDH98q#AYyzJU*-`4sib7rpBW zVGH+R-RI2-`qX#SgV3sj`QPnqvRPB794NK_frg@%Q;1_7jLz@`w7zCo@nY`qd~3#> z2~5&S?iGh;4NMT7VL>aT-XH_xcjJELR!NETrcR-zJ<6dOBblMG>N{=_$6fn->tN`6 z#n6R2Y0VO2$@SoQnldozae23t9dEzB`_=w_gGvfxnnT_fBO&El6<1n2rP20JZ3HU+ z>x5iuJQvqnji0YeTjsfKg+tKw58+<*>O)NptJnM-E{om9+@d~=5S^*{pS^31m$4wH zL~!P)6@VI2HZa@|SUA{axvjEoFCebUZC=w(h(9hcHK8^<`5sV}(97qdMLOW_2=uyt zzQsi9sTq1EUu~xWK7v244R>~xlhVG;|A5WN^*m7`w4~NAqr$;IUV*-GqirnDurQ4k zD!}@s?E6Ed1d-{dUJoPLZwyKod+M~B%5ENG4t{5+V)A1LVJcufjK(x^03eZrroy(i$3Am6!*T~W)G-^xbrm1Od zEGA5#$2q^;Wvzg(Mt!zR^(wOr>keMRi()<`Hx*K4%Tx%nf_ozsq)T_S>1(&hhRDdJ zCCFZ6iyPQh&!utJg?_9oK71Y8_hBg@hDwk5N)uD)6TTE?s%Vs^G^c-9PPgmhoj4WR z8;Ydj!g9}a6)5FshvbcOU&a`V2B^Z8u(CuIs?{5E>y;ZGG-}@$xAJ*Q8`0N^-s6Gv zPpBoGlJ2W;Irsl`}HWI-bX;m%!<= z=c;*7$-GON*}aew`wsE*^}~f#o@`Alp$&eOmO(nPZlqY}Iq|2a`~Uufwe7LGVKR7` zp8U65&>83{VT=Ixh@Z(%!!6GnRsSSf;8mmW`sT!?bA(zkq0ooPxsTj~9_z5Na>hzWeG(LD*Bw}^JCP|x}K z^{gdCMy+C)Na10;g3o4|Q3{?bwxc64Fd1J)vINr0Cj3 zFb?C&^xq(RpiTfHppg0bDYp1;i+1c)nh+9{8nY6+#=Bj z?%fPb++&6{`>FhPDUV+H=1&cNNIGcXjtiEJ49|YKmL4=`KO>_99EJ? z_^WhtAXE`gW~p0!suW(&ArA{CRLn-zj&!&w%>$)g8ETN3GF*M;AG}_mqBIVY=42j! zsJ95G@xd~gqPiMFC!$+zQN`D<>x{&ue0d4Yzm1zUb+pp%Eu)BhD&7g=w?k)Y675Jy?mFIJ)) z>`O8PZ!q^RM28aT3avWiV7PR8uY}FywI{8wx=mCKKhl(>Wz^T7(<4;G9Ah_+S$eg2 zO8!IPdFU2H`6Ry3(HP$LTBPChr|GjMr|(=x!{rN)Gse$!b0mY73|*wL^b}7e)8`=m zNk-``;>gmUrsV;So~bLeir%@-d)EYKtKF%BQU;P)>pwp+Dht@3 z!6TjAK-7YXNK36^YGPV?XYu2f%cm!vb%&7~L?2n`bj1Ga-_MaOph$30eC4L%F>$Cf z=Ds9qxVF#6&i=yr2E9kW0ZP5`QCD7-grNy$UmIhEd;5CIzMe`ipi?c!y-vOgx@#F!PIy^ zyEPTRHDc-i^e9f;9WB8oJ18h#yMP(NziNW*zI|%*C%@Q!07-N7IUS(omtzeTG6d^$ zo_N{W$OxBt)N7(FroAcU+Qtn$U%Oc^ecgaM4RO9CkS+ZaYaZjwJgG~V1mXSeaVS;` zGc}f@OmvM{8VPwia4)}bjlsWuw3s+)`_OGazi!d~VB^LMyW!aK-AB4x8fld!c(ceE z#q2p&x-dSnKr{F`emnmkWN^acm~a3TTv)6u+DWwQ>Mpf9N7=4uTqB%E2ow$Ob_sfS zvR-(tgqp6DdO^l;#YD4|CA+-zkT z;RE7E2J z-?n^K_n_lgJCcw>+C&X;&59+wyP%inFr zEa0xdOrWi)eV%n>2=PdK!q=4h^p)a&cUW`9|GH0an~Vzd#WCK?uYDwE%8Z|I{({Vf%Kj?LPyoXk`KLC+KM!Gj-uZIb;PS54s@Wi;i# zu^Z9pC~1V@Ze9hY?=>F;bY9f++xKhph{`R7`5G?-oR5^rdS^|pAxyGP(=_yfV$%>R z;~2!xUzdeGp!OZcUGCltvlb0Wf zE_WzMaqy{W?1z}AU)DPRm-Mu+g5mxc-UNe$A=a*YVt5=3o)ghv1aeMP(N>WyKamG} z{Ht_6GTuG#RgT$Hn!!8UyCAals-Y-Z%04&`j_CF&-N+-Yh6sjSi&*$><3lJT-M>X2;E-h#D04x@kf zy1;!~7BJTPd|mKz>bp-_4X>09r|#pd>}#7S6KfRTa)u`1D<~A3{w*J#e|2D)7(ATk zm-PA4BgXdVzfH=yKP-Rkbo)c-EahD-${tgcI?%)*Q;7}=+7f+))kJi zwYq&yI%V|l5EzZMd$fnKFv8%1-oyi%@Ojdo=Vd>rDs|?B1SSd3ml&?4Gti{_uW{3o*4(z^v&^8nM#_gh0OR4w79BQ!GzZlPGf) zL$A2Cno0M6EgWA8uqLC2!?G^d;a698{;g?|A`;%YoW5&)9NOLF%C^i4JHtP|t}VMT zOmx9&?QZ>4p~M!RwB?t{2%BTcWe5vBzI;R>5SJvuO7HfKC9=9g*B!&u+0BKaRuqIF zU63vpcJ=mpp-95BE})TZLsy+<4g>!4gxBfr2FrqdiG$Uz^bJ0OH?}lV%ruw|;=9id z2)kb>((j_9?K7_X&b;u^=cE6}1qec9i<>bPwN2GW3p0qBP$49dkipR?mn=P7ZBx!0 zA4vSR`<=nxDfbl@c|kYU@7};I%%s;F%;F3BEg+e1=I^s*F(}OPMb+6Dzp4#811F5I zzKkRJ`=|f44F7W%W~!Ct3e6D}-L29XNG7ZvZ<_b=dbNoA@C6-jaMKohC<5<(QfAo( zmn^mc(#^qEx}`0zGXa+v#bQ?rUZBj9F&3at&s%D*%;VbOlU`0zYge~z-s}#flmks? zQv?;|ze z9MW*lBFz)fb@Y(^5>_O-1}bOVWGoBluJP=h|0=+m@L{c>Z4B7JcAjV&ebt2p1}RsU zQI`Wuf_X&(!F+&a8IO z_4sg7sDYAvM*AUlDBJOxzyl(uUcm3%Z>?8gX;Y4TkcxKBL*2ci}}V#5khvFbP>xp!+5Z z$hk{kNe=te9yB0|@ngB!H;Vjq{(<+h6X?TpeQ!X)4%TyKlQ;IFpEiVCsQ)kMHpYENIdwfAMb$2?;Qwc!sHOD(58 zn%tK1V?QWna#E2`6eP@2@^k@tlYibaMj#;J=Av)pz*7tF=f9AE3+lfg-SNF0ZQMCu zzw&sLK^4^W!Pav~V~Nj|y&=uZT81%z-e!T034cP;KIzQUhP=w2vxm0|hkH*`s>o1% z!!*v)fNpJkm``U4qS5sp5K<=}@lrSA)oOYXQ(*|3#QLcw*UIg^S)3SHPP9M(rM4i^ z@*Z$`E!%Qlgyshce}@a4+Wqkn8a`Q@6ibkaO)BV=pc?#*p!p$roIm5()E(2uwYa-) zVU73^@9Ov+QkA%|hHhL0=eXg{NJZap>UcoT^35o#)g+dAM3WWM4h#Gjq{eqs#|8TR z%xN%$Ksn|Kf)0JySN7^9>g;7>zh@nnms`(W--)b`|H@h)BItQM{omxdwrn~_gQz0i zA-2TLE9CEUSANS(0q*T&aBjT8g2eUn(8*Iy62wJo-!`}qW*HTbT{Y{+>5 z&&gIjkrBqJR^Ts2aQ+Y<5IG76{&p4MHQ|n9dFPsPD+(X4>Xc~w0e37-zn8Kb^fZQ- zMXmY4#5~;ihpHtZar?reQ(pgprzyu2XVaNkl3)7CBjdl&=$5YQF=LZ7 zxn!jkL@Fy|%ql>J*bq{iq0wQM45~v=E-*Uw2H8?&9NOyp2QA`^_@;`NsMvF27YwbT zG?xsAJDycO@$afSLw{WJrFnMVO89uqb2UaLG7I)DRijz%Fy|Ojb8|erDEXMS7!i?9mypM!-v~c#1 zbFWp^zfRq^N8+q5+L-FP#9;=p|0w z(n}os9XZ0iJDVArnW!F~erXEo#13)LUilt43{1}38*papfp*c=q5|H8C`L;r<&hx_$wmz&-y3$uiuOYWkO{NhZ0p1<7LX46Q4rGTMW;ljDtTUo4ZPsd@dOsW#2UedFBGe=M@U z=`~nW|3w7zjUVgChsD1GBmpSLQDlb#?+;`@l8P%NBPzuVaC%K4J;!_n!7ZN zzPlTohA6+^rE=KfF7Y1N_Co&Ql|-ye(Hr;5m1fqh(#|J*U)(X!`m8-(*eN+c}TwgeQ>axX;((86_(^r1FVuz$wrvbC%G$SqI@qdffoK6SWQmC373;A<_~ zGWymb3ph&x$)vOAD+NJxS9+oISN@GdkL;pp9}c|Jw2D>Chc&Ygx-tJKuUQYP%a+u> z<1r>7EB(RmN)@?83&f$n@%c835|_ps20lJl!4#cnvtQ`R7AeQGD@?r9_Q&_~1?|KMdnJr{? z4Kh_9ILM)L)SM0{$ylb}!~%~a{I;GknUZL1Bz-x~u6!C!mf?-G`JAnI zLiFF+&OaZ<3pmds7+b-W4$v4h631xQ0NFyOVtBAa4u+%yoLS{q`!&gv zzqk&Jx5>m5t!8JPp6B2}XqN$+xc5R=;TKwH^AHu?6!^QRnBs_s$VL|?i$>kfi@6{< zhm59WpDv-2C!@hdkV?kott%HBlc37k%6C;B@ENip7O2RllwirN(a(6E1Lg^O2V3W# z7ru8Y`t#gwFPD`6jyF!=e-2YMD3O0igR4!FeWf^wlyV4?t6mcvKNTU)ZVgYm2D>rQo z-_sBUA~ZKx>l<(dAt+Mi_tVU=>4O9^?ais8yI__Yw-dgYZPwQxhQb#uF-h72kfyI! z=)z`~X?6S0RL>VaJ+&q|G@Jc5gX#<_x$vDE=08VSP1IPkx0#=;wFPPoVCr!}k+t4s zZ$>c|m2PSviz}JJSG78;PMBt;CO}dfCvJs2``C@&8~SIa^i@3B6`n*FNEgSjQN03P z4wnI}aCWiPr3hajxol&ohwpW`G$abuh@yS6U>0xagT01qZIQL8rWlSg&eXD+=)Yajy&SY|&DsMiGhJ^i)HutFvx?{YoVoi3XS9D^jI zGtXnJ>hD|sT`TPmwopUVQ&GlM6@)Sb>2b)+me$rG?B-*YK+p`5sa-C? zIEh+XLnLH0JS8cpP$DUPWN2xK%GpvSo|5zrXP}Y06v7}`_X2ZHDwi6=~;!8Q5^hfVz!gpev} zs*%zZo>&0WkLO`rH~YJhD_6@1W2~BFh^;uR86v|Kf91@EB1jrqqn5Ud+yh`uNQ3Er zeR9ANC)=>)u~vo0{fT63-6IY1ImtIoYG?`*M%8A4>DNH9gAkmx(ly}y&?SNI{r8>N{Cvn^?-r!so(lj(RQ@nRWdM!OJI0P?CNj6Zjq zB5hx>B4+cW%&B04OHrcDwaa_FX88GuveFl@GKFfe+T@@}&)^uY5GrR)6|}Rrr!$!n zQN63nJC~ZatGbDL-j~zba5koUr+Ntuf?y`z>MDfzzrxNLD*VUwK7f_xAn!M=L3%5S zg_i;pGcvB9J!Pl<52-&B`vi%*mm~2Nc^~+S+f|x(-1O~(_cR{bNx&&G!7b@q*j+FN z6F6LwK5;wvBWq}ZViQ!Ixc{Ozop5oD^E;WQ3zE&+y8iF5fM#5ZJ>WP5Dy-ATMTB}RUxmuV7GOC;u(D}Temvp3Z=_=^ zW1WXL78kTM{xcj{x=i|f!`ppc&(b709AUnz}_%& z93QX(0j@+$k^DTUHO-h38hkB;{mUc;Zz9S9c(F?{t zlCwVD>%hU;kx7ehfX<5-9vrcIH=(!H2%kGc>UEw(-cd=}ruuAEr*X+EbVtx-Mq(`n zV=I=&G&Xeu8!#2|yTQ*$zzRs7YlJKIqjx-lQC%_@@}mxEzf79U`F;y9kkNj4WNvmo zCT||Cnwlku{x2Tz%i@YOmz}AM2D&LbbuOsYM2AP^-W`tH6zsnlfzN54BuhRR& z3z~)d(};puKc!oF@g*r#g;a9kIE@Y{U%pr;`MXrx2j4i;q^J4?W+!MYfM z^;s#nT)Va1ewkZ7tkG%IY={7XR7&9;l66T^3KlT#rsn3;5ZTSGwJ-hie}puW=|&Uj z|Ehl%t&;?XW>IB{&4{r!zP$XY9{cd-9TwOb@9^taB!Q2=Fe_~>Pq8yJWb&72b4pXB zHFL2yvEKzeUz3|fHXagxi3ReJME9y!kFd?ds;5wxD(U;>8{k+<8l%@JBf1AefNr-h_9xRMtnib*;)= zmk<#fqX++6-G^inEH@b9MYSkNo3rh`cmV<2p!wfKKQXd7XR6^&idf*K!J&{vhP+G- z{xQdtXAT>wGvnrCi@Rg|M0qK)J#mPh!|E;Y8-@j1?FLUesQ9lPTM`J1 zIr*Ty$@I_Fw!YjaRI4`?kSH!cCU{-VsS9hgjZP9$CKP;N8F&-KPON>%P&Ccma5W-R zP3iWfSq7`%mw@;@=o>gjst#mvDNPY{@3YzntY|8JanON~LpC<kP?v{q!Fo?4`{u@tZc`n|P&(Vc<`ZBvFwgY^H!cpII=&FL8XxQn z+#@|)@RHruB3xP|o|>W}G4&Y~JwYY{SKLXI!pYtJ<_B%P&Px)om*7i575pBC1J!Ki z+d~ZDv-o2S)8tQ|+^@uxo<2{EU~nU~EDMt+C|eI*PRzs0s)ni$_3N0I6Mwi3bZwG-jYd%)_X;dFy)Zi-%rdEP|lUr>*`47>g}h z{w#GIBV02H=P5`np|K|DcOMU2`BT!s70dVET|r9#s*R+u%`QejHjmYhY&jIr%0uFX zD_0Lwg8m5sRedE5YpX13U8snf@CsNmE)WN97&TN6j20bAk-Q67M$ukD5$woFiL9@! z$~n^Ub>d^rm)gr>ImM9EH#F>d0DyaBN6eYCq;TkBZ=z34CUZT`+Yo)+-fXNK&->j~ zv9mgw1I8(nTO$Y)m)j-r!}C(|6)Zc)(Q4rLh6(hrqqCgeg28dV{@8j|1aJXNtk;YE zlyP!aFO?n6b1_VkbKLjR1w-?pO2ZVW6TgZsHvz}1C`5^fOtxpy;*2fGI4gS9K^mL) zLjg`2wZ1v~FWzj0GB;z!A5gHYJH_>0Gy?=}xS_8WopE&l$z$=_E=Dg6{gH_BM0ad# zi92v?%w-3NkBFCmb1IybzMB9O*boOC2Tn0#3wB(68HeWaKuti*NBwR-rZ8o)&&?Qy zFOwHepBItI@XCCuxxKHWHL*~kbA_5%N8FQ0A*49gv(Jg6BQca`DmNbp<(H$RusZus z)o+pon_7awZ^3up>GVpfklE3@uoId(k~7{;;EQqwlpZA`Jk}GKJ;otUT_A~(O?d0Y zP#?cR16kab6Tw}RRG(lG7k|RL%g<~r|BQR|WWhC`2sxD{;3+9zJagRO$kbWvZ(J|i zp}Nb#3H)WD1{f7=*O!=Qu<7%|R@91qINh--Z=F>R3C7zg~wcr}J1$pDdz z-1|y_fhTi--_{9gO*hTkePh+`uk4HA#mh~<`NJZ@Ooj8!w9O|N&^o)IO9rrs0%Y*l z&P*t|YMU$u#6k~QD~@8xWim1&>|Q{_Q2~k2=~1NdXAmED9sWmqcfYPxabdVuk(KWm z_BrIqLi0_e6rtj1?1}YPap8b~xKVsULc%|9Z!OuZkKffp4ev%MglOg}*JWF=7}L?u+6%sO+0bp) zBb2s+ZqrFGywbgzSyY(wZCN!^!KpuLG%|WT|Qlc0>s6NV@AX%Kh_J^%AOW( z>K7~mdZ^oD)B(we4c#$s%V7<%Gpp9yoe+5u9#AEvRGevC{y2(0`={(O4-;hLN^M2R z+tWLh=>Uj70Rp~KT=5eBHw-jyD0>#;$3o~o_kAEy3cmL^ zmL-|H3;`&b#l2fnuZ7@4d4iSp(a*r}$i-(riil z-6M3W%2o``%E4_sxX8*sxL%lKM}FQ7aaF^=Dtp8k{>&)c5MXGN#k?p_n4%WqkuxCu zVfEHSInk<-8k7qWE%G=I$EjX-zM?1r*_pp|+1GvQKi-%j>dZlyW94 ziNtKi;P)gK!~_WZ%2VK}D6b2{Cd3z#QiQ^afKz-@!R`~iY!=>BA`OTxZ7r3v=&17j zFURvbzf(*GPj*t)WN%X2;H`os|gULcqy&{&?pa^LE*I zdf=B(Qs9vf_AmV``QnT&=_x_FjUawZzKdCCR`qDyjktlj?ZuG+&cpZ3lp);>BH1W z04s0FE;eifn&0J@KwZPCN6>7U^LP3ac48UMY>E#|rk)+AJqiX6OYtvg^(S^wtN_fZ z{wow}uM*f(vda!Y7qHXH4E3pfT0h^Z79UpE2DPod+c&dE#y|*39-KO=FUIX8ISc~- z@x~4v$mCtO4gT+oYi(r?^bG)fMn8ts!GF7t)RvPk&N}!~98_5mDgn2KqV_6}4`t`t zygvlVpkV07+?e$zAqg?JCj>&0odV@Aw(gW;PpBe}&d0yw=<)A62|{)#$Tv1lTjWUv zpb4EL^{th{p~R#E2L-+Y2h7+$Urh_@Jbf1^&?hMGfSyX5N|e%%Jpr}lB|oKkspb6i z8HE&c_z)C^1`yW4v!!`1aY!|G*`On_+-)ZtVUJz`2|w*IX$h=(>BUm?yMeEOF|{vE zeb~M=5q5qS|MIWy)x1iRh`%AiR|2+xa8o2JMkx}F-3QG5E!6b$WO8M{F4 z+PXLOE&~Q)RM;)`2SX^IHm9P%0~b!=D=Q1_op*~L8grAw`}Medcodk&gx0Udo_ZqW z#?zsOEkQc@x;^O95H<`9JS)%MGttRBY?e=eO#lKZr&~RPeNwIMsg?T7Cb4`or*-rl zCqlieneDv*iX6v{sF?F0gwGPQiukS1>^E|2c9^rft9+;?unJ9=hgSz;1{*ShFCqD> zs}*g?%&J0|Plx2%rR?)+Tvc~E0%XSiIU%d_uO=)GPA_f5+e~rwNO5lO^hPQ5!+I6`P zlS8CB;L4V@VJS!zf=Eixlpp~|!_E7>-zuIZS^BNHFjHaJ6#(nKlNC6HpECllBLD-` zo(23cABz4c=2W^~O&H8g>S8=lE|G>Q4~IpE7<8CYt;v6`)s27-uK@nBhE(`ul@E0Y zqZLmeNuIy=6Whs%WAzgA!1B^=>*-@bAklF0fTP$DL?cDZ*LEjAv_+>bfvWNUGE^9$ ztK@g`5l5Kyi0FJ){(NIMLH8ho1j@Ix6E{QH8Oyf_tZfCAW{Ri>6x7h5pNf==naMI-{Nv`&4-=ZeKZ- zxAM8p?OCzxt{*YX0Lje^K#r&IqTQtoUp`W8qgte9hZ(22>G61SD)Mn}tOHmLaM>d1 zQM2FesvWtlsrn6wXH|)A3h41J5+@N0Rvc@h9FAg&U@P`{4-p0(fp$PiXf<<6#QuHP zF~oH9vpZEr5p`P{K5&tBIh(Om?-{jG1mPNSAkXRgic>`L9HrXy9&EKztBF3VG2ehH z`7YoqTjRwnCnEeU$`$xX8LB1S#U;qr`eU7d{?Se~pBucB{RrlW?ZumBew$!&Vh@+4 zT-L;Y>6DpF;1m$6Qcb|4nXi7Xf7nx&Eavym=DHZTbD=JXnO@LnNkJhn1CE;+tCtK90z6Ep*RZQYkGV?l zeax8{^%NC@@+EavE|52ty4>EsSgEq$m;0gH3#4R4j`^p*H$p<8mR=}(whU+qX{wr2S5gz$hQ*s&F?5o=B(U;uS$dCCrIa_J45(>0a zA0JO2gO32riCUWUo_}?F^l2m*Mn;t#RfM+BXIRhRZ|xxr-JkDPb<#QJ9Wl~=k!VX( zOaV=`*JT%uH>@eLhj-TH9ulmwMcU4?seOEW9b^`Dw>|El`IfCVXa(iO)}gC_z`Y$h zogRYk3u%0$PTza??8Q7vOK2S*^0}>F6yO#4M(q#aR=$3zxpnx~kPEc09cBAzzpBoX zf?B_LCi`Qr(*1mS9+tH*^_*Z6jZLHB%5LWlJC3n#Pc|719gD-)2u#D*W={&U1uB3p zxusjD7=AACUt%ZKytk5L+Cb=R7x7QcSIMQQXz_Qf$;Cvm9q2Shc{z#e4-Ljgp&c%&63deVUOnWOeeQ{ zGyQnE;*<}>FfIVeG~)4{6CR%x0a8ttS z>e@%Fapd|JpEklQ`74qt@!9VKVaN&Yacwcw@59VA0?-E(4u{SSiwvXz1VHb{l8?|Kh<{SHz0dA`P z{QFj2lq20!aqyzGa{2~FIoV2FfIf!YU^g_yEmh7&uF&kp@WI&Wj9}6m$Kw6IR<6Y3 zuJj7I>+*d7OLeG}{f%B#D~Flsx1|}rz&8YEBjod0G#gVBsmoU{H1ayd0(NNLfx?!E zZ(&Tyeex+}+Sn5n`b!HxSiQy*bRj~4>J#aZ-e$BwKK$XI7duWHJn5gNFKia;iFL{r$;>}@oL1zVROQwKCX zUtMNDZGkJl2}+S*RG?Zk>PZ`xSfz{Ml86LuY`~B@( zxUCQVOMb`e&{ERv{ZWWOadCrxpvaKcSpi}-3j3O%>iBz-V8k@c~kJS*@Q$H{T=FP=Uuf>#nbZg93AbnG?@ck|j3!5%t zpOA&=W=i%aN)o>Gl2iw)lIy6*-Zh*KO#7G1naroxayB0^eQgqrWzFbhq%>FVM4TCW z?^ED=nq=VrAvfb7Q$@?zDn(lz=<fxJkQzu?48~>?D}sncbjp z%Q%7?*rD~er6Jk~vgGNNJS-1a?Q59Nr!v7-{`2ns!l%pO_OKa&6Y=dE-+5I;xK1VmI$qN=c83}D8(4ShG9#~af<#W-n+M`9MP`K zu8+9YUcMo9tA+jt@Uy}|NMcz`X%gJv^>Iu#9%zR5C602R0&(L?Z=S*H;xm(GrQ=dp z(NxfI(fSfy4@9LBQ5qO+8NKZO@wz&s&lP=|UBpO0y=keV2v21JGP%nrNU@H{cL^Dz zv=%>Lb=IU=g9ZLTJAKDDejPp4TJSAJ8Y zPBBjsC5RLZ6cU&M9}*UE+S(0tGCx{zdi8M( zpD$^9pZ759Z#SJjCTMla)MoM6DhbxY6B2$wupMi0!}AVfSpGw1qK7P-6+Ez-tJa2L zd=hWr`tvQ~Gv0}3P85?()ALC&6(69N3$92Yw7KT;9KGQXgFK7>{V$|7_o+pbuB!z^ z{@(js<0-hZ!Et*I1HHjk-40VOUNv?vz46?#_hyme6gZ)p@Czu+_#IKh4R}>Sq*YtX zW36P;>9DI{QGdPA^QeXX%@`q39OBnI97@|w;cMBn|rv0EHD8lgy1FsvN3 zjqF$KT-5TwbKotLb(K-q{!X1)`i9U}RRa{(0EGQ$Z^*kY(JW5MfyYC_Zp2d4&^I3_ z0HLxf(BNrw``k70NDb2f_}ac(?X;y!3~Bc7wo5u9SVmU__D^51sYVmBzRtbSNqOBq zP!&J*lc*M*zI~aRJPzR7G;BMfxUUv^PlbsF@3@?gsEiA4^jRn38Gz5c)h+dY51I4f#dKX zix>ORyt~M0>mc<}bv8zZlW?}E!%aAkY(h9-BcrZrt6voVm%s8P{IUJ|I}t^h^}$i) zX_0!{E|L3{9;You7lte@dg}_yF>S44`XaA-9(H@GAN?W)_#fIJwl3c(6>pfb4(FU` z72ACEFG%q8=1{QRYVy?~cJR9(_IW}j`-uju!13k+-s)5vB;(VU+eIRJCLK=KLVK~F zwTK}{at3pPqU>dtfob0IwK8-zH54)U$gDU^%L0itez+Q(p%EP4ydtkGwDD*e(?A?;XM_1Zs1Qld_giAtb z{9Gc;a`R&jHZ6weFiU?srIxvRW}u%dP}dd9r}2U?1xobJl0>I+Jvuu7JPzG zM{xO@133G&`g)%&92remBH-VY7uvDA$^B8QDvw4bpI!oU{~u!Oamx_+0pc$EP5_(I zO1@4E361e!Z^i&s-u%T9-o=y&Oar!-*$T-C4W(TYxPHOLX;_v8j*n* zHSqHw;Z%yaN1_?yG;jqvv`l<*Dc~7ZdOV{;qnti>hDb^jwlw&sUG3kvm6Ja*XX=SP z-aAYEbgP*i$hX4yzlUhTTe-fz0qTY&T_$)=)|5(>u*0@tO=L2&rtt~|NvNyfn5gEP zkI;lv+28rgKr`_j4Mh>{BwTbSGL_KKqHrLhoE$-oX|eNPv7(}%=7ugd@|QkDiinoK zJRnNUAVhdzcof}T1rys-#)>YC%zl>TDSvT)Lodmh*7K311nP1tNNCf*kp>)k+Rqj$ zKIAaMtYCO~^=vI6M_Zu|%4J(P8J6byUz*TKntZl=b#}bWk!~?ya#MmjS@u#?RQ0$M%dwCx8)JqDH<$Jj z$S-o`50+x|B-Kxzi7#(IL)?$wFV*}e(Io-6M+1Kgb4XUbkfV>RbmjN4Yd(c@)!w24 zEzP_lmxA+A+uNTx=$&+9^|#F#umEJ8eJy_2aRSF=4-Hk55_T)J> z1`?7cGJY5m?^|L95ktnRfUyR+0#qi}iWmFpZ2H2gfu^BB{pJpA*xEKO!OyEJu545U zoHDSc3^8teI^lMV^Me}7|Hso;#zg@yU2nkBEnQ1Wr!>gYEg>bHf^>s)hjd9dB7$^x zmvnb`gLJ>#dwt%o`)Pl(JO7zE=ggVu;*}**R6yEL8^H6Ov`oVQk!lIDVo^xV=*w){ zf5yf>lv^_XFkwXM6V8gvaX_z$8X`NK5eXbn+NDw!>gZLl0`&C1dv9P1>01}TO@Zhc%UQCkwV<4c z2?A;o8!3K2+HzEjD~n4e0)8qyI+gw~DCNXk*94M8cLc zBi;o0=DEi-xkNLlB1M>tzrr>2bONeV3i&a*N^I(`*oy}|%D~ML0^v6Ze(*<6Q_8QD z^XGX#;gv$pp+TbxR)%sHg6(;D!T-E8j_(0m<6!71*_fIB7Oa3ard-fLu=Kde~`6sre@pDXfa{KdljYGSBQGiBY@JG^~2(a zf|tB1>bV_nb3xadYb&Wwen!L8^z8XWrpwFK)9tuwg~-?se-axXGwBk{ z_x?zCrRvl3H68KKhuV&VayQOdu4~V7fWn7u+^+0h7vFNJ2)0US4qi_|e^Ic?#FY$3 z;wTW1fBm7{{}Zd7CD*@8;6_L2DaoGY(RVIEO!zE_4uBVv?*h1G)zC@^rvQufPgh~I zEVeLguXHmg;|z5z%cAmnZm98cJF~q?D^;Q%@kJJAiZj;5sBdko=E@5#dFX$L8bE`Z zEYK-KkOFXyBXCPQ^Xwx9g6lJYdKB%*Li#X)Yg^2fO25cuDlqF76D@{~ff+cl#=53s z#oa!R^9HC`{~Qce3YJ8Ij|>Sw>VVZp%!Ch<(iDY8(}P}o6}?_0c&Cr zeelcvRugzR8xJqdsS)lhB4SkL@{!YnU@u+)PC<2b{+o7)dS?G4F=$1Xs)#^u*J3CA ze_WE;2-04jt6#Iw+M;T)GA9}WfW$}b?;kd#U^+mwdqEZ+wO)Bl&sk^H)KDRPy?n&g z2@OXSUAHvivRWUzkzf{=UF5 zxw_)=UGYENMK}YN#A<97v@Qj4ZWSSZXw+duF}Unt2(Ix>a!b$;f5+Mag2PjA$j)g! z$Py^$j1$_^26yYB@twlZ?$lo!zmhBAjne0?FM{>6^AD~y{&8lcONmd>(#`GknRtD<-I&zUridKLRX0<) zH!ZaaWhZ|fSE%6lHDN->kQF#^);IX3nX=b&=UH?=d>G*^d8MaT6e6E+Bul~qG_8lx zp@|?05Gi4M2T6-uP{KqM;`BJ216<-XD)k9s)RAzr+zbAVh!BHxgixNA?*=~oKv&zR zX8rl<@PeLVy!XRBPGKvc-0^vmG6aYwV*(tJrM@dvgIT)Y;7@SJBZw-3gaJ1!94J&I zOh;$sEqsnG~!k(kuXXeF|0Xxb#2-A%?7&;`zj|6aR8Q{uHG23MqeaK+#`ON!A@wQilxKsg4@d4VXUzevLm#W5d=7FjJu@zMMyuj{CkaLXls5Q`~=lx}6tP8KbZ zn7sBCID+qVq#j|t(UN;yB)$c-_Ry=@8qOr-n%T>t{{c#T;y=y27T8oy2OuqjG|dm! z67YX^bmYsY3)H~@VTeDz)dk&ZF*1e{sztW)wm!k9v`Q-1+8BZ=v5Ri9OQDWejXN?2 zKsb>SP_BtRRIv0S{jL}(t`lvjwjda|hBhaF08;E#+*p|1Ni)K%E&GMq;A4_4BldCr zy%`Y(M+ai@c-g&Z zJIvY`Uuk*`YiF=W=<5mO4GI+8Z8c1;tZbHD8Nf>%i5A}zH8+e)(Ed*w#kUJsuYHP4 zov{K0DzB&Z6U}k6%v>C0aU6*wYfpYgEShbt!2WA=RW=@`{bPgjY5^1PRE;^pxJ68; zRYa@0!ZUGP(IHeN82B*9e+ft{SoK4c(lgMniNXV zZ46es^-k^ae>3u`pFY7p*6lP>zxoX*23w%l^hstAa+m0ntb{g>Bh)MS=+V5#8@!vO zIGm^{tqE5D4*dxJFN_Thpx&oG>GUHrcxf9|3e05F;+_dot}3(>%dChV8|~@ZfKy9>=++8|fIiKHZ)+D^ z=ep&dJXD&r@Omy@!E(R=wqo=%Lqhwi?kA{5qcR96O7$ndu{t~GYaSnd>WX3y3nt>t zOlymyxR>>cz_(#d%U+BU$b$46>Mh(L8zPy;eQ@wgn&>3b7a!_lKFJysr9c)o|e=vjFu$-dOrv|Bk)1w4rv$I)!)C*&kTSI||88xxHFaj08tXK&6j zd|Nu~FiFeOPK7UulOF?Ro6uJPumR&I082PcJV)~Kwnt0Cr<%u$+PH%=Y@Bs08I60MI0ju?r)ok>JgCt+-nnZ5 z88W5%0crv}TkQNK=UntP(~hTCXvSk_%^z(u!kry`Til+^jc1I?wlti=RP}JGs4ij=Em~;5K&(CJH-FW^9xS*Y zU!U+GCdb@hL?jmhcH_)?Rbxx3o#U<(<-U3}*Y$haSd1t$5Ax#l)}Y#|iTT4Ss5_*L zbOi@et0vSbR2)@k@6O*r)9`*0cV!qngq^JQU#uF;xRtP;CYR#oayRbLh*Qk@VcrS3zF znh*bDP8@sVJuvLw<4euv+bW;#$P;j;;Kkf^yk8RvMWkg@HUVR+pv-eIsWK~}$>N6L z;I%!;8O0#ZbTR7e^ia(sM&PFOD+VH^Fh*70E0o4G-XC-3C*SH-gY#k>!aCKvwrm!T z7`YEh$3CQw6VAx9CzblRci9NLPdub;zJ@YpW2+q|hTkifny z$se;@1S9Othbib6>^3u*C3lWXpJC{l90io^i!7Y!CJvq=JWn0BqL&J)M5hoHFPtdR zj7>0JOaGGK2^b-L%Lm`9Q1^2&oR(BHziW5+>GW5F+ZU;-gMHwfZ`+s#)t38d42OEGN(I=lpm!4V1ry zc*4ebK#6xDggA4A%ErqZfhD?I^%#aWxVn3ikXdth#|1?Gq7hIfp;|RJw-WIog0z20 zP%xkTo<+Thzf_R0ZPY=l3&%U-tyU!ye82@%GVSLJ+ zOc`ef6I-B_0eNIjVoyBF=B^0?WFa8^%VpI&jfz(Ad690QIBHag za6GCDE~tpEk%@~$`Tw*4ISZP?=eYH}ro6!afzEoBr&~I|J>;djWZo^s4g{oi;SOQ! zA&u@K_hAs9$-uBD1ya&SGdc)#%OehQUmHjbxukXQD(rLle7Gc@{nIa^7^OVT1fBMYy}NVg{TD2B~|ujWiWW_8{&`v{qFpojmu7HU> zPIq1eJB-I*ml^}p1Yn(sCaYC1HbL9 zaeAYi4n_8*>KsawvS}5TH%a*EVH8hu8L)X}qi<8$eP_F~P%+0bG@}AP6K_b2m0^3U z1)}bMQaRU!TNwzy64PJB5+~iFvDH||+7jfp80%eP=kSHJ#=0<>dzkO0@{eu9Q#Jjh z;{9=fMo!?(YVavEFVVvQ7?8o`%{qUm&P33n8ss)x(@k#kkB%5RcbxAB74dvTt+({} zs|ZHSU*DZaC3$;mdrM|K?!?Fyo`qj#@0jOX!oo}j8Q{*9M;3wq5!k~Os)Y_^HlU_s z(A1zd%1_8~cK*yJQhl#=g*f(O|0fAAJ-9{{6D%>{|0zLfzzx?F!S;xV$#nK)|L)4w zRUefp8(o>AI!rG|bFoJ&rD3*}M*o6&no2%@ADdzc^!>}e6?v%d#*hYp0M%Uh?BKS$ z*NYEq5;~&%^&Zd?^08fP7fHkm@o~8>?)`&;S$js`She5|`meD_{O82btnq@!#f#}k zWh=$3di&iiAR5#L!FM21TmX(whsOz}E=t~jt*t|x`$_)|E`#{|G+@O<%#JGY9(gXR z@1IHxu|x00jK}Mpu)piY#M<-n?*JiG{z?E($M^zIZvuahxJ=G2U>BVNTN@->o%~6c zwN5RGwkZ#E?^*~nSL|>Q z@(LG|sYsXSJYaJv{MOaKGX*2q4r8jkTpFOq*Q!7kTu)x#6Le`;##^`Qgxy>i)*kYd zHp~|Ho~Y0@LWM{T2<7{~S+V>Q?mEjwkS*LnzsUiV{TnUyxjidr+T*uD9+DMrK= zRwYTLhf_IbO*p2-W>#WqMC?v5&VJL^o9^G{m=fbb)w8256$#A(`)i{sJ0nO-DNxZ< zNANZ+PD8|`%pg}s!U*1P7Mco=1^h0W3b4nqI8Rt0{FthjyR+`$j1$MC6UWSdkC`Wy zwey>BotnXk3yeQ{9Kk)TF-4*nFfX|=ZJ0je)^}9Q6`;E~_&d)3wE4!6Kyav~yRel; z6aBsNFJeSC-hdK_%}|9StR9%+REhrHJ}3f!3E)G7132Kt3@nvRe@ZE0Oy*EgPjC+* zhTpU9xJmGiaR%uoVWo>LJ+b#X)=VCqu4GfHTw11_wX}A7Nx${i2q11Fs&xA7OcWi5uGT%Jk@)R<4#7PP zO_DWPaG5W*!Wk%W8Fh7X-<1eRFQ2YP9cCf^?WkxHL7o-QO}Ly&T?=r#Axh-bUrdv_ zY^BBfGVS(mswj4X&^;D1CiPrpvdY-#>{WQeaW|5!ap3Bn2V8nnO;@kZRHkp-&?4df zFaua!w}En6I}_WO*285JR;r1rEjULMl~~iV&>ped6$k&r`^oqqs4e8jx%w)X&kp)m z93L$e)@t#p)Tn3{;3T8XjQGdd5#;e*uRE9)#x>SP-8s;X3%Je-P!-4=7v;Hj!{)k>C#hz`pep<%^i_eli$A*=4`<4jakaH$yEsWxueJN{&ai>v z%FD62@ey4<02@#naC`lRUPK~0u32tgZ@0u<>A~Ie|Ky*(wtX*FQ;H9Bct*l9_l@z` z&CxTL?&qzRw}n|pebcKSJR~sS#WD0vq@bcZ=79{A3@k0&kv#&c#dW6T0a;ttgemgG ziBs)30*AX_-L=LJrrdXn+HNG#3BU2L8BQ`_AvpXIq~HHCH4M%(c|>b#?V3&lm$toN z8D#6|Z{7}kBzgaUy1mm_5g#0dTTQ?zT@m~lCFC>ZAd)w=q|RLNCzzNKT_ zHhZ41zP3GXZmD3zB=PJ6n9dKrl84i=<)`cI$~QVfK2hQLtQF1f@ZT3m&dl^Fm}v{^ z0^kPaMlRzPWIZgcuCJVM&B5LsL^k@7|FSd>-k*2+VjOU=&?Xc|lanT#%uhhro`>x& zxfZr_23%`@D0}#lI!C|@Ko!Yd>9b(Bc~#Bj#1a7okKIm*z#*(Bz^0M*9ApDi9i!c?CG=gb3JH;Oo_Ll@K^0h`TA#S3v@e6XdVTKyR zO3QG}2CQ+5+YLzfYrMNIej=Oq^n~Nrdp>ir=(T{NnaI%^yQ+x(0PpW)TbsN?Zqj&j zDoDFMq5}r-P{-MmS=Ro$RX7EWsm&aS)bvW)Hd`Mnr6*SOM9(#!dg9VxYe4|@&`P^r z8e;$M2zauR3Fs|Nv0Qw*z$qYBPliuLrB+cf=Z1+L*|U&{b}^q#j34@vwPCGAYh7!F zUN>Yo^&#Zlyq|jzG0<=GP$&NwPO!cR&TM`n&U`!;cr6FbUe|n4S?|RZ$S!mB(zUh$5;7jQ$Tc3DF5awDQa7Aujj!vN{iUn zP@@h^hn9Uqo3e9KUJ@9&L`g_d-OpQ$urej7866V3I_PJQ7I8sLfX;g#zhZsw-k!mv zf=!Z0*4+qYv!SVlxv}+DiO6LDcAs3-XA+Ae=vQf8Yj2)Ak&J)5Kkjy&DO77Sqzv7o zD=maQUS~qKSH>U0Z5XHB1|r*js!Sl953nc z{y>rdFPh_wR;mC7UXMp-Sk;1WlN0O^R?1VDyz-HTK*@Tc4=c1Nfa9+wDGR)Y@JnD? zmNy`2!w28J7RgNT12K!U38(WI7Q~V1XTpG8tUc9Ckfwr#}AU0OyvlC)o2^YRmQ+|1ZxAx{l|TP2p5j$G;GVcC5`? zQ{N=AVEJ)0f#*K8+L_XF7|i8rL1)+r}T8%8q$_NVKEUVaE5Xw zaMHPq;f>UNC4qzg0xy2FMF;wT9OM&)9LgBMFp$Y=F4P>e0T@XN;hB|AT7`O@vqN9k zf%g^#`olHogr5TMyA;*Qjyz;a1PbIsq~9zz1oVv=n{7CS&WmvDI-qo3hx{JvZQrS@ zyS-(70m|UlKRu!>d0qd2mtsZ6<_-vf8>4!t=Y=W2k%ZJ@+OzHHb{~A2thhXZ1Yupe zp7jy$$SDF&!XRhw@svVv&j5deo5qIm8VBL>hs)-llRDQbJfgbg*<18R6&Shh3rW|I zVoq(&w?aWdcUqF%Q&a31TE zj}gz#t1_P_7ROE<#QohWike*`cM&BI6EZz6d@F4W`u>X|CuFI+D=5H*uxtDfrl+4r z{RA?^f8qdj?s$@Ec09|4KoThN$f*s3Ieyk~P?R8eUUse8-QE9C!(s7m7G2%_OpNUN z+roWFXs}7Z;4M@3$w^+e*&{nF3BSMX0eiogwLMD^JOMg;WgoR)II{ncVKaM24DsfF z*!+jBMI)UBC3_w1&@43if;DOi@ojSrK|2b65EoHhbg*UcJW*B-7cstri{x8^ zObW>d9opZnJ|S)IwryT%v~`{D#P^cqVprcCyXTc=1<2DmN{u^|ULg;Qp^i6=!1l0Be;<-ej)Y(b?lEsxS4w z>+haDbXsob=VssZ`Q4w=&Q^VHE1x(S`*BVY2~!&0nj{P8=brMYKTW{Cy%>#Yy#-w! z8J~4RcUJmyzcE<&v7B>b0-1GUOa20gA1F>V*ls zi^1ZaCSZE@5c(^gUlE8WKsC%{pk|Ful7V*Q8|B-*#@Yt*dB)v3COxS05qY}%`9boS zJ<_H;-0ZYtCN^i3sT|X?%q5^M5tjZ#%}OK=YOELByf74Ef~cPhDtxSoxNM#qLUL|N_iJElr{&1d+~gF6=rmV7+NI9TeV z2LTB35fVdksS8_f$(5Xib!z;!BJ@`hQ11K0)^D1Zi{YGfRtR&+{1$OIc9ApLxjvGtXz7#mg6hNk&mVp@+rz}3mq~5VlD=oHtr2gV zh4=LrBQAzhHCf$e1h7lrkLP>K{Ib?-Vex9j+`|0W5ASPHh^+z6Zb0+n zl<&_@^8bPv^fxb__O}9wgh1?g%;9dLU3!Fl70euhRabLXD`n%+boAKWdT!7~xdUHK z9nr*Y?KFV+NPxJ8FVUJ{bu2f(p29)J z+TafAatJyx#;+FvqPs*xd;b#L{0j_KnI#jvXQkJycw_~EKa`TTvVulKV%YD0>?1lG z1Li=&z895TE)n`p!D)Cc6SL2%4Ff05p%0}J8Wx<}mr!PEPNm$1GJ6Tc$AnRI1{ z-RDnxz-6`_Pp=&LQ)Hvi8ldfQwu`#B*`ef6N<*WiY2J6TemS?t;%m3Ix^OzaVrG_= zNAc?W7C(CzBt_Zg78%|8gx6fEtxMqoV9{yqiMFTNV<>s6Erst?`_?~X*V5@SI2Ay- z_I5O;?GaL6f41A?a`tP1%71|zODs1_yI*f7Cvn=1W~RVL$vN1qxBWjm2_wdoKm;K& zXW4SEBg<9sP5!x*)@}oR_`3AEKn2WqUolv5s1U;6@pB_Qk?QINPj**`NHJ~k*z9W0 z-Xa0hk4zA>fjr)^c)lFsgb^r!`F3*V5dz4A8K4}@z_q4sSzLqTwiuwQRD|cl@s3WD zHmxjr^N5s@596>#o^RIwc!=zr-RlwcZioI)osWO3cTl|Z8Eh>gZKluyh5JK@CZPju zgbI~n-M!%PdI$2_P7=BO`3A1u^GS4}6Ow6#nx{(tNOM(?m5?uiXvw4t-99f@Lj)F^ z8KX!oKBD-IIiT+_EOr~2bWQ2)Plc*4(IMAcoBi!Tx4(6#_M}?FLLVE-{>-dMiXLzP zXrWM<&d zj|FYZV*BB2@`!&3$dWF?gK43+PbVpZA%0lb#)yaV#gPW>M~kqIB%2^3(xe zvaLq9FtWjMc@Lu7+K`w`{*K|jGmsT&I z_A9{sICEkx;TRUOD26DsX6`hfqW(cI`=`|^AFYzJ=5cV9N8ijZqgl31s)JEJtvXh@ zo=Mxb9*2j|X}WvuE>>UWc~g3=I%@A-8%RC!qfm$Ptvd4W`BPLR@1NTISxPDTI#j3H z$=r`Vhy@&!@gg*cLhZmlMGH*;&%>>g!RV}abs+gqY$dLV*%n@(Q9TR?%}!uK?oqrwVAT1{y+*w( z2s32LUe8C{r|3GSmJc8xe{1_VKbsxSm~i@H1u&%^7 zQB4Cv2-qk;M}x@N;F3Tt59aO>68&;-map=`$f(^$he#~DA;hsRnzXP+N3?zBqUVI_ z;l8?wTP2)}dTq#~;T%T$)bJML}+k1Wwh|4qu-$1ag#9>D_#OjTj_koijU@N-#PCeR2VPW{XMiWpy~IFWFy%Z64~_86mlu@e+K${DL4v0=c%33W;PKKm$uEP!TXGiYL7T(A)3uj6uUKd%Fqp z26@UleC{~)Jn#B!{!q9IVkBfXlErZskGcIAzN`~#UF8ABEo$31?gTwp*nsD_w2v>OJr~A z$6xr0#l((@rFhH%S*P&61nMcWG8 zdB_D5>g$?Ge0E}wOiTSLYSKjs-?V^h@SuBwKF52OpAggbOm(3D;_B+_pL%YrPt&BZ zRiwdFn_hejX^dKeBJ1UXc(QZMM>M_P@E-{@!g;Ci8TFAdcNsq^7;yX2mF@>ngU$O#P+3N(i5Si8S@A$6(iR8n z?*FF+fLt3%=p=m@7tafAj8^LbWzq-!ojQ5@t)#VWN9bjK{^N1109O9dEK($&vqtjz~7>p4+QxaHYTeVE*` z(UJ(~FRDUUvzC&-NO1PWiK{*}Yi6(CA~aziwRWG_g)f5>^7+3zQV5WUco!o6`P};w zvu8ABC^{(YiMe976YG0|ef-zMZ>q(#mWh^wMz+AB%NN^I?X)dk2WryLew+8=7WrR~ zR!WvLj$d9hj9nZBsJ=+%io0m2LF~u@;?T-(3F^6eChbPpww5h7vE=vFLLR#C}xQ!_bi;(4vl;wpV za~DIrO1F5>%UxRJLF^q$##3tI{4R*uP)6UxNA2uO^EuSX7uMK>@csd1LE~lbXlgp` zUVVg#U0bNYtUkng+vc9j8l8o~SFUe3CYSCfr{42b+3gPN%c3tgdPdVqBfF^(ZC;Se z_n7vNFQf`WP4*0Q5+#LX{#~)0co@IuO&$>|8Tao=(uH3hgza9gW*wQe)mZ~GS?4AV zo-E3J7l4M3{0p|deEa0J{kIo@FS+0DcYSX5GA%#K>KMNRx{_jiQJyAH^QM>W-Oyk1 zTWSW4cmyrOJ2|g20qQ>wr*e^V{JnUA%61G(tJ&r}h5r_I1tmo)*J{G2Q6)1P7Q>HP z+S5{Fp$IMvBr}?OYy`d$>pU)AS(USz_rzvg1-PGVsEJVoA}dec#p0QVPuth1F}<3T z#stAEj~Tbi6?@%>j6OjoC3W#vAKSk8a{uw`>Ag(;)YV@8*N&Buh9AX9fhwumA&sCY z)K3O=mSQr>sb1sm4rT8S>wbB5c5$=11KmJoS-dE7^5=zYY{>U$!AeMvXqL7iN`MQS zG&+%-z~=Vq^EVBjXW@|>5&M_etEP;;#K!6BvD3ME)ZwgxY8mk>vX0aMOLDb3J7IDZUkySl?io4Et81+XKjwXoGWe zO!TUEQ9in{5E;R{GLp}Q^oN(N^3{;PTB07`m~wg|!igheNp@4FImSskNh6pK+vOuy z!xd6G>h$XBBcPayn{j^bB`i$S3$A-4<7xf=a>lpyh-m%u@TeCRFJ?pEiNJ@lyg@2P z36z2kr~&D`*)UKVATYRcHvd|`cIWe?@A)lw2KPMup@>i zdVAnof@9%c`1NB3X$QZ6j}$rU{b<9>HE!nf;b22*pxIhqtVjQ^$pu`*EfqvXoXQVY zr;1TlLmi-~*&iq6!GOoVj$==dL@$nQm;PjuUi%erpsYC#imO6ip}&x&GEs1oM*1BN zJNKvSI+Z>YK5B-<<9OHO6r*8uQ|Ad+a)6VPL&|Q6RzuBx8 zni9V8<=z12ypfe{ON_b?){n(uSU>7?1`yt!D{n~6QsZ|xJZJix!x!XR{0T;rU*GjY zJF);50c`ge4O}EKy)%yv^W^T%h|)sDCLzy{ID<)6Y{NgsJXt`V{FBnozcU-)#LRUa zbbm6Gj|OmDg5qV~%^JK*A>HHIn}-L?{{B?8BPQjY!j+2||1sK)e%*-4=5`Lz`SnUk zq7w3Y^bOY|$y2aI`iaX5yX@7-eD&S}GvJj0CM4RKT1Ksx;dSvEF1FdQd&;`cN-G@| zNmeg*a+G2hYaOr;Y5szSnFT<2>`A`p16^buI_sSdOG$ zs;F}A8~Z|5Y$`iqbQNWT{-*^YX|XHhq}L_yms&rU(ALX7$oDm|KV6I)c1&UWk=$+Y za7LByTFC21?j;SkldE<9yun@U?Zv+O#x`UC0$972o>TE~&gp)yflY~IsK2{nYC+#| zWAoE$Sr~p6lJVPWN$$S6?(`@J(|rh~a1$_F)cR&Lo-po0eMfu1^kr!7qf4G;4bbW> z21B}@6sI+m#}=!?XK|SP_rAAawG|xa7>S=gnfE#N-zyCbtJ$s6s~bLNgP{=4i8x(^ z7#OrEbn;U>RMjyJ5$o(yUq8p%wO;TmcPZl@F4(PSWF0yyH)YVgQhGO;a-LT0TesA* z@AdN%_IKmu35}YAkc%#0iER=xCrdF}Z3wdJAh^GXsMu4}ahlEsAXLyGCn}(HH}lFec?z9 z+n00$v0jW=Rx5k%XB}SpFJ9cJ&Pdniy*e&DB!3Yt&W&VVP9X4N{!)}oOtXBDCMdyW z;|BYwz*H#aV4W-Lhw@pf`n&4oY;Ztq<6&Y~=~1EhLJDFo&CT0suG^f8E&%a}`pQXO z4_7-BKQE}Dn8=|Lk?`+aDxhmYz`ZN?%TQW`PP@VJhKI_#@V!SBY|Y%aiXt`1!AE${ zSVK$(?m{?m-;BdH8B)BE+vS9ON-f9Zp8r!Y+KXTA+J4t;GtZLkTRqnEx1?U6j4#qd z!i#uT;{1%hSRnH?BdZBM?Ix`~305LjDRqYlYt zcv|XVhap`Kpp0cC^93ONF~Z=XY=wM4WYfcc3r1!SP5Z)?xSaSwPuYBZ#~kj+3XN64 z>q+iZ=Y{28!KVG2M%YL;VVNq-T2qdT-_=2$V+Cud(jPt_yxoi+juVVq^>cH23eJo; zXnD$(#B?jwrwZkmizNBJzI&oyL5p#;e#C5!?Kg@VR;sUHm8%jhJ5GPE@DZ0-WNDor zxnCuTd6`WQwS&ZFLgTj*_N1e|YF8|Rv4*r0ZkHC<8@P>Sn}sGGW2J9_>Zh19-Jqa# zAWw3;0diK0ulG$^+KpodL2W2>+}yMY0t9{|`dS<$x{Sqw9{8@I`4^z^VLygcvF#pY z`+R9jYA|92)pb7E__HmyJjUK`(Puk3yQ3b1{z&Hs%b2V<+y~yQdKxqFj4cY>pEm7N zJ?Sc&U5(8)10(1weB*b@iu!23n0@ew56!~xJ|Bt-D#-~5br+PolqXjDe$M%7$&pPd zG^eepi(t9F2>VwP!WKm`0rom9ZJK>?|waAwD~s4dUI= zKIsX!zx#8F)KNne8xVsg+ot!?uS1+n!mwBm>l$4L5?1HHix?=5XTUDWhDy5e)J%H& zwO(c~%jAe_fUsk)pC;o^+l~>$ll+i}QwD1G)K4tN06UnG7p4tHP>UyRf*pB=N5IU* zgETn2dFApOHpFZQ$oNri;oKA^^_@8|z8M=K_ob#&`@N$c)-&O&EaNd|7M$s#ARW^r z#DCbiDbwHld&I?}n8jCKPzsL3$MyLj)veGK<9I>3&mP9ll~qUv%EG~s<|pVh)Auw) zzZrU@nYHaZ?66XY$0fV-M*lk$D3bAd3OMANng6cK3#0un4a)BvF-lrm zy-I34JGOAUGZ~tht?xp=BK>wMq&=RqbR8K&LUaCAmdyaagHER&fVaV`gr<`HTfqAj zL4dolppVMgMyqJJKg!S0h_4DV%EFR8mp)`|*c3zSkXnEDVk;{4WqnsR_pdD_ei<@2 zJjL%E&lqAw#5U(r}v}yld)jscsL1mE_rYH4(j|YYw2kVF?^+WNb9hG{& zGZ!v1QIGRFdSLoqD z&htU|8LWl8gS}dR?YUjTxt4bdzX4uSV0|FCO&?A13ID18g!AKg;CGizS9huVHWu$Yjh;q9Z1D=f+*T zsoGsgflbV^JDy7k56#@-K7#v?ElvM5h`zttyvYs8)XK>K3O#5PKoC!~=RARr_qB<6 z*0<|4e0+H*BM};<-KS|Tnb_soCBTHN8N3?mJ3=a6hBbq8Q@l6KEH=@^ZAK96RNVxu zzv)EWHWrWAXOrY^A1>Tuk4sCuainTCr;*F?Q2bmRLPRhrF=fg^aS(h+`wI_&K@_KceZhl}~9E0lN4}SiqYF zsk@;eAq_h0+t)}y^Q16}dLqJj`&(s@f zDua*`A6B^Zrp5Fb;PecT`m8THCwaX_Te6_M?=ku(C7P|dc;%l`ZM!w*VAX; z^4<7~++l-~}ul4d?)#xFk&y*x@o2#F@!6BaAcIr6q%RUUpuD`->vv zPvU2;f?1S%s;2fa+k_Nb!$jsH_5*ugF5*m#;e~cUvmez2d>f6jB7$Yf^ zK|?_pL(Nf-Qp33Z$vT2>_B;cj3pL|R3lgkwM{q*m`u6#@9SjxgR=R(&ibjDj>=bd! z!eWF_Q|D(|bg2GcO;_O-<@R+a7|LPjt^rg)xC+ueG$yL0$>zU%M(6W(X9v(H**?Y#(5yHhC?M=%66ZI61duo}Zmukb6e z&npLF&;Pt78F@Q7ZIl%=CJu@-s;M20+AV3(rw=cQzyKi5KSz3ZM+7&67=N9}hj9*5 zu!TmPY$|s6-b~xNDe!O7dvbh&PLe0HV=Eh-K09Ke4!b{y@?(}3`Td!vG=EKr^q&nL zUk4*wdta2}gaYb0UQKEJf+}rjSv`E#Yc;ohv!ZjY>kH0w%cZ@R4f&+T?+NAj_U?2= z2zLyJ6{R0+K&!e=Z|`?j#a0L&ELmtWGRYa=c#y8H{Agie( zA%k6|JB*z>MD6%VW7(@Gt~oMJl&tiN%&0)?ULCBI{7ocK1sTrNl2>{41EKJLT;dY} zCLmNVo@7I@d8BVP3)Qz4w7L^aIGl5J7yYqKA-k$2=zoIrL&wj07wP#O{^$a{v7kBq zHLKdxlrmvnS2Av4WfBT|U2|3<5y5>P+D)kdKF!+hch>q4i_!6X_O_HADy9x4_f2>N zKqeE5S}Vxlqat|p_*SGvG4e2JKz(`7=r2ZP(_88x#>p!0%Wqaf6JHo=Mcfr@a9G-q zMd{I^1NPTlWH0xg7`+kv(Df5)*?gZM-~1u*Vav0@?)Mp<^42m69N!4;^iiosn2>iH zdlH>*2YN{kRn}uAT$jZ@~6kiB9= z0;6Y!KA9Pnm;m~s?H*`^i`gC4`i%AzFUO0s_hgy$=>MI5t%Hn6f68h1hpaJ8+(Sk}5N!y^$#v8o-{t=>ia`k}J z$gZ=TbNJSwyH#_=`yLC3#OM5`;;x8FYD$?dML3vk`HL0hmxJ{c1$iUd1LU4UN68gK zoxEiujh2TO!>q~Rsn!;eoXDXTwrf&h7ISUni+UP*YTx{~fk|e#wJWljA_g~<2Z36O zxEF$W^E#9&S3eH{flO(^s_614?k zYPMsJd-Mg>5>*=Pn!%L47kAn?r_R%mo5q^V6p2a@r56I-G$EM&ca|Jd-&`d0h>UTO zi_)~K4d@RL+6LIs$nChpiqE)bzV7R1;ocev+kF|rs735+BoW82MuQveL5;rkE_W#_ z`3tu>{NZBP*twU@=q2WM@6knkK<(pDtIU>dW9sj6E$=z?Jr$0qgKYp(K@?2T`^ixG zi^g7(+s}U<^zj|b-Whgb)FJVHxe9OHQ7&DjR&tou>)rk;!3basH_L`J0|FTa2?>`9 zj%*X;{{N4jxi|`DZ7H-b&oXj9_NcrXjq>+Y_4Sv z7&t{X9R6W<^V{-bGCVEk0A>~Wdz6!sylV!UvE zU$-wzB+B>hPxn|IR@dPgwQYr`#7PoiSplt*w|%?6y)A5}>Gyfb%ml#|SVS?HHdv7q zW6cI+U08s*n~tehpsBjVuJS&Zw`7cp=me&J*8?C{dmykDGB?-UVyd3J%*s}SCLlWF za9a>!eZtI}j}B4}uO_~>i-?-ja=3Awa zE50?s2>wry{fAakm?NT?Oi_kjiOUnA0k;VbM6C!s*oQXoDCfzYt4bSMmvL;7V>aaq zwEQ-bJ~Onk2z^?%QtABs0!Roq=_Gw5AKuCtAB?hYG}OdwaoHG6j$Z5EL z61rmMjPWd9>#aKTtQiLk3xb2sO%eP2kNJbmlP9bHfKI(X70E5$Stnr04eDk(R*9GO zNYwj{3g0}P+59z&35^)}^58;Q4TZ$hRnxo+ae5arlX`6NJNS_q2Uf3W`2OVa$f;DD zfujg%RG7W@`7tMANzAFNFyfE*xZ7`{XuZyAc#ti*4@KTF8}_tqf4<&T?zxC`K~&Og z6CK_RO{;i?Vz>fHpiTz^j84z~o+f(O)($tP878OBk70sP7M1#n#4okb<}MCHnwiHl z&pY=bq;HLwRknZw8v)*wFZ+GaOP$X_3&0p2w>f6P~}oh z5V^g0+sz9%n;|k{7bwOgmXOeJ+TcoL-b2?A`RZT9&s2t#|Uy8BDw8FJS#r5Bg3~mqZQQ($#t?r(F zEEoFQ>#Rie7SH4ZX2#RW(w_mO2qQD*kXwbi9eXrC7T#*0;q} z(b-{C|GtguyI3!;KbjeV-Xl@^eD4*T*$V=9-NP_F*(HnKfct3)Uk?OM$ZH15^@hRS zrP(vAfmYwDs{?$)_~^!_T1zc{+iqL>9WSz+s-Fi>ps73|x>e9{d3tTqFtSp;@!nc~{CYr@}SMr``Vm^0M4Lm6_#OoIuY$tmoOzA3<1QA1-4x{MCEoxUfv!^jGE#G{M>#?sV>sTMTmCA z1Hd~R_5OCT9V~*Y!u)wIBfW`s?G{$EIGN9dwuG) z==!v+K@Z71?j~Nv5uA7&&+#zT4u-7_BmBx>E@N$Pyty1vqe*JiDgd?5uzT_}Y^I_M zBz`1TG|~A6V*I?OHslQ-a4b`q>1KhBX7x!ygYx%@vZQTe`lugMli#7QQX0Ze-7kj< z1gEc4<~8X#CtEY2Tw}I2+4L%(TiTO-tB1U9r5-SEtzp7i|K-awc_&oyG5JRn-TBM} zUiurMh~M~l&&#RX!l)5}!p6P$$=@Vgy{OJ^9slFK@pvdS_3#~;V0V~C^~ORpt7Lw1 z=X+V_hxw`ZU*ztnl!aBXml|}oO44kN@9UGztF0m#829j$!rLXBj(>DPqZ^&hA`Gzux^pPxl7blYT zGXQ>e?)P* zHIlIa(_BF~o%>6iO@fAfEf(L7FJ$<>=l~cYnqL2Il($xEvgj;OwpUC2@B=e%A9311 zd$H44AO#C>Yy&3_F+xb>ZUMvx={AP}nJjD0G7(=w&9(v&&kN$ekLjcao_n5PS}Q=galSrDE^&x zMdF7%?Yg)#eTBNL$YCdr1i?wRPm0$|I%}%06X(bYT?CK(Z6ZKWYiY%Xx%+A(7esd< z2|V|wG~dc6my!KD-B-@aBZGs<lk4LuJS%B2Z7I2RT%M+~NH ztSEVYuyCj;Q_UA~*nIJ^Cx;1)9Pn`3%`vMl?wXgdaWMk`U@V#{iUuS1g;VG3lp^WK zL`pU?+?aT6jAe`s`+8JDUzunp_>EO%PO`1dPr;4xLT8MKDgcO(! z-IHKtU4y-ZD;BsAkVq7)rMu^9EBwKDk5z#J8=vMMHX=CS$MlgkE6s^?1e+$eenC9+vUCSzcvm!)W}zp$=}Jsw>fyUh<&7Q=wUZt7oE)iXNNg@ z*g}Ho0dJ<_@U4H|ykuf});1LDxk&?@}b579eHTW+xlSZma+6UAdyz54S*9uzSi=;wE*&hB(;B0Ytu3vzZg1)7+NdguZHhU{}iDs^~KG= z=EzGT^bknu^up|dT+**=9eR%%K2U&~*(=SGYS5#rISaDbl3rMkURi$&go==)^n=seG4{(RYtu7b=7tHT~}=w9N}&i7z6| zyzKW;;^JLS6p)j5m1vx=5;gHw;eo#6XQsjxo|F#?w2+T45<~ZdnDm5-yS5sHBNV%7+MgrxF-lpiY_e9; zX4Ma!yEP8C@FLYtB^@i&%dCC^v|mb0J@FhY^$vHbrpYGz07^3G{)z;d!N{4KlQSE? zv|BLm$LzT{3RYlUs#-xe-5aF?plXtZTQlhzT;kTyz#B<*48C(t(-io#$hVX*9Umc` z)BODYK{HXHA9AgM=-h3ut&$=u_qzz<<;AwzuS5dz(HPEld) z&iG_;5op|9iOPsn%{ZKof2Ku2MaP9$8HvO}s{K+o3zXdo{b#Mf1FSI&mF@p+jejzA zwY!(;>;QVh*6DiQ+e3w#I6|N66k3RVU4o#^a)ZQ{db-M~b!QOdZ||2<^pEa{O5UR7!%Z_nTzEX1LV0PAdCs-()W*JBeJY^!vwOQ&)2I zZHdXgk(_!N<@-O6dWCgNVtpoK!eAP*J)ZzGt()Ill|ftMs~2BKk14)8er-S7o_9~T z(by#;g8dtDgI?%(1Zs#?cv%Y@Q7UfB*R~3JWnp!r=kMU|km#{=bJiW*XA!(?05wjb zsvB7)&6YISySO+t0u{JDcpG5|Qf9zEE=+ECXL_IaA2>&swfUt}P-ioKc=fy^5qJ=h zzv<=?)rRreG92k>?S&BSaukYr1pYqJN{;%<0pob1vBDk*`dwu@xD%nIbCY(lxb>jB z?A6I7uUS^jU$E%3arU=0q>dh@x@wp;FC-{N1z9?IvGNpGp(!AY5+0;|WLoQmuxK#_ zmF^EP-zTFJVHCPmi-A5Na5f|!D;g(?Xn~ya$Nore%DXC`Q};%w4CO2$b@D&RNl0E_> z50v#uUPV>kCXkR%Xm6W@aL`1~ZnMeng(SVwIO6O5QgZ9UxCc~i0*JQ|L2T?(z; ze-tLKI+hnR478TZpr1b3HLwjX7_tM|P~#^11bLcFCl8ijAzxp|Q20~f!@@|ya(ZWv z*1Nx+be#Y5A2M2Hbp7qFg0JaY)%fLTb(uP6YEiyR8-7B3!bFe@i`~h1Rh<{zM0MiX znQg?7w{Z>vGzb>I3CD>`&6X(&h7wyUy(fFVy^}$49mX%E!8O8XFA_4kL97-2MB z+ut%xiq?qjp$WU$ZQ{m?VTK&uc?&UQL`(isU&B=?@Nbj^;MDbf4$VXPa2s7cQ7ZDx zhI)uvYqxZ&H*EYy$ZCvslQlv*+V)eFvEwMWa!KITBoT~Ntq)o<8J=5vf)91LsMlyS z6(82=-rVQJD%@v-f&P7u{C-LA3i!gOE6(1JClXU73z6gqA)f?ltZK7cv9Z3hmRGzZ zBkp&|ax=Gd&L6We(Z^|!FJN*WF@e0+2y)6)5I7dP&0b^cxT;FAD@U_Sj4fyiou@hk zV%I=YBFG0Sr2t-nsgR@LJj?4^C(gNmRy(4~jvRX#&$(ITh>Y7m_ouFt%V*R5Bo z$A>XhOfx^oWTnd&ln?sL9!|1jtM1-`DaU+xu!X-+Qy0RcAAR{@uJYB=c{{@f zIHfqO3iMkac8yhpU=r$9U^#%9JXQe?m#(!-yj#_Z-opq4o`#tG_-BT`t9`~D-`Eq5 z)-6=>C;tX&=g~!e%+VQt_UJ-94E#zsc$ESUY%i`z@DWNMIcF?ifC3T&u2^%Y#nMX9 z;>VMWh(U%=<-AHkm6l^owN=$3IYHOo71B+d|1#Dju=2X!VbytmnI&3I^7JQM*99^L zD(UjJuSI0E*}PI~P?)4wj=A|l zo;2jE_m8FJ;cyLzYdq7K!{pTZs1EcW&{t5oofXz7S%raQq|t1^D8~ow>RGsUQ$hnI z$<3;JwO?Al+)E3ZU=$Y6zw4}NrMd1yGZT7C7QGW01`71)gBCBq~zTh4ZH$-3rsl%S<- z-Df^YE$XrlA+`^N7|~&`T=0q~{l9#empQhz%KgrqCH;JmV0I!kH{o?FXmMW8IgzYW zEkKtpf9TxPE{5k(RLs+iyF6W7T4!kl?XV9_f?Ma)z23a+bGKBW$=|bx_zqtn_P1@D z%GsIP_k|0_BSC+TK8nq3XTGj48e55ru#~H=Kn^s2Cr>Ux=Qm$kb{(px72mSy6 literal 0 HcmV?d00001 From 42066c88d5396559114f7b2de5cd7648689ed92d Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 6 Sep 2014 17:15:39 +0200 Subject: [PATCH 133/297] grub2: disable vga (640x350) fallback driver. This mode is incompatible on bay-trail. --- lfs/grub | 1 + src/patches/grub-2.00_disable_vga_fallback.patch | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 src/patches/grub-2.00_disable_vga_fallback.patch diff --git a/lfs/grub b/lfs/grub index 02cad0a43..04aaa0b25 100644 --- a/lfs/grub +++ b/lfs/grub @@ -77,6 +77,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-2.00_disable_vga_fallback.patch cd $(DIR_APP) && \ ./configure \ --prefix=/usr \ diff --git a/src/patches/grub-2.00_disable_vga_fallback.patch b/src/patches/grub-2.00_disable_vga_fallback.patch new file mode 100644 index 000000000..0d1dec97d --- /dev/null +++ b/src/patches/grub-2.00_disable_vga_fallback.patch @@ -0,0 +1,15 @@ +We have to remove the vga fallback because this not work on bay-trail and other +new intel onboard graphics. + +diff -Naur grub-2.00.org/grub-core/video/i386/pc/vga.c grub-2.00/grub-core/video/i386/pc/vga.c +--- grub-2.00.org/grub-core/video/i386/pc/vga.c 2012-06-06 23:21:02.000000000 +0200 ++++ grub-2.00/grub-core/video/i386/pc/vga.c 2014-09-05 21:41:04.790870375 +0200 +@@ -122,7 +122,7 @@ + { + grub_err_t err; + +- if ((width && width != VGA_WIDTH) || (height && height != VGA_HEIGHT)) ++// if ((width && width != VGA_WIDTH) || (height && height != VGA_HEIGHT)) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no matching mode found"); + + framebuffer.temporary_buffer = grub_malloc (VGA_HEIGHT * VGA_WIDTH); From 7f6e04258a78b4b58cebbb434ece7ed26d8ce1bb Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 9 Sep 2014 15:01:19 +0200 Subject: [PATCH 134/297] grub: Don't use VGA for serial installations On systems without a graphics card, grub did not count down the timeout. --- lfs/flash-images | 2 +- src/installer/main.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lfs/flash-images b/lfs/flash-images index 79701aad9..aeaace26e 100644 --- a/lfs/flash-images +++ b/lfs/flash-images @@ -167,7 +167,7 @@ endif ifeq "$(BOOTLOADER)" "grub" ifeq "$(SCON)" "1" # Enable serial console on GRUB - echo "GRUB_TERMINAL=\"serial console\"" >> $(MNThdd)/etc/default/grub + echo "GRUB_TERMINAL=\"serial\"" >> $(MNThdd)/etc/default/grub echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> $(MNThdd)/etc/default/grub sed -i -e "s|panic=10|& console=ttyS0,115200n8|g" $(MNThdd)/etc/default/grub diff --git a/src/installer/main.c b/src/installer/main.c index 1f7ec2b4b..e5da6ec9b 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -621,7 +621,7 @@ int main(int argc, char *argv[]) { goto EXIT; } - fprintf(f, "GRUB_TERMINAL=\"serial console\"\n"); + fprintf(f, "GRUB_TERMINAL=\"serial\"\n"); fprintf(f, "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=%d\"\n", SERIAL_BAUDRATE); fclose(f); From 77192e97b91cf58ed16a1f2fe69c3e4c17597a29 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 16 Sep 2014 20:45:50 +0200 Subject: [PATCH 135/297] installer: Fix typo You -> Your Reported-by: https://www.transifex.com/accounts/profile/luX78/ --- src/installer/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installer/main.c b/src/installer/main.c index e5da6ec9b..513ebf41a 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -469,7 +469,7 @@ int main(int argc, char *argv[]) { // Currently not supported } else { - errorbox(_("You disk configuration is currently not supported.")); + errorbox(_("Your disk configuration is currently not supported.")); fprintf(flog, "Num disks selected: %d\n", num_selected_disks); } From 9445ab4accc481844fa136e6bc30698e4121cdce Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 24 Sep 2014 21:02:22 +0200 Subject: [PATCH 136/297] bash: Fix for CVE-2014-6271 A flaw was found in the way Bash evaluated certain specially crafted environment variables. An attacker could use this flaw to override or bypass environment restrictions to execute shell commands. Certain services and applications allow remote unauthenticated attackers to provide environment variables, allowing them to exploit this issue. --- lfs/bash | 1 + src/patches/bash-4.3-CVE-2014-6271.patch | 91 ++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 src/patches/bash-4.3-CVE-2014-6271.patch diff --git a/lfs/bash b/lfs/bash index 862c94432..e09f91ceb 100644 --- a/lfs/bash +++ b/lfs/bash @@ -94,6 +94,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-paths-1.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-profile-1.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-3.2-ssh_source_bash.patch + cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash-4.3-CVE-2014-6271.patch cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) cd $(DIR_APP) && make $(MAKETUNING) diff --git a/src/patches/bash-4.3-CVE-2014-6271.patch b/src/patches/bash-4.3-CVE-2014-6271.patch new file mode 100644 index 000000000..7859d400f --- /dev/null +++ b/src/patches/bash-4.3-CVE-2014-6271.patch @@ -0,0 +1,91 @@ +*** ../bash-4.3-patched/builtins/common.h 2013-07-08 16:54:47.000000000 -0400 +--- builtins/common.h 2014-09-12 14:25:47.000000000 -0400 +*************** +*** 34,37 **** +--- 49,54 ---- + #define SEVAL_PARSEONLY 0x020 + #define SEVAL_NOLONGJMP 0x040 ++ #define SEVAL_FUNCDEF 0x080 /* only allow function definitions */ ++ #define SEVAL_ONECMD 0x100 /* only allow a single command */ + + /* Flags for describe_command, shared between type.def and command.def */ +*** ../bash-4.3-patched/builtins/evalstring.c 2014-02-11 09:42:10.000000000 -0500 +--- builtins/evalstring.c 2014-09-14 14:15:13.000000000 -0400 +*************** +*** 309,312 **** +--- 313,324 ---- + struct fd_bitmap *bitmap; + ++ if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def) ++ { ++ internal_warning ("%s: ignoring function definition attempt", from_file); ++ should_jump_to_top_level = 0; ++ last_result = last_command_exit_value = EX_BADUSAGE; ++ break; ++ } ++ + bitmap = new_fd_bitmap (FD_BITMAP_SIZE); + begin_unwind_frame ("pe_dispose"); +*************** +*** 369,372 **** +--- 381,387 ---- + dispose_fd_bitmap (bitmap); + discard_unwind_frame ("pe_dispose"); ++ ++ if (flags & SEVAL_ONECMD) ++ break; + } + } +*** ../bash-4.3-patched/variables.c 2014-05-15 08:26:50.000000000 -0400 +--- variables.c 2014-09-14 14:23:35.000000000 -0400 +*************** +*** 359,369 **** + strcpy (temp_string + char_index + 1, string); + +! if (posixly_correct == 0 || legal_identifier (name)) +! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST); +! +! /* Ancient backwards compatibility. Old versions of bash exported +! functions like name()=() {...} */ +! if (name[char_index - 1] == ')' && name[char_index - 2] == '(') +! name[char_index - 2] = '\0'; + + if (temp_var = find_function (name)) +--- 364,372 ---- + strcpy (temp_string + char_index + 1, string); + +! /* Don't import function names that are invalid identifiers from the +! environment, though we still allow them to be defined as shell +! variables. */ +! if (legal_identifier (name)) +! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); + + if (temp_var = find_function (name)) +*************** +*** 382,389 **** + report_error (_("error importing function definition for `%s'"), name); + } +- +- /* ( */ +- if (name[char_index - 1] == ')' && name[char_index - 2] == '\0') +- name[char_index - 2] = '('; /* ) */ + } + #if defined (ARRAY_VARS) +--- 385,388 ---- +*** ../bash-4.3-patched/subst.c 2014-08-11 11:16:35.000000000 -0400 +--- subst.c 2014-09-12 15:31:04.000000000 -0400 +*************** +*** 8048,8052 **** + goto return0; + } +! else if (var = find_variable_last_nameref (temp1)) + { + temp = nameref_cell (var); +--- 8118,8124 ---- + goto return0; + } +! else if (var && (invisible_p (var) || var_isset (var) == 0)) +! temp = (char *)NULL; +! else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0) + { + temp = nameref_cell (var); From 8c9b2d9e878137084820ab66356410d9fc93f100 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 25 Sep 2014 20:28:27 +0200 Subject: [PATCH 137/297] kernel: update to 3.10.55. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index 9c4ccec7d..a1be6d46a 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.54 +VER = 3.10.55 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.54-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.55-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 4120a4fb0e85784f8e7f310cecc41290 +$(DL_FILE)_MD5 = 5e9282099d35c2c4d8115a9b09352669 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = 76ee852810da08295841dce28fb6ce47 +$(GRS_PATCHES)_MD5 = bdee0a80cb139f28235b3bc696927b23 install : $(TARGET) From 6dc126e03fb19109264103bd61fff38bf1487147 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 25 Sep 2014 19:38:23 +0200 Subject: [PATCH 138/297] bash: Import fix for CVE-2014-7169 http://www.openwall.com/lists/oss-security/2014/09/25/10 Conflicts: lfs/bash --- lfs/bash | 1 + src/patches/bash-3.2-CVE-2014-7169.patch | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 src/patches/bash-3.2-CVE-2014-7169.patch diff --git a/lfs/bash b/lfs/bash index e09f91ceb..ee1946ec0 100644 --- a/lfs/bash +++ b/lfs/bash @@ -95,6 +95,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-profile-1.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-3.2-ssh_source_bash.patch cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash-4.3-CVE-2014-6271.patch + cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash-3.2-CVE-2014-7169.patch cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) cd $(DIR_APP) && make $(MAKETUNING) diff --git a/src/patches/bash-3.2-CVE-2014-7169.patch b/src/patches/bash-3.2-CVE-2014-7169.patch new file mode 100644 index 000000000..964b91f51 --- /dev/null +++ b/src/patches/bash-3.2-CVE-2014-7169.patch @@ -0,0 +1,11 @@ +*** ../bash-20140912/parse.y 2014-08-26 15:09:42.000000000 -0400 +--- parse.y 2014-09-24 22:47:28.000000000 -0400 +*************** +*** 2959,2962 **** +--- 2959,2964 ---- + word_desc_to_read = (WORD_DESC *)NULL; + ++ eol_ungetc_lookahead = 0; ++ + current_token = '\n'; /* XXX */ + last_read_token = '\n'; From 93d6ac8a9dbc7e94ac7d99c3658d6a1a995de14c Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 26 Sep 2014 12:46:44 +0200 Subject: [PATCH 139/297] bash: Import upstream fixes --- lfs/bash | 4 +- src/patches/bash-3.2-CVE-2014-7169.patch | 11 -- src/patches/bash/bash43-019 | 84 +++++++++++++ src/patches/bash/bash43-020 | 110 ++++++++++++++++++ src/patches/bash/bash43-021 | 52 +++++++++ src/patches/bash/bash43-022 | 56 +++++++++ src/patches/bash/bash43-023 | 104 +++++++++++++++++ src/patches/bash/bash43-024 | 54 +++++++++ .../bash43-025} | 32 +++++ src/patches/bash/bash43-026 | 60 ++++++++++ 10 files changed, 553 insertions(+), 14 deletions(-) delete mode 100644 src/patches/bash-3.2-CVE-2014-7169.patch create mode 100644 src/patches/bash/bash43-019 create mode 100644 src/patches/bash/bash43-020 create mode 100644 src/patches/bash/bash43-021 create mode 100644 src/patches/bash/bash43-022 create mode 100644 src/patches/bash/bash43-023 create mode 100644 src/patches/bash/bash43-024 rename src/patches/{bash-4.3-CVE-2014-6271.patch => bash/bash43-025} (79%) create mode 100644 src/patches/bash/bash43-026 diff --git a/lfs/bash b/lfs/bash index ee1946ec0..ae5a2837a 100644 --- a/lfs/bash +++ b/lfs/bash @@ -87,15 +87,13 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) sed -e "s/filename, RTLD_LAZY/filename, RTLD_NOW/" \ -i $(DIR_APP)/builtins/enable.def - for i in $$(seq 1 18); do \ + for i in $$(seq 1 26); do \ cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash43-$$(printf "%03d" "$${i}") || exit 1; \ done cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-paths-1.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-profile-1.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-3.2-ssh_source_bash.patch - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash-4.3-CVE-2014-6271.patch - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash-3.2-CVE-2014-7169.patch cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS) cd $(DIR_APP) && make $(MAKETUNING) diff --git a/src/patches/bash-3.2-CVE-2014-7169.patch b/src/patches/bash-3.2-CVE-2014-7169.patch deleted file mode 100644 index 964b91f51..000000000 --- a/src/patches/bash-3.2-CVE-2014-7169.patch +++ /dev/null @@ -1,11 +0,0 @@ -*** ../bash-20140912/parse.y 2014-08-26 15:09:42.000000000 -0400 ---- parse.y 2014-09-24 22:47:28.000000000 -0400 -*************** -*** 2959,2962 **** ---- 2959,2964 ---- - word_desc_to_read = (WORD_DESC *)NULL; - -+ eol_ungetc_lookahead = 0; -+ - current_token = '\n'; /* XXX */ - last_read_token = '\n'; diff --git a/src/patches/bash/bash43-019 b/src/patches/bash/bash43-019 new file mode 100644 index 000000000..a93714beb --- /dev/null +++ b/src/patches/bash/bash43-019 @@ -0,0 +1,84 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-019 + +Bug-Reported-by: John Lenton +Bug-Reference-ID: +Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476 + +Bug-Description: + +The -t timeout option to `read' does not work when the -e option is used. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/lib/readline/input.c 2014-01-10 15:07:08.000000000 -0500 +--- lib/readline/input.c 2014-05-22 18:40:59.000000000 -0400 +*************** +*** 535,540 **** +--- 538,551 ---- + else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM) + return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); ++ /* keyboard-generated signals of interest */ + else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT) + RL_CHECK_SIGNALS (); ++ /* non-keyboard-generated signals of interest */ ++ else if (_rl_caught_signal == SIGALRM ++ #if defined (SIGVTALRM) ++ || _rl_caught_signal == SIGVTALRM ++ #endif ++ ) ++ RL_CHECK_SIGNALS (); + + if (rl_signal_event_hook) +*** ../bash-4.3-patched/builtins/read.def 2013-09-02 11:54:00.000000000 -0400 +--- builtins/read.def 2014-05-08 11:43:35.000000000 -0400 +*************** +*** 443,447 **** + #if defined (READLINE) + if (edit) +! add_unwind_protect (reset_attempted_completion_function, (char *)NULL); + #endif + falarm (tmsec, tmusec); +--- 443,450 ---- + #if defined (READLINE) + if (edit) +! { +! add_unwind_protect (reset_attempted_completion_function, (char *)NULL); +! add_unwind_protect (bashline_reset_event_hook, (char *)NULL); +! } + #endif + falarm (tmsec, tmusec); +*************** +*** 1022,1025 **** +--- 1025,1029 ---- + old_attempted_completion_function = rl_attempted_completion_function; + rl_attempted_completion_function = (rl_completion_func_t *)NULL; ++ bashline_set_event_hook (); + if (itext) + { +*************** +*** 1033,1036 **** +--- 1037,1041 ---- + rl_attempted_completion_function = old_attempted_completion_function; + old_attempted_completion_function = (rl_completion_func_t *)NULL; ++ bashline_reset_event_hook (); + + if (ret == 0) +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 18 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 19 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-020 b/src/patches/bash/bash43-020 new file mode 100644 index 000000000..5f533ef8d --- /dev/null +++ b/src/patches/bash/bash43-020 @@ -0,0 +1,110 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-020 + +Bug-Reported-by: Jared Yanovich +Bug-Reference-ID: <20140417073654.GB26875@nightderanger.psc.edu> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00065.html + +Bug-Description: + +When PS2 contains a command substitution, here-documents entered in an +interactive shell can sometimes cause a segmentation fault. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/shell.h 2012-12-25 21:11:01.000000000 -0500 +--- shell.h 2014-06-03 09:24:28.000000000 -0400 +*************** +*** 169,173 **** + int expand_aliases; + int echo_input_at_read; +! + } sh_parser_state_t; + +--- 169,174 ---- + int expand_aliases; + int echo_input_at_read; +! int need_here_doc; +! + } sh_parser_state_t; + +*** ../bash-4.3-patched/parse.y 2014-05-14 09:16:40.000000000 -0400 +--- parse.y 2014-04-30 09:27:59.000000000 -0400 +*************** +*** 2643,2647 **** + + r = 0; +! while (need_here_doc) + { + parser_state |= PST_HEREDOC; +--- 2643,2647 ---- + + r = 0; +! while (need_here_doc > 0) + { + parser_state |= PST_HEREDOC; +*************** +*** 6076,6079 **** +--- 6076,6080 ---- + ps->expand_aliases = expand_aliases; + ps->echo_input_at_read = echo_input_at_read; ++ ps->need_here_doc = need_here_doc; + + ps->token = token; +*************** +*** 6124,6127 **** +--- 6125,6129 ---- + expand_aliases = ps->expand_aliases; + echo_input_at_read = ps->echo_input_at_read; ++ need_here_doc = ps->need_here_doc; + + FREE (token); +*** ../bash-4.3-patched/y.tab.c 2014-04-07 11:56:12.000000000 -0400 +--- y.tab.c 2014-07-30 09:55:57.000000000 -0400 +*************** +*** 4955,4959 **** + + r = 0; +! while (need_here_doc) + { + parser_state |= PST_HEREDOC; +--- 5151,5155 ---- + + r = 0; +! while (need_here_doc > 0) + { + parser_state |= PST_HEREDOC; +*************** +*** 8388,8391 **** +--- 8584,8588 ---- + ps->expand_aliases = expand_aliases; + ps->echo_input_at_read = echo_input_at_read; ++ ps->need_here_doc = need_here_doc; + + ps->token = token; +*************** +*** 8436,8439 **** +--- 8633,8637 ---- + expand_aliases = ps->expand_aliases; + echo_input_at_read = ps->echo_input_at_read; ++ need_here_doc = ps->need_here_doc; + + FREE (token); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 19 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 20 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-021 b/src/patches/bash/bash43-021 new file mode 100644 index 000000000..fd1c945ec --- /dev/null +++ b/src/patches/bash/bash43-021 @@ -0,0 +1,52 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-021 + +Bug-Reported-by: Jared Yanovich +Bug-Reference-ID: <20140625225019.GJ17044@nightderanger.psc.edu> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00070.html + +Bug-Description: + +When the readline `revert-all-at-newline' option is set, pressing newline +when the current line is one retrieved from history results in a double free +and a segmentation fault. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/lib/readline/misc.c 2012-09-01 18:03:11.000000000 -0400 +--- lib/readline/misc.c 2014-06-30 13:41:19.000000000 -0400 +*************** +*** 462,465 **** +--- 462,466 ---- + /* Set up rl_line_buffer and other variables from history entry */ + rl_replace_from_history (entry, 0); /* entry->line is now current */ ++ entry->data = 0; /* entry->data is now current undo list */ + /* Undo all changes to this history entry */ + while (rl_undo_list) +*************** +*** 469,473 **** + FREE (entry->line); + entry->line = savestring (rl_line_buffer); +- entry->data = 0; + } + entry = previous_history (); +--- 470,473 ---- + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 20 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 21 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-022 b/src/patches/bash/bash43-022 new file mode 100644 index 000000000..7ce39ec0a --- /dev/null +++ b/src/patches/bash/bash43-022 @@ -0,0 +1,56 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-022 + +Bug-Reported-by: scorp.dev.null@gmail.com +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html + +Bug-Description: + +Using nested pipelines within loops with the `lastpipe' option set can result +in a segmentation fault. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/execute_cmd.c 2014-01-31 10:54:52.000000000 -0500 +--- execute_cmd.c 2014-06-19 08:05:49.000000000 -0400 +*************** +*** 2410,2414 **** + lstdin = wait_for (lastpid); + #if defined (JOB_CONTROL) +! exec_result = job_exit_status (lastpipe_jid); + #endif + unfreeze_jobs_list (); +--- 2425,2438 ---- + lstdin = wait_for (lastpid); + #if defined (JOB_CONTROL) +! /* If wait_for removes the job from the jobs table, use result of last +! command as pipeline's exit status as usual. The jobs list can get +! frozen and unfrozen at inconvenient times if there are multiple pipelines +! running simultaneously. */ +! if (INVALID_JOB (lastpipe_jid) == 0) +! exec_result = job_exit_status (lastpipe_jid); +! else if (pipefail_opt) +! exec_result = exec_result | lstdin; /* XXX */ +! /* otherwise we use exec_result */ +! + #endif + unfreeze_jobs_list (); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 21 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 22 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-023 b/src/patches/bash/bash43-023 new file mode 100644 index 000000000..d1e4e9d7c --- /dev/null +++ b/src/patches/bash/bash43-023 @@ -0,0 +1,104 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-023 + +Bug-Reported-by: Tim Friske +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00056.html + +Bug-Description: + +Bash does not correctly parse process substitution constructs that contain +unbalanced parentheses as part of the contained command. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/subst.h 2014-01-11 21:02:27.000000000 -0500 +--- subst.h 2014-07-20 17:25:01.000000000 -0400 +*************** +*** 83,87 **** + Start extracting at (SINDEX) as if we had just seen "<(". + Make (SINDEX) get the position just after the matching ")". */ +! extern char *extract_process_subst __P((char *, char *, int *)); + #endif /* PROCESS_SUBSTITUTION */ + +--- 83,87 ---- + Start extracting at (SINDEX) as if we had just seen "<(". + Make (SINDEX) get the position just after the matching ")". */ +! extern char *extract_process_subst __P((char *, char *, int *, int)); + #endif /* PROCESS_SUBSTITUTION */ + +*** ../bash-4.3-patched/subst.c 2014-05-15 08:26:45.000000000 -0400 +--- subst.c 2014-07-20 17:26:44.000000000 -0400 +*************** +*** 1193,1202 **** + Make (SINDEX) get the position of the matching ")". */ /*))*/ + char * +! extract_process_subst (string, starter, sindex) + char *string; + char *starter; + int *sindex; + { + return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND)); + } + #endif /* PROCESS_SUBSTITUTION */ +--- 1193,1208 ---- + Make (SINDEX) get the position of the matching ")". */ /*))*/ + char * +! extract_process_subst (string, starter, sindex, xflags) + char *string; + char *starter; + int *sindex; ++ int xflags; + { ++ #if 0 + return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND)); ++ #else ++ xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0); ++ return (xparse_dolparen (string, string+*sindex, sindex, xflags)); ++ #endif + } + #endif /* PROCESS_SUBSTITUTION */ +*************** +*** 1786,1790 **** + if (string[si] == '\0') + CQ_RETURN(si); +! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si); + free (temp); /* no SX_ALLOC here */ + i = si; +--- 1792,1796 ---- + if (string[si] == '\0') + CQ_RETURN(si); +! temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0); + free (temp); /* no SX_ALLOC here */ + i = si; +*************** +*** 8250,8254 **** + t_index = sindex + 1; /* skip past both '<' and LPAREN */ + +! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/ + sindex = t_index; + +--- 8256,8260 ---- + t_index = sindex + 1; /* skip past both '<' and LPAREN */ + +! temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/ + sindex = t_index; + +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 22 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 23 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-024 b/src/patches/bash/bash43-024 new file mode 100644 index 000000000..a24b8fbbc --- /dev/null +++ b/src/patches/bash/bash43-024 @@ -0,0 +1,54 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-024 + +Bug-Reported-by: Corentin Peuvrel +Bug-Reference-ID: <53CE9E5D.6050203@pom-monitoring.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-07/msg00021.html + +Bug-Description: + +Indirect variable references do not work correctly if the reference +variable expands to an array reference using a subscript other than 0 +(e.g., foo='bar[1]' ; echo ${!foo}). + +Patch (apply with `patch -p0'): + +*** ../bash-4.3-patched/subst.c 2014-06-03 09:32:44.000000000 -0400 +--- subst.c 2014-07-23 09:58:19.000000000 -0400 +*************** +*** 7375,7379 **** + + if (want_indir) +! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at); + else + tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind); +--- 7445,7455 ---- + + if (want_indir) +! { +! tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at); +! /* Turn off the W_ARRAYIND flag because there is no way for this function +! to return the index we're supposed to be using. */ +! if (tdesc && tdesc->flags) +! tdesc->flags &= ~W_ARRAYIND; +! } + else + tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 23 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 24 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash-4.3-CVE-2014-6271.patch b/src/patches/bash/bash43-025 similarity index 79% rename from src/patches/bash-4.3-CVE-2014-6271.patch rename to src/patches/bash/bash43-025 index 7859d400f..721aca030 100644 --- a/src/patches/bash-4.3-CVE-2014-6271.patch +++ b/src/patches/bash/bash43-025 @@ -1,3 +1,20 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-025 + +Bug-Reported-by: Stephane Chazelas +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +Under certain circumstances, bash will execute user code while processing the +environment for exported function definitions. + +Patch (apply with `patch -p0'): + *** ../bash-4.3-patched/builtins/common.h 2013-07-08 16:54:47.000000000 -0400 --- builtins/common.h 2014-09-12 14:25:47.000000000 -0400 *************** @@ -89,3 +106,18 @@ ! else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0) { temp = nameref_cell (var); +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 24 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 25 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash43-026 b/src/patches/bash/bash43-026 new file mode 100644 index 000000000..e48141b01 --- /dev/null +++ b/src/patches/bash/bash43-026 @@ -0,0 +1,60 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 4.3 +Patch-ID: bash43-026 + +Bug-Reported-by: Tavis Ormandy +Bug-Reference-ID: +Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929 + +Bug-Description: + +Under certain circumstances, bash can incorrectly save a lookahead character and +return it on a subsequent call, even when reading a new line. + +Patch (apply with `patch -p0'): + +*** ../bash-4.3.25/parse.y 2014-07-30 10:14:31.000000000 -0400 +--- parse.y 2014-09-25 20:20:21.000000000 -0400 +*************** +*** 2954,2957 **** +--- 2954,2959 ---- + word_desc_to_read = (WORD_DESC *)NULL; + ++ eol_ungetc_lookahead = 0; ++ + current_token = '\n'; /* XXX */ + last_read_token = '\n'; +*** ../bash-4.3.25/y.tab.c 2014-07-30 10:14:32.000000000 -0400 +--- y.tab.c 2014-09-25 20:21:48.000000000 -0400 +*************** +*** 5266,5269 **** +--- 5266,5271 ---- + word_desc_to_read = (WORD_DESC *)NULL; + ++ eol_ungetc_lookahead = 0; ++ + current_token = '\n'; /* XXX */ + last_read_token = '\n'; +*************** +*** 8540,8542 **** + } + #endif /* HANDLE_MULTIBYTE */ +- +--- 8542,8543 ---- +*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500 +--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 25 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 26 + + #endif /* _PATCHLEVEL_H_ */ From f9ed7916f6baf5d6efd174182fd29f97a56d7499 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Mon, 29 Sep 2014 13:40:12 +0200 Subject: [PATCH 140/297] e1000e: fix modul path. --- lfs/e1000e | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lfs/e1000e b/lfs/e1000e index 78dbec1c6..d23369c56 100644 --- a/lfs/e1000e +++ b/lfs/e1000e @@ -25,7 +25,7 @@ include Config VERSUFIX = ipfire$(KCFG) -MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/e1000e +MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/intel/e1000e VER = 3.1.0.2 From 416bf5f3f9c24b5b7e57d07e5aec0cbff1e249a6 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Mon, 29 Sep 2014 13:44:26 +0200 Subject: [PATCH 141/297] fix merge problem. --- config/rootfiles/{core => oldcore}/82/filelists/iputils | 0 config/rootfiles/{core => oldcore}/82/filelists/openssl-compat | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename config/rootfiles/{core => oldcore}/82/filelists/iputils (100%) rename config/rootfiles/{core => oldcore}/82/filelists/openssl-compat (100%) diff --git a/config/rootfiles/core/82/filelists/iputils b/config/rootfiles/oldcore/82/filelists/iputils similarity index 100% rename from config/rootfiles/core/82/filelists/iputils rename to config/rootfiles/oldcore/82/filelists/iputils diff --git a/config/rootfiles/core/82/filelists/openssl-compat b/config/rootfiles/oldcore/82/filelists/openssl-compat similarity index 100% rename from config/rootfiles/core/82/filelists/openssl-compat rename to config/rootfiles/oldcore/82/filelists/openssl-compat From 7d6beb3e941674118185cf956699aaae47e976b5 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Jul 2014 22:02:03 +0200 Subject: [PATCH 142/297] readline: Re-add accidentially deleted patches of -compat package --- src/patches/readline/readline52-001 | 30 +++ src/patches/readline/readline52-002 | 49 +++++ src/patches/readline/readline52-003 | 37 ++++ src/patches/readline/readline52-004 | 70 ++++++ src/patches/readline/readline52-005 | 328 ++++++++++++++++++++++++++++ src/patches/readline/readline52-006 | 62 ++++++ src/patches/readline/readline52-007 | 65 ++++++ src/patches/readline/readline52-008 | 70 ++++++ src/patches/readline/readline52-009 | 45 ++++ src/patches/readline/readline52-010 | 47 ++++ src/patches/readline/readline52-011 | 32 +++ src/patches/readline/readline52-012 | 150 +++++++++++++ src/patches/readline/readline52-013 | 135 ++++++++++++ src/patches/readline/readline52-014 | 49 +++++ 14 files changed, 1169 insertions(+) create mode 100644 src/patches/readline/readline52-001 create mode 100644 src/patches/readline/readline52-002 create mode 100644 src/patches/readline/readline52-003 create mode 100644 src/patches/readline/readline52-004 create mode 100644 src/patches/readline/readline52-005 create mode 100644 src/patches/readline/readline52-006 create mode 100644 src/patches/readline/readline52-007 create mode 100644 src/patches/readline/readline52-008 create mode 100644 src/patches/readline/readline52-009 create mode 100644 src/patches/readline/readline52-010 create mode 100644 src/patches/readline/readline52-011 create mode 100644 src/patches/readline/readline52-012 create mode 100644 src/patches/readline/readline52-013 create mode 100644 src/patches/readline/readline52-014 diff --git a/src/patches/readline/readline52-001 b/src/patches/readline/readline52-001 new file mode 100644 index 000000000..0bec9a278 --- /dev/null +++ b/src/patches/readline/readline52-001 @@ -0,0 +1,30 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-001 + +Bug-Reported-by: ebb9@byu.net +Bug-Reference-ID: <45540862.9030900@byu.net> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00017.html + http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00016.html + +Bug-Description: + +In some cases, code that is intended to be used in the presence of multibyte +characters is called when no such characters are present, leading to incorrect +display position calculations and incorrect redisplay. + +Patch: + +*** ../readline-5.2/display.c Thu Sep 14 14:20:12 2006 +--- display.c Mon Nov 13 17:55:57 2006 +*************** +*** 2381,2384 **** +--- 2409,2414 ---- + if (end <= start) + return 0; ++ if (MB_CUR_MAX == 1 || rl_byte_oriented) ++ return (end - start); + + memset (&ps, 0, sizeof (mbstate_t)); diff --git a/src/patches/readline/readline52-002 b/src/patches/readline/readline52-002 new file mode 100644 index 000000000..b0d8c9223 --- /dev/null +++ b/src/patches/readline/readline52-002 @@ -0,0 +1,49 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-002 + +Bug-Reported-by: Magnus Svensson +Bug-Reference-ID: <45BDC44D.80609@mysql.com> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html + +Bug-Description: + +Readline neglects to reallocate the array it uses to keep track of wrapped +screen lines when increasing its size. This will eventually result in +segmentation faults when given sufficiently long input. + +Patch: + +*** ../readline-5.2-patched/display.c Thu Sep 14 14:20:12 2006 +--- display.c Fri Feb 2 20:23:17 2007 +*************** +*** 561,574 **** +--- 561,586 ---- + wrap_offset = prompt_invis_chars_first_line = 0; + } + ++ #if defined (HANDLE_MULTIBYTE) + #define CHECK_INV_LBREAKS() \ + do { \ + if (newlines >= (inv_lbsize - 2)) \ + { \ + inv_lbsize *= 2; \ + inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ ++ _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ + } \ + } while (0) ++ #else ++ #define CHECK_INV_LBREAKS() \ ++ do { \ ++ if (newlines >= (inv_lbsize - 2)) \ ++ { \ ++ inv_lbsize *= 2; \ ++ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ ++ } \ ++ } while (0) ++ #endif /* HANDLE_MULTIBYTE */ + + #if defined (HANDLE_MULTIBYTE) + #define CHECK_LPOS() \ diff --git a/src/patches/readline/readline52-003 b/src/patches/readline/readline52-003 new file mode 100644 index 000000000..06916b3b2 --- /dev/null +++ b/src/patches/readline/readline52-003 @@ -0,0 +1,37 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-003 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1171795523.8021.18.camel@localhost> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html + +Bug-Description: + +When moving the cursor, bash sometimes misplaces the cursor when the prompt +contains two or more multibyte characters. The particular circumstance that +uncovered the problem was having the (multibyte) current directory name in +the prompt string. + +Patch: + +*** ../readline-5.2.2/display.c Fri Jan 19 13:34:50 2007 +--- display.c Sat Mar 10 17:25:44 2007 +*************** +*** 1745,1749 **** + { + dpos = _rl_col_width (data, 0, new); +! if (dpos > prompt_last_invisible) /* XXX - don't use woff here */ + { + dpos -= woff; +--- 1745,1752 ---- + { + dpos = _rl_col_width (data, 0, new); +! /* Use NEW when comparing against the last invisible character in the +! prompt string, since they're both buffer indices and DPOS is a +! desired display position. */ +! if (new > prompt_last_invisible) /* XXX - don't use woff here */ + { + dpos -= woff; diff --git a/src/patches/readline/readline52-004 b/src/patches/readline/readline52-004 new file mode 100644 index 000000000..b165ad9f4 --- /dev/null +++ b/src/patches/readline/readline52-004 @@ -0,0 +1,70 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-004 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1173636022.7039.36.camel@localhost> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html + +Bug-Description: + +When restoring the original prompt after finishing an incremental search, +bash sometimes places the cursor incorrectly if the primary prompt contains +invisible characters. + +Patch: + +*** ../readline-5.2.3/display.c Fri Apr 20 13:30:16 2007 +--- display.c Fri Apr 20 15:17:01 2007 +*************** +*** 1599,1604 **** + if (temp > 0) + { + _rl_output_some_chars (nfd, temp); +! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; + } + } +--- 1599,1618 ---- + if (temp > 0) + { ++ /* If nfd begins at the prompt, or before the invisible ++ characters in the prompt, we need to adjust _rl_last_c_pos ++ in a multibyte locale to account for the wrap offset and ++ set cpos_adjusted accordingly. */ + _rl_output_some_chars (nfd, temp); +! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) +! { +! _rl_last_c_pos += _rl_col_width (nfd, 0, temp); +! if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) +! { +! _rl_last_c_pos -= wrap_offset; +! cpos_adjusted = 1; +! } +! } +! else +! _rl_last_c_pos += temp; + } + } +*************** +*** 1608,1613 **** +--- 1622,1639 ---- + if (temp > 0) + { ++ /* If nfd begins at the prompt, or before the invisible ++ characters in the prompt, we need to adjust _rl_last_c_pos ++ in a multibyte locale to account for the wrap offset and ++ set cpos_adjusted accordingly. */ + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; /* XXX */ ++ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) ++ { ++ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) ++ { ++ _rl_last_c_pos -= wrap_offset; ++ cpos_adjusted = 1; ++ } ++ } + } + lendiff = (oe - old) - (ne - new); diff --git a/src/patches/readline/readline52-005 b/src/patches/readline/readline52-005 new file mode 100644 index 000000000..d192ac152 --- /dev/null +++ b/src/patches/readline/readline52-005 @@ -0,0 +1,328 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-005 + +Bug-Reported-by: Thomas Loeber +Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html + +Bug-Description: + +When rl_read_key returns -1, indicating that readline's controlling terminal +has been invalidated for some reason (e.g., receiving a SIGHUP), the error +status was not reported correctly to the caller. This could cause input +loops. + +Patch: + +*** ../readline-5.2/complete.c Fri Jul 28 11:35:49 2006 +--- complete.c Tue Mar 13 08:50:16 2007 +*************** +*** 429,433 **** + if (c == 'n' || c == 'N' || c == RUBOUT) + return (0); +! if (c == ABORT_CHAR) + _rl_abort_internal (); + if (for_pager && (c == NEWLINE || c == RETURN)) +--- 440,444 ---- + if (c == 'n' || c == 'N' || c == RUBOUT) + return (0); +! if (c == ABORT_CHAR || c < 0) + _rl_abort_internal (); + if (for_pager && (c == NEWLINE || c == RETURN)) +*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 +--- input.c Wed May 2 16:07:59 2007 +*************** +*** 514,518 **** + int size; + { +! int mb_len = 0; + size_t mbchar_bytes_length; + wchar_t wc; +--- 522,526 ---- + int size; + { +! int mb_len, c; + size_t mbchar_bytes_length; + wchar_t wc; +*************** +*** 521,531 **** + memset(&ps, 0, sizeof (mbstate_t)); + memset(&ps_back, 0, sizeof (mbstate_t)); +! + while (mb_len < size) + { + RL_SETSTATE(RL_STATE_MOREINPUT); +! mbchar[mb_len++] = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + + mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); + if (mbchar_bytes_length == (size_t)(-1)) +--- 529,545 ---- + memset(&ps, 0, sizeof (mbstate_t)); + memset(&ps_back, 0, sizeof (mbstate_t)); +! +! mb_len = 0; + while (mb_len < size) + { + RL_SETSTATE(RL_STATE_MOREINPUT); +! c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ break; ++ ++ mbchar[mb_len++] = c; ++ + mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); + if (mbchar_bytes_length == (size_t)(-1)) +*************** +*** 565,569 **** + c = first; + memset (mb, 0, mlen); +! for (i = 0; i < mlen; i++) + { + mb[i] = (char)c; +--- 579,583 ---- + c = first; + memset (mb, 0, mlen); +! for (i = 0; c >= 0 && i < mlen; i++) + { + mb[i] = (char)c; +*** ../readline-5.2/isearch.c Mon Dec 26 17:18:53 2005 +--- isearch.c Fri Mar 9 14:30:59 2007 +*************** +*** 328,333 **** + + f = (rl_command_func_t *)NULL; +! +! /* Translate the keys we do something with to opcodes. */ + if (c >= 0 && _rl_keymap[c].type == ISFUNC) + { +--- 328,340 ---- + + f = (rl_command_func_t *)NULL; +! +! if (c < 0) +! { +! cxt->sflags |= SF_FAILED; +! cxt->history_pos = cxt->last_found_line; +! return -1; +! } +! +! /* Translate the keys we do something with to opcodes. */ + if (c >= 0 && _rl_keymap[c].type == ISFUNC) + { +*** ../readline-5.2/misc.c Mon Dec 26 17:20:46 2005 +--- misc.c Fri Mar 9 14:44:11 2007 +*************** +*** 147,150 **** +--- 147,152 ---- + rl_clear_message (); + RL_UNSETSTATE(RL_STATE_NUMERICARG); ++ if (key < 0) ++ return -1; + return (_rl_dispatch (key, _rl_keymap)); + } +*** ../readline-5.2/readline.c Wed Aug 16 15:00:36 2006 +--- readline.c Fri Mar 9 14:47:24 2007 +*************** +*** 646,649 **** +--- 669,677 ---- + { + nkey = _rl_subseq_getchar (cxt->okey); ++ if (nkey < 0) ++ { ++ _rl_abort_internal (); ++ return -1; ++ } + r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); + cxt->flags |= KSEQ_DISPATCHED; +*** ../readline-5.2/text.c Fri Jul 28 11:55:27 2006 +--- text.c Sun Mar 25 13:41:38 2007 +*************** +*** 858,861 **** +--- 864,870 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ return -1; ++ + #if defined (HANDLE_SIGNALS) + if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) +*************** +*** 1521,1524 **** +--- 1530,1536 ---- + mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); + ++ if (mb_len <= 0) ++ return -1; ++ + if (count < 0) + return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); +*************** +*** 1537,1540 **** +--- 1549,1555 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ return -1; ++ + if (count < 0) + return (_rl_char_search_internal (-count, bdir, c)); +*** ../readline-5.2/vi_mode.c Sat Jul 29 16:42:28 2006 +--- vi_mode.c Fri Mar 9 15:02:11 2007 +*************** +*** 887,890 **** +--- 887,897 ---- + c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); ++ ++ if (c < 0) ++ { ++ *nextkey = 0; ++ return -1; ++ } ++ + *nextkey = c; + +*************** +*** 903,906 **** +--- 910,918 ---- + c = rl_read_key (); /* real command */ + RL_UNSETSTATE(RL_STATE_MOREINPUT); ++ if (c < 0) ++ { ++ *nextkey = 0; ++ return -1; ++ } + *nextkey = c; + } +*************** +*** 1225,1236 **** + _rl_callback_generic_arg *data; + { + #if defined (HANDLE_MULTIBYTE) +! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! _rl_vi_last_search_char = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + #endif + + _rl_callback_func = 0; + _rl_want_redisplay = 1; +--- 1243,1262 ---- + _rl_callback_generic_arg *data; + { ++ int c; + #if defined (HANDLE_MULTIBYTE) +! c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + #endif + ++ if (c <= 0) ++ return -1; ++ ++ #if !defined (HANDLE_MULTIBYTE) ++ _rl_vi_last_search_char = c; ++ #endif ++ + _rl_callback_func = 0; + _rl_want_redisplay = 1; +*************** +*** 1248,1251 **** +--- 1274,1278 ---- + int count, key; + { ++ int c; + #if defined (HANDLE_MULTIBYTE) + static char *target; +*************** +*** 1294,1302 **** + { + #if defined (HANDLE_MULTIBYTE) +! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! _rl_vi_last_search_char = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); + #endif + } +--- 1321,1335 ---- + { + #if defined (HANDLE_MULTIBYTE) +! c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); +! if (c <= 0) +! return -1; +! _rl_vi_last_search_mblen = c; + #else + RL_SETSTATE(RL_STATE_MOREINPUT); +! c = rl_read_key (); + RL_UNSETSTATE(RL_STATE_MOREINPUT); ++ if (c < 0) ++ return -1; ++ _rl_vi_last_search_char = c; + #endif + } +*************** +*** 1468,1471 **** +--- 1501,1507 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + ++ if (c < 0) ++ return -1; ++ + #if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) +*************** +*** 1486,1489 **** +--- 1522,1528 ---- + _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); + ++ if (c < 0) ++ return -1; ++ + _rl_callback_func = 0; + _rl_want_redisplay = 1; +*************** +*** 1517,1520 **** +--- 1556,1562 ---- + _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); + ++ if (c < 0) ++ return -1; ++ + return (_rl_vi_change_char (count, c, mb)); + } +*************** +*** 1651,1655 **** + RL_UNSETSTATE(RL_STATE_MOREINPUT); + +! if (ch < 'a' || ch > 'z') + { + rl_ding (); +--- 1693,1697 ---- + RL_UNSETSTATE(RL_STATE_MOREINPUT); + +! if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ + { + rl_ding (); +*************** +*** 1703,1707 **** + return 0; + } +! else if (ch < 'a' || ch > 'z') + { + rl_ding (); +--- 1745,1749 ---- + return 0; + } +! else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ + { + rl_ding (); diff --git a/src/patches/readline/readline52-006 b/src/patches/readline/readline52-006 new file mode 100644 index 000000000..d7391438d --- /dev/null +++ b/src/patches/readline/readline52-006 @@ -0,0 +1,62 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-006 + +Bug-Reported-by: Peter Volkov +Bug-Reference-ID: <1178376645.9063.25.camel@localhost> +Bug-Reference-URL: http://bugs.gentoo.org/177095 + +Bug-Description: + +The readline display code miscalculated the screen position when performing +a redisplay in which the new text occupies more screen space that the old, +but takes fewer bytes to do so (e.g., when replacing a shorter string +containing multibyte characters with a longer one containing only ASCII). + +Patch: + +*** ../readline-5.2/display.c Thu Apr 26 11:38:22 2007 +--- display.c Thu Jul 12 23:10:10 2007 +*************** +*** 1519,1527 **** + /* Non-zero if we're increasing the number of lines. */ + int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; + /* Sometimes it is cheaper to print the characters rather than + use the terminal's capabilities. If we're growing the number + of lines, make sure we actually cause the new line to wrap + around on auto-wrapping terminals. */ +! if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) + { + /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and +--- 1568,1596 ---- + /* Non-zero if we're increasing the number of lines. */ + int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; ++ /* If col_lendiff is > 0, implying that the new string takes up more ++ screen real estate than the old, but lendiff is < 0, meaning that it ++ takes fewer bytes, we need to just output the characters starting ++ from the first difference. These will overwrite what is on the ++ display, so there's no reason to do a smart update. This can really ++ only happen in a multibyte environment. */ ++ if (lendiff < 0) ++ { ++ _rl_output_some_chars (nfd, temp); ++ _rl_last_c_pos += _rl_col_width (nfd, 0, temp); ++ /* If nfd begins before any invisible characters in the prompt, ++ adjust _rl_last_c_pos to account for wrap_offset and set ++ cpos_adjusted to let the caller know. */ ++ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) ++ { ++ _rl_last_c_pos -= wrap_offset; ++ cpos_adjusted = 1; ++ } ++ return; ++ } + /* Sometimes it is cheaper to print the characters rather than + use the terminal's capabilities. If we're growing the number + of lines, make sure we actually cause the new line to wrap + around on auto-wrapping terminals. */ +! else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) + { + /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and diff --git a/src/patches/readline/readline52-007 b/src/patches/readline/readline52-007 new file mode 100644 index 000000000..f75f53fc6 --- /dev/null +++ b/src/patches/readline/readline52-007 @@ -0,0 +1,65 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-007 + +Bug-Reported-by: Tom Bjorkholm +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html + + +Bug-Description: + +An off-by-one error in readline's input buffering caused readline to drop +each 511th character of buffered input (e.g., when pasting a large amount +of data into a terminal window). + +Patch: + +*** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 +--- input.c Tue Jul 17 09:24:21 2007 +*************** +*** 134,139 **** + + *key = ibuffer[pop_index++]; +! + if (pop_index >= ibuffer_len) + pop_index = 0; + +--- 134,142 ---- + + *key = ibuffer[pop_index++]; +! #if 0 + if (pop_index >= ibuffer_len) ++ #else ++ if (pop_index > ibuffer_len) ++ #endif + pop_index = 0; + +*************** +*** 251,255 **** + { + k = (*rl_getc_function) (rl_instream); +! rl_stuff_char (k); + if (k == NEWLINE || k == RETURN) + break; +--- 254,259 ---- + { + k = (*rl_getc_function) (rl_instream); +! if (rl_stuff_char (k) == 0) +! break; /* some problem; no more room */ + if (k == NEWLINE || k == RETURN) + break; +*************** +*** 374,378 **** +--- 378,386 ---- + } + ibuffer[push_index++] = key; ++ #if 0 + if (push_index >= ibuffer_len) ++ #else ++ if (push_index > ibuffer_len) ++ #endif + push_index = 0; + diff --git a/src/patches/readline/readline52-008 b/src/patches/readline/readline52-008 new file mode 100644 index 000000000..1d7f3277f --- /dev/null +++ b/src/patches/readline/readline52-008 @@ -0,0 +1,70 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-008 + +Bug-Reported-by: dAniel hAhler +Bug-Reference-ID: <4702ED8A.5000503@thequod.de> +Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938 + +Bug-Description: + +When updating the display after displaying, for instance, a list of possible +completions, readline will place the cursor at the wrong position if the +prompt contains invisible characters and a newline. + +Patch: + +*** ../readline-5.2-patched/display.c Mon Aug 6 14:26:29 2007 +--- display.c Wed Oct 10 22:43:58 2007 +*************** +*** 1049,1053 **** + else + tx = nleft; +! if (_rl_last_c_pos > tx) + { + _rl_backspace (_rl_last_c_pos - tx); /* XXX */ +--- 1049,1053 ---- + else + tx = nleft; +! if (tx >= 0 && _rl_last_c_pos > tx) + { + _rl_backspace (_rl_last_c_pos - tx); /* XXX */ +*************** +*** 1205,1209 **** + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd; + int current_invis_chars; + int col_lendiff, col_temp; +--- 1205,1209 ---- + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd, o_cpos; + int current_invis_chars; + int col_lendiff, col_temp; +*************** +*** 1466,1469 **** +--- 1466,1471 ---- + } + ++ o_cpos = _rl_last_c_pos; ++ + /* When this function returns, _rl_last_c_pos is correct, and an absolute + cursor postion in multibyte mode, but a buffer index when not in a +*************** +*** 1475,1479 **** + invisible characters in the prompt string. Let's see if setting this when + we make sure we're at the end of the drawn prompt string works. */ +! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars) + cpos_adjusted = 1; + #endif +--- 1477,1483 ---- + invisible characters in the prompt string. Let's see if setting this when + we make sure we're at the end of the drawn prompt string works. */ +! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && +! (_rl_last_c_pos > 0 || o_cpos > 0) && +! _rl_last_c_pos == prompt_physical_chars) + cpos_adjusted = 1; + #endif diff --git a/src/patches/readline/readline52-009 b/src/patches/readline/readline52-009 new file mode 100644 index 000000000..af9e38174 --- /dev/null +++ b/src/patches/readline/readline52-009 @@ -0,0 +1,45 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-009 + +Bug-Reported-by: dAniel hAhler +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +Under some circumstances, readline will incorrectly display a prompt string +containing invisible characters after the final newline. + +Patch: + +*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 +--- display.c 2007-11-10 17:51:29.000000000 -0500 +*************** +*** 392,396 **** + local_prompt = expand_prompt (p, &prompt_visible_length, + &prompt_last_invisible, +! (int *)NULL, + &prompt_physical_chars); + c = *t; *t = '\0'; +--- 420,424 ---- + local_prompt = expand_prompt (p, &prompt_visible_length, + &prompt_last_invisible, +! &prompt_invis_chars_first_line, + &prompt_physical_chars); + c = *t; *t = '\0'; +*************** +*** 399,403 **** + local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, + (int *)NULL, +! &prompt_invis_chars_first_line, + (int *)NULL); + *t = c; +--- 427,431 ---- + local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, + (int *)NULL, +! (int *)NULL, + (int *)NULL); + *t = c; diff --git a/src/patches/readline/readline52-010 b/src/patches/readline/readline52-010 new file mode 100644 index 000000000..ee5c026f8 --- /dev/null +++ b/src/patches/readline/readline52-010 @@ -0,0 +1,47 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-010 + +Bug-Reported-by: Miroslav Lichvar +Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100 +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html + +Bug-Description: + +In certain cases when outputting characters at the end of the line, +e.g., when displaying the prompt string, readline positions the cursor +incorrectly if the prompt string contains invisible characters and the +text being drawn begins before the last invisible character in the line. + +Patch: + +*** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 +--- display.c 2007-11-10 17:51:29.000000000 -0500 +*************** +*** 1566,1574 **** + else + { +- /* We have horizontal scrolling and we are not inserting at +- the end. We have invisible characters in this line. This +- is a dumb update. */ + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; + return; + } +--- 1619,1632 ---- + else + { + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; ++ /* If nfd begins before any invisible characters in the prompt, ++ adjust _rl_last_c_pos to account for wrap_offset and set ++ cpos_adjusted to let the caller know. */ ++ if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) ++ { ++ _rl_last_c_pos -= wrap_offset; ++ cpos_adjusted = 1; ++ } + return; + } diff --git a/src/patches/readline/readline52-011 b/src/patches/readline/readline52-011 new file mode 100644 index 000000000..a1197ede6 --- /dev/null +++ b/src/patches/readline/readline52-011 @@ -0,0 +1,32 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-011 + +Bug-Reported-by: Uwe Doering +Bug-Reference-ID: <46F3DD72.2090801@geminix.org> +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html + +Bug-Description: + +There is an off-by-one error in the code that buffers characters received +very quickly in succession, causing characters to be dropped. + +Patch: + +*** ../readline-5.2-patched/input.c 2007-08-25 13:47:10.000000000 -0400 +--- input.c 2007-10-12 22:55:25.000000000 -0400 +*************** +*** 155,159 **** + pop_index--; + if (pop_index < 0) +! pop_index = ibuffer_len - 1; + ibuffer[pop_index] = key; + return (1); +--- 155,159 ---- + pop_index--; + if (pop_index < 0) +! pop_index = ibuffer_len; + ibuffer[pop_index] = key; + return (1); diff --git a/src/patches/readline/readline52-012 b/src/patches/readline/readline52-012 new file mode 100644 index 000000000..7b370240c --- /dev/null +++ b/src/patches/readline/readline52-012 @@ -0,0 +1,150 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-012 + +Bug-Reported-by: Chet Ramey +Bug-Reference-ID: +Bug-Reference-URL: + +Bug-Description: + +This updates the options required to create shared libraries on several +systems, including Mac OS X 10.5 (darwin9.x), FreeBSD, NetBSD, OpenBSD, +AIX, and HP/UX. + +Patch: + +*** ../readline-5.2-patched/support/shobj-conf 2006-04-11 09:15:43.000000000 -0400 +--- support/shobj-conf 2007-12-06 23:46:41.000000000 -0500 +*************** +*** 11,15 **** + # chet@po.cwru.edu + +! # Copyright (C) 1996-2002 Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or modify +--- 11,15 ---- + # chet@po.cwru.edu + +! # Copyright (C) 1996-2007 Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or modify +*************** +*** 115,119 **** + ;; + +! freebsd2* | netbsd*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD=ld +--- 115,119 ---- + ;; + +! freebsd2*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD=ld +*************** +*** 126,130 **** + # FreeBSD-3.x ELF + freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) +! SHOBJ_CFLAGS=-fpic + SHOBJ_LD='${CC}' + +--- 126,130 ---- + # FreeBSD-3.x ELF + freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) +! SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' + +*************** +*** 143,147 **** + + # Darwin/MacOS X +! darwin8*) + SHOBJ_STATUS=supported + SHLIB_STATUS=supported +--- 143,147 ---- + + # Darwin/MacOS X +! darwin[89]*) + SHOBJ_STATUS=supported + SHLIB_STATUS=supported +*************** +*** 154,158 **** + SHLIB_LIBSUFF='dylib' + +! SHOBJ_LDFLAGS='-undefined dynamic_lookup' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + +--- 154,158 ---- + SHLIB_LIBSUFF='dylib' + +! SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + +*************** +*** 172,176 **** + + case "${host_os}" in +! darwin[78]*) SHOBJ_LDFLAGS='' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + ;; +--- 172,176 ---- + + case "${host_os}" in +! darwin[789]*) SHOBJ_LDFLAGS='' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + ;; +*************** +*** 183,187 **** + ;; + +! openbsd*) + SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' +--- 183,187 ---- + ;; + +! openbsd*|netbsd*) + SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' +*************** +*** 248,252 **** + ;; + +! aix4.[2-9]*-*gcc*) # lightly tested by jik@cisco.com + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='ld' +--- 248,252 ---- + ;; + +! aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='ld' +*************** +*** 259,263 **** + ;; + +! aix4.[2-9]*) + SHOBJ_CFLAGS=-K + SHOBJ_LD='ld' +--- 259,263 ---- + ;; + +! aix4.[2-9]*|aix[5-9].*) + SHOBJ_CFLAGS=-K + SHOBJ_LD='ld' +*************** +*** 330,334 **** + # if you have problems linking here, moving the `-Wl,+h,$@' from + # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work +! SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' + + SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' +--- 330,334 ---- + # if you have problems linking here, moving the `-Wl,+h,$@' from + # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work +! SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' + + SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' diff --git a/src/patches/readline/readline52-013 b/src/patches/readline/readline52-013 new file mode 100644 index 000000000..82a18972a --- /dev/null +++ b/src/patches/readline/readline52-013 @@ -0,0 +1,135 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-013 + +Bug-Reported-by: slinkp +Bug-Reference-ID: +Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html + +Bug-Description: + +The presence of invisible characters in a prompt longer than the screenwidth +with invisible characters on the first and last prompt lines caused readline +to place the cursor in the wrong physical location. + +Patch: + +*** ../readline-5.2-patched/display.c 2007-12-14 21:12:40.000000000 -0500 +--- display.c 2008-10-23 09:39:46.000000000 -0400 +*************** +*** 911,914 **** +--- 944,951 ---- + OFFSET (which has already been calculated above). */ + ++ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) ++ #define WRAP_OFFSET(line, offset) ((line == 0) \ ++ ? (offset ? INVIS_FIRST() : 0) \ ++ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) + #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) + #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) +*************** +*** 945,949 **** + _rl_last_c_pos > wrap_offset && + o_cpos < prompt_last_invisible) +! _rl_last_c_pos -= wrap_offset; + + /* If this is the line with the prompt, we might need to +--- 982,992 ---- + _rl_last_c_pos > wrap_offset && + o_cpos < prompt_last_invisible) +! _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ +! else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && +! (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && +! cpos_adjusted == 0 && +! _rl_last_c_pos != o_cpos && +! _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) +! _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); + + /* If this is the line with the prompt, we might need to +*************** +*** 1205,1209 **** + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd, o_cpos; + int current_invis_chars; + int col_lendiff, col_temp; +--- 1264,1268 ---- + { + register char *ofd, *ols, *oe, *nfd, *nls, *ne; +! int temp, lendiff, wsatend, od, nd, twidth, o_cpos; + int current_invis_chars; + int col_lendiff, col_temp; +*************** +*** 1221,1225 **** + temp = _rl_last_c_pos; + else +! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); + if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode + && _rl_last_v_pos == current_line - 1) +--- 1280,1284 ---- + temp = _rl_last_c_pos; + else +! temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); + if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode + && _rl_last_v_pos == current_line - 1) +*************** +*** 1587,1599 **** + { + _rl_output_some_chars (nfd + lendiff, temp - lendiff); +- #if 1 + /* XXX -- this bears closer inspection. Fixes a redisplay bug + reported against bash-3.0-alpha by Andreas Schwab involving + multibyte characters and prompt strings with invisible + characters, but was previously disabled. */ +! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); +! #else +! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); +! #endif + } + } +--- 1648,1660 ---- + { + _rl_output_some_chars (nfd + lendiff, temp - lendiff); + /* XXX -- this bears closer inspection. Fixes a redisplay bug + reported against bash-3.0-alpha by Andreas Schwab involving + multibyte characters and prompt strings with invisible + characters, but was previously disabled. */ +! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) +! twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); +! else +! twidth = temp - lendiff; +! _rl_last_c_pos += twidth; + } + } +*************** +*** 1789,1793 **** + int cpos, dpos; /* current and desired cursor positions */ + +! woff = W_OFFSET (_rl_last_v_pos, wrap_offset); + cpos = _rl_last_c_pos; + #if defined (HANDLE_MULTIBYTE) +--- 1850,1854 ---- + int cpos, dpos; /* current and desired cursor positions */ + +! woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); + cpos = _rl_last_c_pos; + #if defined (HANDLE_MULTIBYTE) +*************** +*** 1803,1807 **** + prompt string, since they're both buffer indices and DPOS is a + desired display position. */ +! if (new > prompt_last_invisible) /* XXX - don't use woff here */ + { + dpos -= woff; +--- 1864,1872 ---- + prompt string, since they're both buffer indices and DPOS is a + desired display position. */ +! if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ +! (prompt_physical_chars > _rl_screenwidth && +! _rl_last_v_pos == prompt_last_screen_line && +! wrap_offset != woff && +! new > (prompt_last_invisible-_rl_screenwidth-wrap_offset))) + { + dpos -= woff; diff --git a/src/patches/readline/readline52-014 b/src/patches/readline/readline52-014 new file mode 100644 index 000000000..8dfaae45d --- /dev/null +++ b/src/patches/readline/readline52-014 @@ -0,0 +1,49 @@ + READLINE PATCH REPORT + ===================== + +Readline-Release: 5.2 +Patch-ID: readline52-014 + +Bug-Reported-by: Len Lattanzi +Bug-Reference-ID: <52B1297F-6675-45CC-B63E-24745337D006@apple.com> +Bug-Reference-URL: + +Bug-Description: + +On systems where mbrtowc() returns -2 when passed a length argument with +value 0, when using a multibyte locale, Readline's emacs-mode forward-char +at the end of a line will leave the point beyond the end of the line. + +Patch: + +*** ../readline-5.2-patched/mbutil.c 2009-05-29 23:09:26.000000000 -0400 +--- mbutil.c 2009-05-29 23:10:12.000000000 -0400 +*************** +*** 78,82 **** + int seed, count, find_non_zero; + { +! size_t tmp; + mbstate_t ps; + int point; +--- 78,82 ---- + int seed, count, find_non_zero; + { +! size_t tmp, len; + mbstate_t ps; + int point; +*************** +*** 99,103 **** + while (count > 0) + { +! tmp = mbrtowc (&wc, string+point, strlen(string + point), &ps); + if (MB_INVALIDCH ((size_t)tmp)) + { +--- 99,106 ---- + while (count > 0) + { +! len = strlen (string + point); +! if (len == 0) +! break; +! tmp = mbrtowc (&wc, string+point, len, &ps); + if (MB_INVALIDCH ((size_t)tmp)) + { From a00d9432060de2d4d762d188cd85650544a4cdb5 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Tue, 30 Sep 2014 09:33:27 +0200 Subject: [PATCH 143/297] set PAK_VER to core84. --- make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make.sh b/make.sh index 23ef2b66e..074f120dc 100755 --- a/make.sh +++ b/make.sh @@ -26,7 +26,7 @@ NAME="IPFire" # Software name SNAME="ipfire" # Short name VERSION="2.15" # Version number CORE="84" # Core Level (Filename) -PAKFIRE_CORE="83" # Core Level (PAKFIRE) +PAKFIRE_CORE="84" # Core Level (PAKFIRE) GIT_BRANCH=`git rev-parse --abbrev-ref HEAD` # Git Branch SLOGAN="www.ipfire.org" # Software slogan CONFIG_ROOT=/var/ipfire # Configuration rootdir From 2a5b19c56f8593e78906d716afe123a6ff0ee6db Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 4 Oct 2014 14:18:16 +0200 Subject: [PATCH 144/297] p2pblock: ipp2p must run before CONNTRACK. And can only used for blocking, not for accept conenections bacause connections must already established for detecting protocol types. --- config/firewall/rules.pl | 16 +++------------- src/initscripts/init.d/dhcrelay | 0 src/initscripts/init.d/firewall | 6 ++++++ 3 files changed, 9 insertions(+), 13 deletions(-) mode change 100755 => 100644 src/initscripts/init.d/dhcrelay diff --git a/config/firewall/rules.pl b/config/firewall/rules.pl index 4d703825d..20f97bef0 100755 --- a/config/firewall/rules.pl +++ b/config/firewall/rules.pl @@ -554,29 +554,19 @@ sub time_convert_to_minutes { } sub p2pblock { - my $search_action; - my $target; - - if ($fwdfwsettings{"POLICY"} eq "MODE1") { - $search_action = "on"; - $target = "ACCEPT"; - } else { - $search_action = "off"; - $target = "DROP"; - } - open(FILE, "<$p2pfile") or die "Unable to read $p2pfile"; my @protocols = (); foreach my $p2pentry () { my @p2pline = split(/\;/, $p2pentry); - next unless ($p2pline[2] eq $search_action); + next unless ($p2pline[2] eq "off"); push(@protocols, "--$p2pline[1]"); } close(FILE); if (@protocols) { - run("$IPTABLES -A FORWARDFW -m ipp2p @protocols -j $target"); + run("$IPTABLES -F P2PBLOCK"); + run("$IPTABLES -A P2PBLOCK -m ipp2p @protocols -j DROP"); } } diff --git a/src/initscripts/init.d/dhcrelay b/src/initscripts/init.d/dhcrelay old mode 100755 new mode 100644 diff --git a/src/initscripts/init.d/firewall b/src/initscripts/init.d/firewall index 66ca432a2..c383652e0 100644 --- a/src/initscripts/init.d/firewall +++ b/src/initscripts/init.d/firewall @@ -104,6 +104,12 @@ iptables_init() { iptables -t nat -N CUSTOMPOSTROUTING iptables -t nat -A POSTROUTING -j CUSTOMPOSTROUTING + # P2PBLOCK + iptables -N P2PBLOCK + iptables -A INPUT -j P2PBLOCK + iptables -A FORWARD -j P2PBLOCK + iptables -A OUTPUT -j P2PBLOCK + # Guardian (IPS) chains iptables -N GUARDIAN iptables -A INPUT -j GUARDIAN From 24d36c80a6ce4eef0131dbf22862fb9fbc997478 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 5 Oct 2014 15:12:44 +0200 Subject: [PATCH 145/297] p2pblock: fix flush rules if all p2p's are allowed. --- config/firewall/rules.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/firewall/rules.pl b/config/firewall/rules.pl index 20f97bef0..75a9357f6 100755 --- a/config/firewall/rules.pl +++ b/config/firewall/rules.pl @@ -564,8 +564,8 @@ sub p2pblock { } close(FILE); + run("$IPTABLES -F P2PBLOCK"); if (@protocols) { - run("$IPTABLES -F P2PBLOCK"); run("$IPTABLES -A P2PBLOCK -m ipp2p @protocols -j DROP"); } } From 085d99757cd88cfddd860a5f3809f06d833b3158 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 5 Oct 2014 21:44:54 +0200 Subject: [PATCH 146/297] rt2800usb: remove some queue warnings. --- lfs/linux | 1 + ...rt2800usb-change_queue_warn_to_debug.patch | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch diff --git a/lfs/linux b/lfs/linux index a1be6d46a..eabbba235 100644 --- a/lfs/linux +++ b/lfs/linux @@ -141,6 +141,7 @@ endif cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-drivers-3.8.3-ath_ignore_eeprom_regdomain.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.34-iwlwifi-noibss_only_on_radar_chan.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.37-rt2800usb_add_dlink_dwa137_usbid.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.39-add_libertas_uap.patch # mISDN Patches diff --git a/src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch b/src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch new file mode 100644 index 000000000..a03642d02 --- /dev/null +++ b/src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch @@ -0,0 +1,30 @@ +diff -Naur linux-3.10.55.org/drivers/net/wireless/rt2x00/rt2800usb.c linux-3.10.55/drivers/net/wireless/rt2x00/rt2800usb.c +--- linux-3.10.55.org/drivers/net/wireless/rt2x00/rt2800usb.c 2014-09-17 18:04:18.000000000 +0200 ++++ linux-3.10.55/drivers/net/wireless/rt2x00/rt2800usb.c 2014-10-05 19:25:25.070972490 +0200 +@@ -128,7 +128,7 @@ + + tout = time_after(jiffies, entry->last_action + msecs_to_jiffies(100)); + if (unlikely(tout)) +- rt2x00_warn(entry->queue->rt2x00dev, ++ rt2x00_dbg(entry->queue->rt2x00dev, + "TX status timeout for entry %d in queue %d\n", + entry->entry_idx, entry->queue->qid); + return tout; +@@ -569,7 +569,7 @@ + queue = rt2x00queue_get_tx_queue(rt2x00dev, qid); + + if (unlikely(rt2x00queue_empty(queue))) { +- rt2x00_warn(rt2x00dev, "Got TX status for an empty queue %u, dropping\n", ++ rt2x00_dbg(rt2x00dev, "Got TX status for an empty queue %u, dropping\n", + qid); + break; + } +@@ -578,7 +578,7 @@ + + if (unlikely(test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) || + !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))) { +- rt2x00_warn(rt2x00dev, "Data pending for entry %u in queue %u\n", ++ rt2x00_dbg(rt2x00dev, "Data pending for entry %u in queue %u\n", + entry->entry_idx, qid); + break; + } From b16d2d678adfd57c09fcd11a396896e5c83c70d7 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Mon, 6 Oct 2014 12:59:15 +0200 Subject: [PATCH 147/297] kernel: update to 3.10.56. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index eabbba235..4720d1638 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.55 +VER = 3.10.56 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.55-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.56-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 5e9282099d35c2c4d8115a9b09352669 +$(DL_FILE)_MD5 = 97505772fb888d755185403e905e6bb1 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = bdee0a80cb139f28235b3bc696927b23 +$(GRS_PATCHES)_MD5 = 194aa9ef4a0cf4eacea0d0f572c34926 install : $(TARGET) From a115a8908c2527d7c48b0cfdcf27e773646549bf Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 11 Oct 2014 09:14:04 +0200 Subject: [PATCH 148/297] kernel: update to 3.10.57. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index 4720d1638..80d899709 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.56 +VER = 3.10.57 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.56-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.57-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 97505772fb888d755185403e905e6bb1 +$(DL_FILE)_MD5 = f432a49044b24af06faa9a347f4ed0b5 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = 194aa9ef4a0cf4eacea0d0f572c34926 +$(GRS_PATCHES)_MD5 = 4db694411ace8a971e04886ba7fddcc2 install : $(TARGET) From bedebe884765e82184ed1bcc0a5a551b4d479b03 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 11 Oct 2014 09:26:57 +0200 Subject: [PATCH 149/297] kernel: add eMMC 5.x support. --- lfs/linux | 3 +++ src/patches/linux-3.10.57-mmc_add_eMMC_5.x.patch | 12 ++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 src/patches/linux-3.10.57-mmc_add_eMMC_5.x.patch diff --git a/lfs/linux b/lfs/linux index 80d899709..f78c91104 100644 --- a/lfs/linux +++ b/lfs/linux @@ -144,6 +144,9 @@ endif cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.39-add_libertas_uap.patch + # mmc + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.57-mmc_add_eMMC_5.x.patch + # mISDN Patches cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mISDN_hfc-s_add_id.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mISDN-hfcusb-reportl1down.patch diff --git a/src/patches/linux-3.10.57-mmc_add_eMMC_5.x.patch b/src/patches/linux-3.10.57-mmc_add_eMMC_5.x.patch new file mode 100644 index 000000000..7fa4330b7 --- /dev/null +++ b/src/patches/linux-3.10.57-mmc_add_eMMC_5.x.patch @@ -0,0 +1,12 @@ +diff -Naur linux-3.10.57.org/drivers/mmc/core/mmc.c linux-3.10.57/drivers/mmc/core/mmc.c +--- linux-3.10.57.org/drivers/mmc/core/mmc.c 2014-10-09 21:18:54.000000000 +0200 ++++ linux-3.10.57/drivers/mmc/core/mmc.c 2014-10-11 09:20:02.225472403 +0200 +@@ -293,7 +293,7 @@ + } + + card->ext_csd.rev = ext_csd[EXT_CSD_REV]; +- if (card->ext_csd.rev > 6) { ++ if (card->ext_csd.rev > 7) { + pr_err("%s: unrecognised EXT_CSD revision %d\n", + mmc_hostname(card->host), card->ext_csd.rev); + err = -EINVAL; From a3e135c8bdecb2061d3eb515772b82981d349b74 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 11 Oct 2014 18:59:31 +0200 Subject: [PATCH 150/297] installer: Enable new partitioning code to be run in unattended mode The first disk of the system will automatically be used and a standard installation will be done. After that is done, the system will reboot into the freshly installed system and execute setup. --- config/syslinux/syslinux.cfg | 2 +- src/installer/hw.c | 21 +++++++++++++++++++++ src/installer/hw.h | 1 + src/installer/main.c | 24 +++++++++++++++--------- src/libsmooth/libsmooth.h | 1 + src/libsmooth/main.c | 10 ++++++++++ 6 files changed, 49 insertions(+), 10 deletions(-) diff --git a/config/syslinux/syslinux.cfg b/config/syslinux/syslinux.cfg index 3c7ae87d2..cfb8113cf 100644 --- a/config/syslinux/syslinux.cfg +++ b/config/syslinux/syslinux.cfg @@ -58,7 +58,7 @@ Run an unattended installation. ENDTEXT KERNEL vmlinuz INITRD instroot - APPEND unattended + APPEND installer.unattended MENU END MENU BEGIN tools diff --git a/src/installer/hw.c b/src/installer/hw.c index e453e23cb..ecc4dc392 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -323,6 +323,27 @@ struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection) { return ret; } +struct hw_disk** hw_select_first_disk(const struct hw_disk** disks) { + struct hw_disk** ret = hw_create_disks(); + struct hw_disk** selected_disks = ret; + + unsigned int num_disks = hw_count_disks(disks); + assert(num_disks > 0); + + for (unsigned int i = 0; i < num_disks; i++) { + struct hw_disk *disk = disks[i]; + disk->ref++; + + *selected_disks++ = disk; + break; + } + + // Set sentinel + *selected_disks = NULL; + + return ret; +} + static unsigned long long hw_swap_size(struct hw_destination* dest) { unsigned long long memory = hw_memory(); diff --git a/src/installer/hw.h b/src/installer/hw.h index e4bb18b92..c5285d543 100644 --- a/src/installer/hw.h +++ b/src/installer/hw.h @@ -109,6 +109,7 @@ struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive); void hw_free_disks(struct hw_disk** disks); unsigned int hw_count_disks(struct hw_disk** disks); struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection); +struct hw_disk** hw_select_first_disk(const struct hw_disk** disks); struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks); diff --git a/src/installer/main.c b/src/installer/main.c index 513ebf41a..f197dc351 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -281,17 +281,16 @@ int main(int argc, char *argv[]) { snprintf(title, sizeof(title), "%s - %s", NAME, SLOGAN); - if (! (cmdfile = fopen("/proc/cmdline", "r"))) - { + if (! (cmdfile = fopen("/proc/cmdline", "r"))) { fprintf(flog, "Couldn't open commandline: /proc/cmdline\n"); } else { fgets(line, STRING_SIZE, cmdfile); - + // check if we have to make an unattended install - if (strstr (line, "unattended") != NULL) { + if (strstr(line, "installer.unattended") != NULL) { + splashWindow(title, _("Warning: Unattended installation will start in 10 seconds..."), 10); unattended = 1; - runcommandwithstatus("/bin/sleep 10", title, "WARNING: Unattended installation will start in 10 seconds...", NULL); - } + } // check if we have to patch for serial console if (strstr (line, "console=ttyS0") != NULL) { serialconsole = 1; @@ -314,7 +313,7 @@ int main(int argc, char *argv[]) { } langnames[NUM_LANGS] = NULL; - rc = newtWinMenu(_("Language selection"), _("Select the language you wish to use for the installation."), + rc = newtWinMenu(_("Language selection"), _("Select the language you wish to use for the installation."), 50, 5, 5, 8, langnames, &choice, _("OK"), NULL); assert(choice <= NUM_LANGS); @@ -406,8 +405,10 @@ int main(int argc, char *argv[]) { goto EXIT; // exactly one disk has been found - } else if (num_disks == 1) { - selected_disks = hw_select_disks(disks, NULL); + // or if we are running in unattended mode, we will select + // the first disk and go with that one + } else if ((num_disks == 1) || (unattended && num_disks >= 1)) { + selected_disks = hw_select_first_disk(disks); // more than one usable disk has been found and // the user needs to choose what to do with them @@ -442,6 +443,11 @@ int main(int argc, char *argv[]) { } } + // Don't print the auto-selected harddisk setup in + // unattended mode. + if (unattended) + break; + num_selected_disks = hw_count_disks(selected_disks); if (num_selected_disks == 1) { diff --git a/src/libsmooth/libsmooth.h b/src/libsmooth/libsmooth.h index d731e548a..6003bc065 100644 --- a/src/libsmooth/libsmooth.h +++ b/src/libsmooth/libsmooth.h @@ -52,6 +52,7 @@ int runcommandwithprogress(int width, int height, const char *title, const char int lines, char *text, ...); int runcommandwithstatus(const char *command, const char* title, const char *message, const char* output); int runhiddencommandwithstatus(const char *command, const char* title, const char *message, const char* output); +int splashWindow(const char* title, const char* message, unsigned int timeout); int checkformodule(const char *module); int replace(char filename1[], char *from, char *to); char* get_version(void); diff --git a/src/libsmooth/main.c b/src/libsmooth/main.c index 1d2a5002e..fedff109d 100644 --- a/src/libsmooth/main.c +++ b/src/libsmooth/main.c @@ -90,6 +90,16 @@ int runhiddencommandwithstatus(const char *command, const char* title, const cha return rc; } +int splashWindow(const char* title, const char* message, unsigned int timeout) { + statuswindow(60, 4, title, message); + + // Wait so the user can read this message + sleep(timeout); + newtPopWindow(); + + return 0; +} + /* This one borrowed from redhat installer. */ int runcommandwithprogress(int width, int height, const char *title, const char *command, int lines, char *text, ...) { From 07d6f947a48e3a7eb74a98bdd783d0c6a2b1b2a6 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 11 Oct 2014 19:18:27 +0200 Subject: [PATCH 151/297] installer: Remove old unattended installation code --- src/installer/Makefile.am | 3 +- src/installer/install.h | 14 ---- src/installer/main.c | 2 +- src/installer/unattended.c | 163 ------------------------------------- 4 files changed, 2 insertions(+), 180 deletions(-) delete mode 100644 src/installer/install.h delete mode 100644 src/installer/unattended.c diff --git a/src/installer/Makefile.am b/src/installer/Makefile.am index 259db0610..59a5312fb 100644 --- a/src/installer/Makefile.am +++ b/src/installer/Makefile.am @@ -40,8 +40,7 @@ bin_SCRIPTS = \ installer_SOURCES = \ hw.c \ hw.h \ - main.c \ - unattended.c + main.c installer_CFLAGS = \ $(BLKID_CFLAGS) \ diff --git a/src/installer/install.h b/src/installer/install.h deleted file mode 100644 index 8e5993096..000000000 --- a/src/installer/install.h +++ /dev/null @@ -1,14 +0,0 @@ -/* SmoothWall install program. - * - * This program is distributed under the terms of the GNU General Public - * Licence. See the file COPYING for details. - * - * (c) Lawrence Manning, 2001 - * Main include file. - * - */ - -#include - -/* unattended.c */ -int unattended_setup(struct keyvalue *unattendedkv, const char* output); diff --git a/src/installer/main.c b/src/installer/main.c index f197dc351..94603b8bb 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -10,13 +10,13 @@ #include #include +#include #include #include #include #include #include "hw.h" -#include "install.h" // Translation #include diff --git a/src/installer/unattended.c b/src/installer/unattended.c deleted file mode 100644 index dd5388bde..000000000 --- a/src/installer/unattended.c +++ /dev/null @@ -1,163 +0,0 @@ -/* - * This file is part of the IPFire Firewall. - * - * IPFire 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. - * - * IPFire 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 IPFire; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Copyright 2007: Michael Tremer for www.ipfire.org - * - */ - -#include "install.h" - -int unattended_setup(struct keyvalue *unattendedkv, const char* output) { - FILE* flog = fopen(output, "w+"); - - struct keyvalue *mainsettings = initkeyvalues(); - struct keyvalue *ethernetkv = initkeyvalues(); - FILE *file, *hosts; - char commandstring[STRING_SIZE]; - - char domainname[STRING_SIZE]; - char hostname[STRING_SIZE]; - char keymap[STRING_SIZE]; - char language[STRING_SIZE]; - char timezone[STRING_SIZE]; - char theme[STRING_SIZE]; - char green_address[STRING_SIZE]; - char green_netmask[STRING_SIZE]; - char green_netaddress[STRING_SIZE]; - char green_broadcast[STRING_SIZE]; - char root_password[STRING_SIZE]; - char admin_password[STRING_SIZE]; - char restore_file[STRING_SIZE] = ""; - - findkey(unattendedkv, "DOMAINNAME", domainname); - findkey(unattendedkv, "HOSTNAME", hostname); - findkey(unattendedkv, "KEYMAP", keymap); - findkey(unattendedkv, "LANGUAGE", language); - findkey(unattendedkv, "TIMEZONE", timezone); - findkey(unattendedkv, "THEME", theme); - findkey(unattendedkv, "GREEN_ADDRESS", green_address); - findkey(unattendedkv, "GREEN_NETMASK", green_netmask); - findkey(unattendedkv, "GREEN_NETADDRESS", green_netaddress); - findkey(unattendedkv, "GREEN_BROADCAST", green_broadcast); - findkey(unattendedkv, "ROOT_PASSWORD", root_password); - findkey(unattendedkv, "ADMIN_PASSWORD", admin_password); - findkey(unattendedkv, "RESTORE_FILE", restore_file); - - /* write main/settings. */ - replacekeyvalue(mainsettings, "DOMAINNAME", domainname); - replacekeyvalue(mainsettings, "HOSTNAME", hostname); - replacekeyvalue(mainsettings, "KEYMAP", keymap); - replacekeyvalue(mainsettings, "LANGUAGE", language); - replacekeyvalue(mainsettings, "TIMEZONE", timezone); - replacekeyvalue(mainsettings, "THEME", theme); - writekeyvalues(mainsettings, "/harddisk" CONFIG_ROOT "/main/settings"); - freekeyvalues(mainsettings); - - /* do setup stuff */ - fprintf(flog, "unattended: Starting setup\n"); - - /* network */ - fprintf(flog, "unattended: setting up network configuration\n"); - - (void) readkeyvalues(ethernetkv, "/harddisk" CONFIG_ROOT "/ethernet/settings"); - replacekeyvalue(ethernetkv, "GREEN_ADDRESS", green_address); - replacekeyvalue(ethernetkv, "GREEN_NETMASK", green_netmask); - replacekeyvalue(ethernetkv, "GREEN_NETADDRESS", green_netaddress); - replacekeyvalue(ethernetkv, "GREEN_BROADCAST", green_broadcast); - replacekeyvalue(ethernetkv, "CONFIG_TYPE", "0"); - replacekeyvalue(ethernetkv, "GREEN_DEV", "eth0"); - writekeyvalues(ethernetkv, "/harddisk" CONFIG_ROOT "/ethernet/settings"); - freekeyvalues(ethernetkv); - - /* timezone */ - unlink("/harddisk/etc/localtime"); - snprintf(commandstring, STRING_SIZE, "/harddisk/%s", timezone); - link(commandstring, "/harddisk/etc/localtime"); - - /* hostname */ - fprintf(flog, "unattended: writing hostname.conf\n"); - if (!(file = fopen("/harddisk" CONFIG_ROOT "/main/hostname.conf", "w"))) - { - errorbox("unattended: ERROR writing hostname.conf"); - return 0; - } - fprintf(file, "ServerName %s.%s\n", hostname,domainname); - fclose(file); - - fprintf(flog, "unattended: writing hosts\n"); - if (!(hosts = fopen("/harddisk/etc/hosts", "w"))) - { - errorbox("unattended: ERROR writing hosts"); - return 0; - } - fprintf(hosts, "127.0.0.1\tlocalhost\n"); - fprintf(hosts, "%s\t%s.%s\t%s\n", green_address, hostname, domainname, hostname); - fclose(hosts); - - fprintf(flog, "unattended: writing hosts.allow\n"); - if (!(file = fopen("/harddisk/etc/hosts.allow", "w"))) - { - errorbox("unattended: ERROR writing hosts.allow"); - return 0; - } - fprintf(file, "sshd : ALL\n"); - fprintf(file, "ALL : localhost\n"); - fprintf(file, "ALL : %s/%s\n", green_netaddress, green_netmask); - fclose(file); - - fprintf(flog, "unattended: writing hosts.deny\n"); - if (!(file = fopen("/harddisk/etc/hosts.deny", "w"))) - { - errorbox("unattended: ERROR writing hosts.deny"); - return 0; - } - fprintf(file, "ALL : ALL\n"); - fclose(file); - - /* set root password */ - fprintf(flog, "unattended: setting root password\n"); - snprintf(commandstring, STRING_SIZE, - "/usr/sbin/chroot /harddisk /bin/sh -c \"echo 'root:%s' | /usr/sbin/chpasswd\"", root_password); - if (mysystem(NULL, commandstring)) { - errorbox("unattended: ERROR setting root password"); - return 0; - } - - /* set admin password */ - fprintf(flog, "unattended: setting admin password\n"); - snprintf(commandstring, STRING_SIZE, - "/usr/sbin/chroot /harddisk /usr/sbin/htpasswd -c -m -b " CONFIG_ROOT "/auth/users admin '%s'", admin_password); - if (mysystem(NULL, commandstring)) { - errorbox("unattended: ERROR setting admin password"); - return 0; - } - - /* restore backup */ - if (strlen(restore_file) > 0) { - fprintf(flog, "unattended: Restoring Backup\n"); - snprintf(commandstring, STRING_SIZE, - "/usr/sbin/chroot /harddisk /bin/tar -xvzp -f /var/ipfire/backup/%s -C /", restore_file); - if (mysystem(NULL, commandstring)) { - errorbox("unattended: ERROR restoring backup"); - } - } - - fprintf(flog, "unattended: Setup ended\n"); - fclose(flog); - - return 1; -} From 15f706806d7b5cc21bcb0ff2090c9a1d4c700bae Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 11 Oct 2014 19:19:14 +0200 Subject: [PATCH 152/297] installer: Remove Makefile of old build system --- src/installer/Makefile | 49 ------------------------------------------ 1 file changed, 49 deletions(-) delete mode 100644 src/installer/Makefile diff --git a/src/installer/Makefile b/src/installer/Makefile deleted file mode 100644 index 928520e41..000000000 --- a/src/installer/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007 Michael Tremer & Christian Schmidt # -# # -# 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 3 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, see . # -# # -############################################################################### - - -CC = gcc -CFLAGS = -O2 -Wall -INCLUDE = - -LD = gcc -LDFLAGS = -LIBS = -lnewt -lslang -lpci -ludev -lblkid -lsmooth - -COMPILE = $(CC) -c $(INCLUDE) $(CFLAGS) - -LINK = $(LD) $(LDFLAGS) - -all : programs - -programs : installer - -clean : - -rm -f *.o install core - -###### - -OBJS=main.o unattended.o hw.o - -installer: $(OBJS) - $(LINK) $(OBJS) -o $@ $(LIBS) - -%.o : %.c - $(COMPILE) $< -o $@ From 7d114284653340a32c29f576a1c33faf5a21aca1 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 12 Oct 2014 14:30:51 +0200 Subject: [PATCH 153/297] installer: Allow to start networking without ISO download --- config/rootfiles/common/installer | 1 + src/installer/Makefile.am | 3 +- src/installer/downloadsource.sh | 7 --- src/installer/dracut-module/module-setup.sh | 7 ++- src/installer/hw.c | 4 ++ src/installer/main.c | 56 +++++++++++++++--- src/installer/start-networking.sh | 65 +++++++++++++++++++++ 7 files changed, 125 insertions(+), 18 deletions(-) create mode 100644 src/installer/start-networking.sh diff --git a/config/rootfiles/common/installer b/config/rootfiles/common/installer index f28d98474..71b537dd3 100644 --- a/config/rootfiles/common/installer +++ b/config/rootfiles/common/installer @@ -1,4 +1,5 @@ #usr/bin/downloadsource.sh +#usr/bin/start-networking.sh #usr/bin/installer #usr/lib/dracut/modules.d/99installer #usr/lib/dracut/modules.d/99installer/70-dhcpcd.exe diff --git a/src/installer/Makefile.am b/src/installer/Makefile.am index 59a5312fb..f52a5940a 100644 --- a/src/installer/Makefile.am +++ b/src/installer/Makefile.am @@ -33,7 +33,8 @@ bin_PROGRAMS = \ installer bin_SCRIPTS = \ - downloadsource.sh + downloadsource.sh \ + start-networking.sh #- installer ------------------------------------------------------------------- diff --git a/src/installer/downloadsource.sh b/src/installer/downloadsource.sh index 1f6c432dd..7504c198f 100644 --- a/src/installer/downloadsource.sh +++ b/src/installer/downloadsource.sh @@ -32,13 +32,6 @@ if ( [ "$CMDLINE" == "1" ]); then IPFireISO=`echo ${CMDLINE:POS} | cut -d"=" -f2 | cut -d" " -f1` fi -echo -echo "Configure Network with DHCP..." -dhcpcd -echo -echo "Sleep 15s..." -sleep 15 -echo echo "Download with wget..." wget $IPFireISO -O /tmp/download.iso -t3 -U IPFire_NetInstall/2.x wget $IPFireISO.md5 -O /tmp/download.iso.md5 -t3 -U IPFire_NetInstall/2.x diff --git a/src/installer/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh index 0aa77c945..31caa5489 100755 --- a/src/installer/dracut-module/module-setup.sh +++ b/src/installer/dracut-module/module-setup.sh @@ -34,8 +34,9 @@ install() { # Extraction inst_multiple tar gzip lzma xz - # DHCP Client - inst dhcpcd + # Networking + inst_multiple dhcpcd ethtool hostname ip ping wget + inst /usr/bin/start-networking.sh inst /var/ipfire/dhcpc/dhcpcd-run-hooks inst /var/ipfire/dhcpc/dhcpcd.conf for file in /var/ipfire/dhcpc/dhcpcd-hooks/*; do @@ -44,7 +45,7 @@ install() { inst "$moddir/70-dhcpcd.exe" "/var/ipfire/dhcpc/dhcpcd-hooks/70-dhcpcd.exe" # Misc. tools - inst_multiple eject ping touch wget + inst_multiple cut grep eject killall md5sum touch inst_multiple -o fdisk cfdisk df ps top # Hardware IDs diff --git a/src/installer/hw.c b/src/installer/hw.c index ecc4dc392..4e65a8b7a 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -1037,3 +1037,7 @@ void hw_sync() { sync(); sync(); } + +int hw_start_networking(const char* output) { + return mysystem(output, "/usr/bin/start-networking.sh"); +} diff --git a/src/installer/main.c b/src/installer/main.c index 94603b8bb..520ae3a8b 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -247,6 +247,7 @@ int main(int argc, char *argv[]) { int unattended = 0; int serialconsole = 0; + int require_networking = 0; struct keyvalue *unattendedkv = initkeyvalues(); char restore_file[STRING_SIZE] = ""; @@ -291,6 +292,12 @@ int main(int argc, char *argv[]) { splashWindow(title, _("Warning: Unattended installation will start in 10 seconds..."), 10); unattended = 1; } + + // check if the installer should start networking + if (strstr(line, "installer.net") != NULL) { + require_networking = 1; + } + // check if we have to patch for serial console if (strstr (line, "console=ttyS0") != NULL) { serialconsole = 1; @@ -338,18 +345,53 @@ int main(int argc, char *argv[]) { /* Search for a source drive that holds the right * version of the image we are going to install. */ sourcedrive = hw_find_source_medium(hw); - fprintf(flog, "Source drive: %s\n", sourcedrive); + + /* If we could not find a source drive, we will try + * downloading the install image */ if (!sourcedrive) { - newtWinMessage(title, _("OK"), _("No local source media found. Starting download.")); - runcommandwithstatus("/bin/downloadsource.sh", title, _("Downloading installation image ..."), logfile); - if ((handle = fopen("/tmp/source_device", "r")) == NULL) { - errorbox(_("Download error")); + require_networking = 1; + + if (!unattended) { + rc = newtWinOkCancel(title, _("No source drive could be found.\n\n" + "You can try to download the required installation data. " + "Please make sure to connect your machine to a network and " + "the installer will try connect to acquire an IP address."), + 55, 10, _("Download installation image"), _("Cancel")); + + if (rc != 0) + goto EXIT; + } + } + + // Try starting the networking if we require it + if (require_networking) { + statuswindow(60, 4, title, _("Trying to start networking (DHCP)...")); + + rc = hw_start_networking(logfile); + newtPopWindow(); + + if (rc) { + errorbox(_("Networking could not be started " + "but is required to go on with the installation.\n\n" + "Please connect your machine to a network with a " + "DHCP server and retry.")); goto EXIT; } - fgets(sourcedrive, 5, handle); - fclose(handle); + // Download the image if required + if (!sourcedrive) { + runcommandwithstatus("/usr/bin/downloadsource.sh", + title, _("Downloading installation image..."), logfile); + + if ((handle = fopen("/tmp/source_device", "r")) == NULL) { + errorbox(_("Download error")); + goto EXIT; + } + + fgets(sourcedrive, 5, handle); + fclose(handle); + } } assert(sourcedrive); diff --git a/src/installer/start-networking.sh b/src/installer/start-networking.sh new file mode 100644 index 000000000..faeeb1723 --- /dev/null +++ b/src/installer/start-networking.sh @@ -0,0 +1,65 @@ +#!/bin/bash +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2014 IPFire Team # +# # +# 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 3 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, see . # +# # +############################################################################### + +function list_interfaces() { + local interface + + for interface in /sys/class/net/*; do + [ -d "${interface}" ] || continue + + interface="$(basename ${interface})" + case "${interface}" in + eth*) + echo "${interface}" + ;; + esac + done +} + +function try_dhcp() { + local interface="${1}" + + # Bring up the interface + ip link set "${interface}" up + + # Try to make the lights of the adapter light up + ethtool -i "${interface}" &>/dev/null + + # Start the DHCP client + dhcpcd "${interface}" +} + +function main() { + local interface + for interface in $(list_interfaces); do + if ! try_dhcp "${interface}"; then + echo "Could not acquire an IP address on ${interface}" + continue + fi + + echo "Successfully started on ${interface}" + return 0 + done + + return 1 +} + +main From b84813b4327d781611ebb5e02ebb1bb07aaed9a2 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 12 Oct 2014 15:04:25 +0200 Subject: [PATCH 154/297] installer: Remove reading the path of the downloaded ISO --- src/installer/main.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index 520ae3a8b..411121c12 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -25,6 +25,7 @@ #define INST_FILECOUNT 21000 #define UNATTENDED_CONF "/cdrom/boot/unattended.conf" #define LICENSE_FILE "/cdrom/COPYING" +#define SOURCE_TEMPFILE "/tmp/downloaded-image.iso" extern char url[STRING_SIZE]; @@ -381,16 +382,17 @@ int main(int argc, char *argv[]) { // Download the image if required if (!sourcedrive) { - runcommandwithstatus("/usr/bin/downloadsource.sh", - title, _("Downloading installation image..."), logfile); + snprintf(commandstring, sizeof(commandstring), "/usr/bin/downloadsource.sh %s", SOURCE_TEMPFILE); + runcommandwithstatus(commandstring, title, _("Downloading installation image..."), logfile); - if ((handle = fopen("/tmp/source_device", "r")) == NULL) { - errorbox(_("Download error")); + FILE* f = fopen(SOURCE_TEMPFILE, "r"); + if (f) { + sourcedrive = SOURCE_TEMPFILE; + fclose(f); + } else { + errorbox(_("The installation image could not be downloaded.")); goto EXIT; } - - fgets(sourcedrive, 5, handle); - fclose(handle); } } From 35853bb47bc3a8dea8591979aa4d23a78c255f60 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 12 Oct 2014 16:53:12 +0200 Subject: [PATCH 155/297] installer: Make networking and download functions more user-friendly Allows to retry after a failed attempt or abort --- src/installer/main.c | 61 ++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index 411121c12..ba50cd9b6 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -351,37 +351,57 @@ int main(int argc, char *argv[]) { /* If we could not find a source drive, we will try * downloading the install image */ if (!sourcedrive) { - require_networking = 1; - if (!unattended) { - rc = newtWinOkCancel(title, _("No source drive could be found.\n\n" - "You can try to download the required installation data. " - "Please make sure to connect your machine to a network and " - "the installer will try connect to acquire an IP address."), - 55, 10, _("Download installation image"), _("Cancel")); + // Show the right message to the user + char reason[STRING_SIZE]; + if (require_networking) { + snprintf(reason, sizeof(reason), + _("The installer will now try downloading the installation image.")); + } else { + snprintf(reason, sizeof(reason), + _("No source drive could be found.\n\n" + "You can try downloading the required installation image.")); + } + snprintf(message, sizeof(message), "%s %s", reason, + _("Please make sure to connect your machine to a network and " + "the installer will try connect to acquire an IP address.")); + + rc = newtWinOkCancel(title, message, 55, 12, + _("Download installation image"), _("Cancel")); if (rc != 0) goto EXIT; } + + require_networking = 1; } // Try starting the networking if we require it if (require_networking) { - statuswindow(60, 4, title, _("Trying to start networking (DHCP)...")); + while (1) { + statuswindow(60, 4, title, _("Trying to start networking (DHCP)...")); - rc = hw_start_networking(logfile); - newtPopWindow(); + rc = hw_start_networking(logfile); + newtPopWindow(); - if (rc) { - errorbox(_("Networking could not be started " - "but is required to go on with the installation.\n\n" - "Please connect your machine to a network with a " - "DHCP server and retry.")); - goto EXIT; + // Networking was successfully started + if (rc == 0) { + break; + + // An error happened, ask the user what to do + } else { + rc = newtWinOkCancel(title, _("Networking could not be started " + "but is required to go on with the installation.\n\n" + "Please connect your machine to a network with a " + "DHCP server and retry."), 50, 10, _("Retry"), _("Cancel")); + + if (rc) + goto EXIT; + } } // Download the image if required - if (!sourcedrive) { + while (!sourcedrive) { snprintf(commandstring, sizeof(commandstring), "/usr/bin/downloadsource.sh %s", SOURCE_TEMPFILE); runcommandwithstatus(commandstring, title, _("Downloading installation image..."), logfile); @@ -390,8 +410,11 @@ int main(int argc, char *argv[]) { sourcedrive = SOURCE_TEMPFILE; fclose(f); } else { - errorbox(_("The installation image could not be downloaded.")); - goto EXIT; + rc = newtWinOkCancel(title, _("The installation image could not be downloaded."), + 60, 8, _("Retry"), _("Cancel")); + + if (rc) + goto EXIT; } } } From f456f0b29ca2989772f88b44895c83cc42a8ec0b Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Wed, 15 Oct 2014 16:11:27 +0200 Subject: [PATCH 156/297] kernel: uodate to 3.10.58. --- lfs/linux | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lfs/linux b/lfs/linux index f78c91104..aba31cc0e 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,10 @@ include Config -VER = 3.10.57 +VER = 3.10.58 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.57-ipfire1.patch.xz +GRS_PATCHES = grsecurity-2.9.1-3.10.58-ipfire1.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = f432a49044b24af06faa9a347f4ed0b5 +$(DL_FILE)_MD5 = 3ff3478b6351143cef22d4b81cf48b01 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = 4db694411ace8a971e04886ba7fddcc2 +$(GRS_PATCHES)_MD5 = c96901bf2eae568cce6257546182215d install : $(TARGET) From 6f23e39ee2c62d91d0013caaaa21796d0056cff9 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Wed, 15 Oct 2014 20:42:38 +0200 Subject: [PATCH 157/297] kernel: fix build for rpi. the eMMC patch is also inside of the rpi patchset from rpi-foundation so it cannot applied again. --- lfs/linux | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lfs/linux b/lfs/linux index aba31cc0e..4c72677d6 100644 --- a/lfs/linux +++ b/lfs/linux @@ -145,7 +145,10 @@ endif cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.39-add_libertas_uap.patch # mmc +ifneq "$(KCFG)" "-headers" + # this patch is also in the rpi patchset. cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.57-mmc_add_eMMC_5.x.patch +endif # mISDN Patches cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mISDN_hfc-s_add_id.patch From 38c6822d3c99104978975352bcfe80fb13a94c72 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 15 Oct 2014 23:38:05 +0200 Subject: [PATCH 158/297] installer: Make restoring the backup interactive --- config/syslinux/unattended.conf | 12 ------------ lfs/cdrom | 4 ---- src/installer/hw.c | 24 ++++++++++++++++++++++++ src/installer/hw.h | 3 +++ src/installer/main.c | 23 ++++++++++++++++++----- src/scripts/backupiso | 4 ++-- 6 files changed, 47 insertions(+), 23 deletions(-) delete mode 100644 config/syslinux/unattended.conf diff --git a/config/syslinux/unattended.conf b/config/syslinux/unattended.conf deleted file mode 100644 index 169463bb9..000000000 --- a/config/syslinux/unattended.conf +++ /dev/null @@ -1,12 +0,0 @@ -DOMAINNAME=localdomain -HOSTNAME=ipfire -KEYMAP=/lib/kbd/keymaps/i386/qwerty/us.map.gz -LANGUAGE=en -TIMEZONE=/usr/share/zoneinfo/posix/Europe/Berlin -THEME=ipfire -GREEN_ADDRESS=192.168.0.1 -GREEN_NETMASK=255.255.255.0 -GREEN_NETADDRESS=192.168.0.0 -GREEN_BROADCAST=192.168.0.255 -ROOT_PASSWORD=ipfire -ADMIN_PASSWORD=ipfire diff --git a/lfs/cdrom b/lfs/cdrom index 7a569a0ca..79920b8dd 100644 --- a/lfs/cdrom +++ b/lfs/cdrom @@ -86,10 +86,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cp $(DIR_SRC)/doc/COPYING /install/cdrom/ cp $(DIR_SRC)/doc/{ChangeLog,packages-list.txt} /install/cdrom/doc - # Configuration - mkdir -p /install/cdrom/boot - cp $(DIR_SRC)/config/syslinux/unattended.conf /install/cdrom/boot/unattended.conf - # Make the ISO mkdir -p /install/cdrom/boot/isolinux dd if=/dev/zero bs=1k count=2 > /install/cdrom/boot/isolinux/boot.catalog diff --git a/src/installer/hw.c b/src/installer/hw.c index 4e65a8b7a..9b9a2d002 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -1041,3 +1041,27 @@ void hw_sync() { int hw_start_networking(const char* output) { return mysystem(output, "/usr/bin/start-networking.sh"); } + +char* hw_find_backup_file(const char* output, const char* search_path) { + char path[STRING_SIZE]; + + snprintf(path, sizeof(path), "%s/backup.ipf", search_path); + int r = access(path, R_OK); + + if (r == 0) + return strdup(path); + + return NULL; +} + +int hw_restore_backup(const char* output, const char* backup_path, const char* destination) { + char command[STRING_SIZE]; + + snprintf(command, sizeof(command), "/bin/tar xzpf %s -C %s", backup_path, destination); + int rc = mysystem(output, command); + + if (rc) + return -1; + + return 0; +} diff --git a/src/installer/hw.h b/src/installer/hw.h index c5285d543..41ff093ad 100644 --- a/src/installer/hw.h +++ b/src/installer/hw.h @@ -128,6 +128,9 @@ int hw_stop_all_raid_arrays(const char* output); int hw_install_bootloader(struct hw_destination* dest, const char* output); int hw_write_fstab(struct hw_destination* dest); +char* hw_find_backup_file(const char* output, const char* search_path); +int hw_restore_backup(const char* output, const char* backup_path, const char* destination); + void hw_sync(); #endif /* HEADER_HW_H */ diff --git a/src/installer/main.c b/src/installer/main.c index ba50cd9b6..36f8dfec8 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -722,11 +722,24 @@ int main(int argc, char *argv[]) { mysystem(logfile, "/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted"); /* Copy restore file from cdrom */ - if (unattended && (strlen(restore_file) > 0)) { - fprintf(flog, "unattended: Copy restore file\n"); - snprintf(commandstring, STRING_SIZE, - "cp /cdrom/%s /harddisk/var/ipfire/backup", restore_file); - mysystem(logfile, commandstring); + char* backup_file = hw_find_backup_file(logfile, SOURCE_MOUNT_PATH); + if (backup_file) { + rc = 0; + if (!unattended) { + rc = newtWinOkCancel(title, _("A backup file has been found on the installation image.\n\n" + "Do you want to restore the backup?"), 50, 10, _("Yes"), _("No")); + } + + if (rc == 0) { + rc = hw_restore_backup(logfile, backup_file, DESTINATION_MOUNT_PATH); + + if (rc) { + errorbox(_("An error occured when the backup file was restored.")); + goto EXIT; + } + } + + free(backup_file); } // Umount the destination drive diff --git a/src/scripts/backupiso b/src/scripts/backupiso index a340d6f14..fb203bd2a 100644 --- a/src/scripts/backupiso +++ b/src/scripts/backupiso @@ -53,8 +53,8 @@ cp -pr backupiso.tmp.${TS} backupiso.${TS} umount backupiso.tmp.${TS} rm -r backupiso.tmp.${TS} -echo "RESTORE_FILE=${TS}.ipf" >> backupiso.${TS}/boot/unattended.conf -cp /var/ipfire/backup/${TS}.ipf backupiso.${TS} +# Copy backup file to disk +cp "/var/ipfire/backup/${TS}.ipf" "backupiso.${TS}/backup.ipf" echo "Running mkisofs" mkisofs -J -r -V "ipfire backup ${TS}" \ From 211c7984d4fe68d13efb9a71a10e9468aba75c27 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 21 Oct 2014 22:30:36 +0200 Subject: [PATCH 159/297] installer: Create a config struct --- src/installer/main.c | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index 36f8dfec8..761293fe8 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -226,6 +226,14 @@ static struct lang { { NULL, NULL }, }; +static struct config { + int serial_console; + int require_networking; +} config = { + .serial_console = 0, + .require_networking = 0, +}; + int main(int argc, char *argv[]) { struct hw* hw = hw_init(); const char* logfile = NULL; @@ -247,10 +255,6 @@ int main(int argc, char *argv[]) { char line[STRING_SIZE]; int unattended = 0; - int serialconsole = 0; - int require_networking = 0; - struct keyvalue *unattendedkv = initkeyvalues(); - char restore_file[STRING_SIZE] = ""; setlocale (LC_ALL, ""); sethostname( SNAME , 10); @@ -296,12 +300,12 @@ int main(int argc, char *argv[]) { // check if the installer should start networking if (strstr(line, "installer.net") != NULL) { - require_networking = 1; + config.require_networking = 1; } // check if we have to patch for serial console if (strstr (line, "console=ttyS0") != NULL) { - serialconsole = 1; + config.serial_console = 1; } } @@ -354,7 +358,7 @@ int main(int argc, char *argv[]) { if (!unattended) { // Show the right message to the user char reason[STRING_SIZE]; - if (require_networking) { + if (config.require_networking) { snprintf(reason, sizeof(reason), _("The installer will now try downloading the installation image.")); } else { @@ -373,11 +377,11 @@ int main(int argc, char *argv[]) { goto EXIT; } - require_networking = 1; + config.require_networking = 1; } // Try starting the networking if we require it - if (require_networking) { + if (config.require_networking) { while (1) { statuswindow(60, 4, title, _("Trying to start networking (DHCP)...")); @@ -428,14 +432,6 @@ int main(int argc, char *argv[]) { exit(1); } - /* load unattended configuration */ - if (unattended) { - fprintf(flog, "unattended: Reading unattended.conf\n"); - - (void) readkeyvalues(unattendedkv, UNATTENDED_CONF); - findkey(unattendedkv, "RESTORE_FILE", restore_file); - } - if (!unattended) { // Read the license file. if (!(copying = fopen(LICENSE_FILE, "r"))) { @@ -686,7 +682,7 @@ int main(int argc, char *argv[]) { statuswindow(60, 4, title, _("Installing the bootloader...")); /* Serial console ? */ - if (serialconsole) { + if (config.serial_console) { /* grub */ FILE* f = fopen(DESTINATION_MOUNT_PATH "/etc/default/grub", "a"); if (!f) { From 3a317084d65b0d7c5400fc01c969c65da023942b Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Wed, 22 Oct 2014 13:49:54 +0200 Subject: [PATCH 160/297] Revert "Revert "toolchain: Fix compiling due to Stack Protector changes."" This reverts commit 4ec728f840372f61d61c5019d766f453231eb706. --- lfs/gcc | 3 +++ lfs/glibc | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/lfs/gcc b/lfs/gcc index a9f124b8c..0264d37f8 100644 --- a/lfs/gcc +++ b/lfs/gcc @@ -97,6 +97,9 @@ else EXTRA_MAKE = EXTRA_INSTALL = endif + + # Disable stack protection in toolchain. + CFLAGS += -fno-stack-protector endif ifeq "$(MACHINE_TYPE)" "arm" diff --git a/lfs/glibc b/lfs/glibc index 32c494f24..ee332c40f 100644 --- a/lfs/glibc +++ b/lfs/glibc @@ -297,8 +297,21 @@ endif cd $(DIR_SRC)/glibc-build && \ CFLAGS="$(CFLAGS) -fno-asynchronous-unwind-tables" \ $(DIR_APP)/configure $(EXTRA_CONFIG) + + sed -i $(DIR_SRC)/glibc-build/config.make \ + -e "s/^build-pic-default=.*/build-pic-default=yes/" + + # Build the glibc libraries without stack protection (as this is not supported) + echo "build-programs=no" >> $(DIR_SRC)/glibc-build/configparms + cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=$(MAKETUNING) \ + CFLAGS="$(CFLAGS) -fno-stack-protector -U_FORTIFY_SOURCE" \ + CXXFLAGS="$(CXXFLAGS) -fno-stack-protector -U_FORTIFY_SOURCE" + + # Build the programs with hardening + : > $(DIR_SRC)/glibc-build/configparms cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=$(MAKETUNING) \ CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" + cd $(DIR_SRC)/glibc-build && make $(EXTRA_INSTALL) install ifeq "$(ROOT)" "" From af886d014077b600af93baf0de844cacf67d7bd3 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Wed, 22 Oct 2014 21:34:42 +0200 Subject: [PATCH 161/297] tzdata: fix build with new coreutils. --- lfs/tzdata | 1 + 1 file changed, 1 insertion(+) diff --git a/lfs/tzdata b/lfs/tzdata index c36b7a34f..afe3124e0 100644 --- a/lfs/tzdata +++ b/lfs/tzdata @@ -94,6 +94,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) /usr/share/zoneinfo rm -vf /usr/share/zoneinfo/localtime + rm -vf /etc/localtime cp -vf /usr/share/zoneinfo/GMT /etc/localtime @rm -rf $(DIR_APP) From 013153bc789728aea220c92d92918c6ff5dee8a1 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Wed, 22 Oct 2014 21:35:13 +0200 Subject: [PATCH 162/297] set toolchain to 8 and version to 2.17. --- make.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/make.sh b/make.sh index 8a7aafdd4..bbbaffd2e 100755 --- a/make.sh +++ b/make.sh @@ -24,9 +24,9 @@ NAME="IPFire" # Software name SNAME="ipfire" # Short name -VERSION="2.15" # Version number -CORE="85" # Core Level (Filename) -PAKFIRE_CORE="84" # Core Level (PAKFIRE) +VERSION="2.17" # Version number +CORE="86" # Core Level (Filename) +PAKFIRE_CORE="85" # Core Level (PAKFIRE) GIT_BRANCH=`git rev-parse --abbrev-ref HEAD` # Git Branch SLOGAN="www.ipfire.org" # Software slogan CONFIG_ROOT=/var/ipfire # Configuration rootdir @@ -36,7 +36,7 @@ BUILD_IMAGES=1 # Flash and Xen Downloader KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'` GIT_TAG=$(git tag | tail -1) # Git Tag GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8) # Last commit -TOOLCHAINVER=7 +TOOLCHAINVER=8 # New architecture variables BUILD_ARCH="$(uname -m)" From 2404450b403607c9f08745b16b04eaf2bd1dac83 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 23 Oct 2014 01:05:56 +0200 Subject: [PATCH 163/297] installer: Simplify kernel command line parsing --- src/installer/main.c | 81 ++++++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 33 deletions(-) diff --git a/src/installer/main.c b/src/installer/main.c index 761293fe8..c1a61b345 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -23,7 +23,6 @@ #define _(x) dgettext("installer", x) #define INST_FILECOUNT 21000 -#define UNATTENDED_CONF "/cdrom/boot/unattended.conf" #define LICENSE_FILE "/cdrom/COPYING" #define SOURCE_TEMPFILE "/tmp/downloaded-image.iso" @@ -227,13 +226,46 @@ static struct lang { }; static struct config { + int unattended; int serial_console; int require_networking; } config = { + .unattended = 0, .serial_console = 0, .require_networking = 0, }; +static void parse_command_line(struct config* c) { + char cmdline[STRING_SIZE]; + + FILE* f = fopen("/proc/cmdline", "r"); + if (!f) + return; + + int r = fread(&cmdline, 1, sizeof(cmdline) - 1, f); + if (r > 0) { + char* token = strtok(&cmdline, " "); + + while (token) { + // serial console + if (strcmp(token, "console=ttyS0") == 0) + c->serial_console = 1; + + // enable networking? + else if (strcmp(token, "installer.net") == 0) + c->require_networking = 1; + + // unattended mode + else if (strcmp(token, "installer.unattended") == 0) + c->unattended = 1; + + token = strtok(NULL, " "); + } + } + + fclose(f); +} + int main(int argc, char *argv[]) { struct hw* hw = hw_init(); const char* logfile = NULL; @@ -251,11 +283,9 @@ int main(int argc, char *argv[]) { char message[STRING_SIZE]; char title[STRING_SIZE]; int allok = 0; - FILE *handle, *cmdfile, *copying; + FILE *handle, *copying; char line[STRING_SIZE]; - int unattended = 0; - setlocale (LC_ALL, ""); sethostname( SNAME , 10); @@ -287,33 +317,18 @@ int main(int argc, char *argv[]) { snprintf(title, sizeof(title), "%s - %s", NAME, SLOGAN); - if (! (cmdfile = fopen("/proc/cmdline", "r"))) { - fprintf(flog, "Couldn't open commandline: /proc/cmdline\n"); - } else { - fgets(line, STRING_SIZE, cmdfile); + // Parse parameters from the kernel command line + parse_command_line(&config); - // check if we have to make an unattended install - if (strstr(line, "installer.unattended") != NULL) { - splashWindow(title, _("Warning: Unattended installation will start in 10 seconds..."), 10); - unattended = 1; - } - - // check if the installer should start networking - if (strstr(line, "installer.net") != NULL) { - config.require_networking = 1; - } - - // check if we have to patch for serial console - if (strstr (line, "console=ttyS0") != NULL) { - config.serial_console = 1; - } + if (config.unattended) { + splashWindow(title, _("Warning: Unattended installation will start in 10 seconds..."), 10); } // Load common modules mysystem(logfile, "/sbin/modprobe vfat"); // USB key hw_stop_all_raid_arrays(logfile); - if (!unattended) { + if (!config.unattended) { // Language selection char* langnames[NUM_LANGS + 1]; @@ -340,7 +355,7 @@ int main(int argc, char *argv[]) { char* helpline = center_string(_("/ between elements | selects | next screen"), screen_cols); newtPushHelpLine(helpline); - if (!unattended) { + if (!config.unattended) { snprintf(message, sizeof(message), _("Welcome to the %s installation program.\n\n" "Selecting Cancel on any of the following screens will reboot the computer."), NAME); @@ -355,7 +370,7 @@ int main(int argc, char *argv[]) { /* If we could not find a source drive, we will try * downloading the install image */ if (!sourcedrive) { - if (!unattended) { + if (!config.unattended) { // Show the right message to the user char reason[STRING_SIZE]; if (config.require_networking) { @@ -432,7 +447,7 @@ int main(int argc, char *argv[]) { exit(1); } - if (!unattended) { + if (!config.unattended) { // Read the license file. if (!(copying = fopen(LICENSE_FILE, "r"))) { sprintf(discl_msg, "Could not open license file: %s\n", LICENSE_FILE); @@ -470,7 +485,7 @@ int main(int argc, char *argv[]) { // exactly one disk has been found // or if we are running in unattended mode, we will select // the first disk and go with that one - } else if ((num_disks == 1) || (unattended && num_disks >= 1)) { + } else if ((num_disks == 1) || (config.unattended && num_disks >= 1)) { selected_disks = hw_select_first_disk(disks); // more than one usable disk has been found and @@ -508,7 +523,7 @@ int main(int argc, char *argv[]) { // Don't print the auto-selected harddisk setup in // unattended mode. - if (unattended) + if (config.unattended) break; num_selected_disks = hw_count_disks(selected_disks); @@ -566,7 +581,7 @@ int main(int argc, char *argv[]) { fprintf(flog, "Memory : %lluMB\n", BYTES2MB(hw_memory())); // Warn the user if there is not enough space to create a swap partition - if (!unattended && !*destination->part_swap) { + if (!config.unattended && !*destination->part_swap) { rc = newtWinChoice(title, _("OK"), _("Cancel"), _("Your harddisk is very small, but you can continue without a swap partition.")); @@ -575,7 +590,7 @@ int main(int argc, char *argv[]) { } // Filesystem selection - if (!unattended) { + if (!config.unattended) { struct filesystems { int fstype; const char* description; @@ -721,7 +736,7 @@ int main(int argc, char *argv[]) { char* backup_file = hw_find_backup_file(logfile, SOURCE_MOUNT_PATH); if (backup_file) { rc = 0; - if (!unattended) { + if (!config.unattended) { rc = newtWinOkCancel(title, _("A backup file has been found on the installation image.\n\n" "Do you want to restore the backup?"), 50, 10, _("Yes"), _("No")); } @@ -751,7 +766,7 @@ int main(int argc, char *argv[]) { snprintf(commandstring, STRING_SIZE, "/usr/bin/eject %s", sourcedrive); mysystem(logfile, commandstring); - if (!unattended) { + if (!config.unattended) { snprintf(message, sizeof(message), _( "%s was successfully installed!\n\n" "Please remove any installation mediums from this system and hit the reboot button. " From 541fb9a8a1296676ef7d052dd975c5eac77d748f Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 23 Oct 2014 21:57:36 +0200 Subject: [PATCH 164/297] glibc: fix build with new patches. --- lfs/glibc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lfs/glibc b/lfs/glibc index ee332c40f..194f5565e 100644 --- a/lfs/glibc +++ b/lfs/glibc @@ -284,6 +284,9 @@ endif # Makefile:235: *** mixed implicit and normal rules. Stop. cd $(DIR_APP) && sed -i 's/ot \$$/ot:\n\ttouch $$@\n$$/' manual/Makefile + # http://sourceware.org/ml/libc-ports/2011-09/msg00018.html + cd $(DIR_APP) && sed -e "s/PIC/SHARED/g" -i ports/sysdeps/arm/{,eabi/}{set,__long}jmp.S + ifeq "$(ROOT)" "" ifeq "$(MACHINE_TYPE)" "arm" cd $(DIR_APP) && sed -i 's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.3 -o|' \ From f2a7ec21e3abe4085ca113d7962bf60b150de7c6 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 23 Oct 2014 21:58:23 +0200 Subject: [PATCH 165/297] kernel: fix uInit ramdisk build. --- lfs/linux | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lfs/linux b/lfs/linux index 501458d19..f11bd5ff0 100644 --- a/lfs/linux +++ b/lfs/linux @@ -297,11 +297,11 @@ endif dracut --force --verbose --strip --xz /boot/initramfs-$(KVER)-$(VERSUFIX).img $(KVER)-$(VERSUFIX) ifeq "$(KCFG)" "-kirkwood" - cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-kirkwood.img uInit-ipfire-kirkwood + cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-$(VERSUFIX).img uInit-$(VERSUFIX) endif ifeq "$(KCFG)" "-multi" - cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-multi.img uInit-ipfire-multi + cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-$(VERSUFIX).img uInit-$(VERSUFIX) endif ifeq "$(LASTKERNEL)" "1" From dbd34ac0f274469b2150c01d1929bbc7e8d239af Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Fri, 24 Oct 2014 11:58:00 +0200 Subject: [PATCH 166/297] kernel: fix build on rpi. --- lfs/linux | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lfs/linux b/lfs/linux index 4c72677d6..1491cd64b 100644 --- a/lfs/linux +++ b/lfs/linux @@ -145,7 +145,7 @@ endif cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.39-add_libertas_uap.patch # mmc -ifneq "$(KCFG)" "-headers" +ifneq "$(KCFG)" "-rpi" # this patch is also in the rpi patchset. cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.57-mmc_add_eMMC_5.x.patch endif From c0511f3ab35cc059e0777b7481eaee105c738f5e Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 25 Oct 2014 14:56:23 +0200 Subject: [PATCH 167/297] installer: Rework downloading ISO and allow using a custom URL --- lfs/installer | 8 +-- src/installer/configure.ac | 5 ++ src/installer/downloadsource.sh | 54 +++++++++------ src/installer/dracut-module/70-dhcpcd.exe | 52 ++++++++++---- src/installer/dracut-module/module-setup.sh | 13 ++-- src/installer/hw.c | 47 +++++++++++++ src/installer/main.c | 76 +++++++++++++++------ src/installer/start-networking.sh | 4 ++ 8 files changed, 193 insertions(+), 66 deletions(-) diff --git a/lfs/installer b/lfs/installer index 7f73222c1..3364a4d7f 100644 --- a/lfs/installer +++ b/lfs/installer @@ -31,6 +31,7 @@ DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) SLOGAN = An Open Source Firewall Solution +DOWNLOAD_URL = http://downloads.ipfire.org/releases/ipfire-2.x/$(VERSION)-core$(CORE)/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso ############################################################################### # Top-level Rules @@ -58,12 +59,11 @@ $(TARGET) : --with-distro-name="$(NAME)" \ --with-distro-sname="$(SNAME)" \ --with-distro-slogan="$(SLOGAN)" \ - --with-config-root="$(CONFIG_ROOT)" + --with-config-root="$(CONFIG_ROOT)" \ + --with-download-url="$(DOWNLOAD_URL)" + cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install - #Patch ISO Name for download ... - #sed -i -e "s|ipfire.iso|download.ipfire.org/releases/ipfire-2.x/$(VERSION)-core$(CORE)/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso|g" \ - # /usr/bin/downloadsource.sh @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/installer/configure.ac b/src/installer/configure.ac index da968f637..e93e0afe4 100644 --- a/src/installer/configure.ac +++ b/src/installer/configure.ac @@ -84,6 +84,11 @@ AC_ARG_WITH([config-root], AC_DEFINE_UNQUOTED([CONFIG_ROOT], "$withval", [The config-root]), AC_MSG_ERROR([*** you need to set CONFIG_ROOT with --with-config-root=])) +AC_ARG_WITH([download-url], + AS_HELP_STRING([--with-download-url] [The default download URL]), + AC_DEFINE_UNQUOTED([DOWNLOAD_URL], "$withval", [The default download URL]), + AC_MSG_ERROR([*** you need to set DOWNLOAD_URL with --with-download-url=])) + AC_CONFIG_FILES([ Makefile po/Makefile.in diff --git a/src/installer/downloadsource.sh b/src/installer/downloadsource.sh index 7504c198f..4a48686ea 100644 --- a/src/installer/downloadsource.sh +++ b/src/installer/downloadsource.sh @@ -19,29 +19,39 @@ # # ############################################################################### -#lfs change the url while build! -IPFireISO=ipfire.iso -# +function download() { + wget -U "IPFire-NetInstall/2.x" "$@" +} -#Get user defined download from boot cmdline -grep "netinstall=" /proc/cmdline > /dev/null && CMDLINE=1 -if ( [ "$CMDLINE" == "1" ]); then - read CMDLINE < /proc/cmdline - POS=${CMDLINE%%netinstall*} - POS=${#POS} - IPFireISO=`echo ${CMDLINE:POS} | cut -d"=" -f2 | cut -d" " -f1` +if [ $# -lt 2 ]; then + echo "$0: Insufficient number of arguments" >&2 + exit 2 fi -echo "Download with wget..." -wget $IPFireISO -O /tmp/download.iso -t3 -U IPFire_NetInstall/2.x -wget $IPFireISO.md5 -O /tmp/download.iso.md5 -t3 -U IPFire_NetInstall/2.x -echo -echo "Checking download..." -md5_file=`md5sum /tmp/download.iso | cut -d" " -f1` -md5_down=`cat /tmp/download.iso.md5 | cut -d" " -f1` -if [ "$md5_file" == "$md5_down" ]; then - echo -n "/tmp/download.iso" > /tmp/source_device - exit 0 +OUTPUT="${1}" +URL="${2}" + +echo "Downloading ${URL}..." +if ! download -O "${OUTPUT}" "${URL}"; then + echo "Download failed" >&2 + + rm -f "${OUTPUT}" + exit 1 fi -echo "Error - SKIP" -exit 10 + +# Download went well. Checking for MD5 sum +if download -O "${OUTPUT}.md5" "${URL}.md5" &>/dev/null; then + # Read downloaded checksum + read -r md5sum rest < "${OUTPUT}.md5" + rm -f "${OUTPUT}.md5" + + # Compute checkum of downloaded image file + read -r md5sum_image rest <<< "$(md5sum "${OUTPUT}")" + + if [ "${md5sum}" != "${md5sum_image}" ]; then + echo "MD5 sum mismatch: ${md5sum} != ${md5sum_image}" >&2 + exit 2 + fi +fi + +exit 0 diff --git a/src/installer/dracut-module/70-dhcpcd.exe b/src/installer/dracut-module/70-dhcpcd.exe index 4100fc957..660f26941 100755 --- a/src/installer/dracut-module/70-dhcpcd.exe +++ b/src/installer/dracut-module/70-dhcpcd.exe @@ -12,21 +12,45 @@ # ######################################################################## -dhcpcd_up() -{ +LEASE_FILE="/var/ipfire/dhcpc/dhcpcd-${interface}.info" + +export_lease() { set | grep "^new_" | sed "s|^new_||g" | \ - sed "s|'||g" | \ - sort > /var/ipfire/dhcpc/dhcpcd-$interface.info - - DNS=`grep "domain_name_servers" /var/ipfire/dhcpc/dhcpcd-$interface.info | cut -d"=" -f2` - DNS1=`echo $DNS | cut -d" " -f1` - DNS2=`echo $DNS | cut -d" " -f2` - - echo "nameserver $DNS1" > /etc/resolv.conf - echo "nameserver $DNS2" >> /etc/resolv.conf - + sed "s|'||g" | sort > ${LEASE_FILE} } -case "$reason" in -BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT|STATIC) dhcpcd_up;; +make_resolvconf() { + local DNS="$(grep 'domain_name_servers' ${LEASE_FILE} | cut -d'=' -f2)" + local DNS1="$(echo ${DNS} | cut -d' ' -f1)" + local DNS2="$(echo ${DNS} | cut -d' ' -f2)" + + ( + echo "nameserver ${DNS1}" + echo "nameserver ${DNS2}" + ) > /etc/resolv.conf +} + +case "${reason}" in + PREINIT) + # Configure MTU + if [ -n "${new_interface_mtu}" ] && [ ${new_interface_mtu} -gt 576 ]; then + echo "Setting MTU to ${new_interface_mtu}" + ip link set "${interface}" mtu "${new_interface_mtu}" + fi + ;; + + BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT|STATIC) + # Export all information about the newly received lease + # to file + export_lease + + # Create system configuration files + make_resolvconf + ;; + + EXPIRE|FAIL|IPV4LL|NAK|NOCARRIER|RELEASE|STOP) + rm -f "${LEASE_FILE}" + ;; esac + +exit 0 diff --git a/src/installer/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh index 31caa5489..992fcecb7 100755 --- a/src/installer/dracut-module/module-setup.sh +++ b/src/installer/dracut-module/module-setup.sh @@ -35,17 +35,18 @@ install() { inst_multiple tar gzip lzma xz # Networking - inst_multiple dhcpcd ethtool hostname ip ping wget + inst_multiple dhcpcd ethtool hostname ip ping sort wget inst /usr/bin/start-networking.sh - inst /var/ipfire/dhcpc/dhcpcd-run-hooks inst /var/ipfire/dhcpc/dhcpcd.conf - for file in /var/ipfire/dhcpc/dhcpcd-hooks/*; do - inst "${file}" - done + inst /var/ipfire/dhcpc/dhcpcd-run-hooks inst "$moddir/70-dhcpcd.exe" "/var/ipfire/dhcpc/dhcpcd-hooks/70-dhcpcd.exe" + inst /etc/host.conf /etc/hosts /etc/protocols + inst /etc/nsswitch.conf /etc/resolv.conf + inst_libdir_file "libnss_dns.so.*" + # Misc. tools - inst_multiple cut grep eject killall md5sum touch + inst_multiple cut grep eject id killall md5sum touch inst_multiple -o fdisk cfdisk df ps top # Hardware IDs diff --git a/src/installer/hw.c b/src/installer/hw.c index 9b9a2d002..651ffdf27 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -26,12 +26,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include #include @@ -82,11 +84,56 @@ static int strstartswith(const char* a, const char* b) { return (strncmp(a, b, strlen(b)) == 0); } +static char loop_device[STRING_SIZE]; + +static int setup_loop_device(const char* source, const char* device) { + int file_fd = open(source, O_RDWR); + if (file_fd < 0) + goto ERROR; + + int device_fd = -1; + if ((device_fd = open(device, O_RDWR)) < 0) + goto ERROR; + + if (ioctl(device_fd, LOOP_SET_FD, file_fd) < 0) + goto ERROR; + + close(file_fd); + close(device_fd); + + return 0; + +ERROR: + if (file_fd >= 0) + close(file_fd); + + if (device_fd >= 0) { + ioctl(device_fd, LOOP_CLR_FD, 0); + close(device_fd); + } + + return -1; +} + int hw_mount(const char* source, const char* target, const char* fs, int flags) { + const char* loop_device = "/dev/loop0"; + // Create target if it does not exist if (access(target, X_OK) != 0) mkdir(target, S_IRWXU|S_IRWXG|S_IRWXO); + struct stat st; + stat(source, &st); + + if (S_ISREG(st.st_mode)) { + int r = setup_loop_device(source, loop_device); + if (r == 0) { + source = loop_device; + } else { + return -1; + } + } + return mount(source, target, fs, flags, NULL); } diff --git a/src/installer/main.c b/src/installer/main.c index c1a61b345..5a2e0c406 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -229,13 +229,18 @@ static struct config { int unattended; int serial_console; int require_networking; + int perform_download; + char download_url[STRING_SIZE]; } config = { .unattended = 0, .serial_console = 0, .require_networking = 0, + .perform_download = 0, + .download_url = DOWNLOAD_URL, }; static void parse_command_line(struct config* c) { + char buffer[STRING_SIZE]; char cmdline[STRING_SIZE]; FILE* f = fopen("/proc/cmdline", "r"); @@ -244,9 +249,13 @@ static void parse_command_line(struct config* c) { int r = fread(&cmdline, 1, sizeof(cmdline) - 1, f); if (r > 0) { - char* token = strtok(&cmdline, " "); + char* token = strtok(cmdline, " "); while (token) { + strncpy(buffer, token, sizeof(buffer)); + char* val = &buffer; + char* key = strsep(&val, "="); + // serial console if (strcmp(token, "console=ttyS0") == 0) c->serial_console = 1; @@ -259,6 +268,15 @@ static void parse_command_line(struct config* c) { else if (strcmp(token, "installer.unattended") == 0) c->unattended = 1; + // download url + else if (strcmp(key, "installer.download-url") == 0) { + strncpy(&c->download_url, val, sizeof(c->download_url)); + c->perform_download = 1; + + // Require networking for the download + c->require_networking = 1; + } + token = strtok(NULL, " "); } } @@ -364,16 +382,21 @@ int main(int argc, char *argv[]) { /* Search for a source drive that holds the right * version of the image we are going to install. */ - sourcedrive = hw_find_source_medium(hw); - fprintf(flog, "Source drive: %s\n", sourcedrive); + if (!config.perform_download) { + sourcedrive = hw_find_source_medium(hw); + fprintf(flog, "Source drive: %s\n", sourcedrive); + } /* If we could not find a source drive, we will try * downloading the install image */ - if (!sourcedrive) { + if (!sourcedrive) + config.perform_download = 1; + + if (config.perform_download) { if (!config.unattended) { // Show the right message to the user char reason[STRING_SIZE]; - if (config.require_networking) { + if (config.perform_download) { snprintf(reason, sizeof(reason), _("The installer will now try downloading the installation image.")); } else { @@ -392,6 +415,7 @@ int main(int argc, char *argv[]) { goto EXIT; } + // Make sure that we enable networking before download config.require_networking = 1; } @@ -420,20 +444,31 @@ int main(int argc, char *argv[]) { } // Download the image if required - while (!sourcedrive) { - snprintf(commandstring, sizeof(commandstring), "/usr/bin/downloadsource.sh %s", SOURCE_TEMPFILE); - runcommandwithstatus(commandstring, title, _("Downloading installation image..."), logfile); + if (config.perform_download) { + fprintf(flog, "Download URL: %s\n", config.download_url); + snprintf(commandstring, sizeof(commandstring), "/usr/bin/downloadsource.sh %s %s", + SOURCE_TEMPFILE, config.download_url); - FILE* f = fopen(SOURCE_TEMPFILE, "r"); - if (f) { - sourcedrive = SOURCE_TEMPFILE; - fclose(f); - } else { - rc = newtWinOkCancel(title, _("The installation image could not be downloaded."), - 60, 8, _("Retry"), _("Cancel")); + while (!sourcedrive) { + rc = runcommandwithstatus(commandstring, title, _("Downloading installation image..."), logfile); - if (rc) - goto EXIT; + FILE* f = fopen(SOURCE_TEMPFILE, "r"); + if (f) { + sourcedrive = SOURCE_TEMPFILE; + fclose(f); + } else { + char reason[STRING_SIZE] = "-"; + if (rc == 2) + snprintf(reason, sizeof(STRING_SIZE), _("MD5 checksum mismatch")); + + snprintf(message, sizeof(message), + _("The installation image could not be downloaded.\n Reason: %s\n\n%s"), + reason, config.download_url); + + rc = newtWinOkCancel(title, message, 75, 12, _("Retry"), _("Cancel")); + if (rc) + goto EXIT; + } } } } @@ -442,9 +477,10 @@ int main(int argc, char *argv[]) { int r = hw_mount(sourcedrive, SOURCE_MOUNT_PATH, "iso9660", MS_RDONLY); if (r) { - fprintf(flog, "Could not mount %s to %s\n", sourcedrive, SOURCE_MOUNT_PATH); - fprintf(flog, strerror(errno)); - exit(1); + snprintf(message, sizeof(message), _("Could not mount %s to %s:\n %s\n"), + sourcedrive, SOURCE_MOUNT_PATH, strerror(errno)); + errorbox(message); + goto EXIT; } if (!config.unattended) { diff --git a/src/installer/start-networking.sh b/src/installer/start-networking.sh index faeeb1723..3cb7a2172 100644 --- a/src/installer/start-networking.sh +++ b/src/installer/start-networking.sh @@ -56,6 +56,10 @@ function main() { fi echo "Successfully started on ${interface}" + + # Wait until everything is settled + sleep 15 + return 0 done From 335c5bd1cdfa81cac2f2aebf10c089f47039c0a4 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 25 Oct 2014 15:54:45 +0200 Subject: [PATCH 168/297] installer: Fix loads of compiler warnings --- src/installer/Makefile.am | 1 + src/installer/configure.ac | 10 ++++++++++ src/installer/hw.c | 15 ++++++++------- src/installer/hw.h | 4 +++- src/installer/main.c | 32 ++++++++++++++++---------------- 5 files changed, 38 insertions(+), 24 deletions(-) diff --git a/src/installer/Makefile.am b/src/installer/Makefile.am index f52a5940a..62625fd0f 100644 --- a/src/installer/Makefile.am +++ b/src/installer/Makefile.am @@ -44,6 +44,7 @@ installer_SOURCES = \ main.c installer_CFLAGS = \ + $(AM_CFLAGS) \ $(BLKID_CFLAGS) \ $(LIBSMOOTH_CFLAGS) \ $(PCI_CFLAGS) \ diff --git a/src/installer/configure.ac b/src/installer/configure.ac index e93e0afe4..85c5c5cb8 100644 --- a/src/installer/configure.ac +++ b/src/installer/configure.ac @@ -39,6 +39,16 @@ AC_PROG_CC AC_PROG_CC_C99 AC_PROG_CC_C_O +CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\ + "-Wformat=2 -Wformat-security -Wformat-nonliteral" \ + -Werror=overflow \ + -fno-strict-aliasing \ + -fstack-protector \ + -fstack-protector-strong \ + -fPIE \ + --param=ssp-buffer-size=4]) +AC_SUBST([OUR_CFLAGS], "$with_cflags") + AC_PATH_PROG([M4], [m4]) # Gettext diff --git a/src/installer/hw.c b/src/installer/hw.c index 651ffdf27..e14a47016 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -340,7 +340,7 @@ void hw_free_disks(struct hw_disk** disks) { free(disks); } -unsigned int hw_count_disks(struct hw_disk** disks) { +unsigned int hw_count_disks(const struct hw_disk** disks) { unsigned int ret = 0; while (*disks++) @@ -353,7 +353,7 @@ struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection) { struct hw_disk** ret = hw_create_disks(); struct hw_disk** selected_disks = ret; - unsigned int num_disks = hw_count_disks(disks); + unsigned int num_disks = hw_count_disks((const struct hw_disk**)disks); for (unsigned int i = 0; i < num_disks; i++) { if (!selection || selection[i]) { @@ -1029,12 +1029,13 @@ static char* hw_get_uuid(const char* dev) { return uuid; } +#define FSTAB_FMT "UUID=%s %-8s %-4s %-10s %d %d\n" + int hw_write_fstab(struct hw_destination* dest) { FILE* f = fopen(DESTINATION_MOUNT_PATH "/etc/fstab", "w"); if (!f) return -1; - const char* fmt = "UUID=%s %-8s %-4s %-10s %d %d\n"; char* uuid = NULL; // boot @@ -1042,7 +1043,7 @@ int hw_write_fstab(struct hw_destination* dest) { uuid = hw_get_uuid(dest->part_boot); if (uuid) { - fprintf(f, fmt, uuid, "/boot", "auto", "defaults", 1, 2); + fprintf(f, FSTAB_FMT, uuid, "/boot", "auto", "defaults", 1, 2); free(uuid); } } @@ -1052,7 +1053,7 @@ int hw_write_fstab(struct hw_destination* dest) { uuid = hw_get_uuid(dest->part_swap); if (uuid) { - fprintf(f, fmt, uuid, "swap", "swap", "defaults,pri=1", 0, 0); + fprintf(f, FSTAB_FMT, uuid, "swap", "swap", "defaults,pri=1", 0, 0); free(uuid); } } @@ -1060,7 +1061,7 @@ int hw_write_fstab(struct hw_destination* dest) { // root uuid = hw_get_uuid(dest->part_root); if (uuid) { - fprintf(f, fmt, uuid, "/", "auto", "defaults", 1, 1); + fprintf(f, FSTAB_FMT, uuid, "/", "auto", "defaults", 1, 1); free(uuid); } @@ -1069,7 +1070,7 @@ int hw_write_fstab(struct hw_destination* dest) { uuid = hw_get_uuid(dest->part_data); if (uuid) { - fprintf(f, fmt, uuid, "/var", "auto", "defaults", 1, 1); + fprintf(f, FSTAB_FMT, uuid, "/var", "auto", "defaults", 1, 1); free(uuid); } } diff --git a/src/installer/hw.h b/src/installer/hw.h index 41ff093ad..83753fdc0 100644 --- a/src/installer/hw.h +++ b/src/installer/hw.h @@ -107,7 +107,7 @@ char* hw_find_source_medium(struct hw* hw); struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive); void hw_free_disks(struct hw_disk** disks); -unsigned int hw_count_disks(struct hw_disk** disks); +unsigned int hw_count_disks(const struct hw_disk** disks); struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection); struct hw_disk** hw_select_first_disk(const struct hw_disk** disks); @@ -131,6 +131,8 @@ int hw_write_fstab(struct hw_destination* dest); char* hw_find_backup_file(const char* output, const char* search_path); int hw_restore_backup(const char* output, const char* backup_path, const char* destination); +int hw_start_networking(const char* output); + void hw_sync(); #endif /* HEADER_HW_H */ diff --git a/src/installer/main.c b/src/installer/main.c index 5a2e0c406..1d8abb81b 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -7,6 +7,7 @@ * Contains main entry point, and misc functions.6 * */ +#define _GNU_SOURCE #include #include @@ -162,7 +163,7 @@ static int newtLicenseBox(const char* title, const char* text, int width, int he return ret; } -int write_lang_configs(const char *lang) { +int write_lang_configs(char* lang) { struct keyvalue *kv = initkeyvalues(); /* default stuff for main/settings. */ @@ -206,7 +207,7 @@ static char* center_string(const char* str, int width) { } #define DEFAULT_LANG "English" -#define NUM_LANGS 8 +#define NUM_LANGS 10 static struct lang { const char* code; @@ -253,7 +254,7 @@ static void parse_command_line(struct config* c) { while (token) { strncpy(buffer, token, sizeof(buffer)); - char* val = &buffer; + char* val = buffer; char* key = strsep(&val, "="); // serial console @@ -270,7 +271,7 @@ static void parse_command_line(struct config* c) { // download url else if (strcmp(key, "installer.download-url") == 0) { - strncpy(&c->download_url, val, sizeof(c->download_url)); + strncpy(c->download_url, val, sizeof(c->download_url)); c->perform_download = 1; // Require networking for the download @@ -301,11 +302,10 @@ int main(int argc, char *argv[]) { char message[STRING_SIZE]; char title[STRING_SIZE]; int allok = 0; - FILE *handle, *copying; - char line[STRING_SIZE]; - - setlocale (LC_ALL, ""); - sethostname( SNAME , 10); + FILE *copying; + + setlocale(LC_ALL, ""); + sethostname(SNAME, 10); /* Log file/terminal stuff. */ FILE* flog = NULL; @@ -364,7 +364,7 @@ int main(int argc, char *argv[]) { assert(choice <= NUM_LANGS); fprintf(flog, "Selected language: %s (%s)\n", languages[choice].name, languages[choice].code); - snprintf(language, sizeof(language), languages[choice].code); + snprintf(language, sizeof(language), "%s", languages[choice].code); setenv("LANGUAGE", language, 1); setlocale(LC_ALL, language); @@ -487,7 +487,7 @@ int main(int argc, char *argv[]) { // Read the license file. if (!(copying = fopen(LICENSE_FILE, "r"))) { sprintf(discl_msg, "Could not open license file: %s\n", LICENSE_FILE); - fprintf(flog, discl_msg); + fprintf(flog, "%s", discl_msg); } else { fread(discl_msg, 1, 40000, copying); fclose(copying); @@ -510,7 +510,7 @@ int main(int argc, char *argv[]) { // Check how many disks have been found and what // we can do with them. - unsigned int num_disks = hw_count_disks(disks); + unsigned int num_disks = hw_count_disks((const struct hw_disk**)disks); while (1) { // no harddisks found @@ -522,7 +522,7 @@ int main(int argc, char *argv[]) { // or if we are running in unattended mode, we will select // the first disk and go with that one } else if ((num_disks == 1) || (config.unattended && num_disks >= 1)) { - selected_disks = hw_select_first_disk(disks); + selected_disks = hw_select_first_disk((const struct hw_disk**)disks); // more than one usable disk has been found and // the user needs to choose what to do with them @@ -531,7 +531,7 @@ int main(int argc, char *argv[]) { int disk_selection[num_disks]; for (unsigned int i = 0; i < num_disks; i++) { - disk_names[i] = &disks[i]->description; + disk_names[i] = disks[i]->description; disk_selection[i] = 0; } @@ -562,7 +562,7 @@ int main(int argc, char *argv[]) { if (config.unattended) break; - num_selected_disks = hw_count_disks(selected_disks); + num_selected_disks = hw_count_disks((const struct hw_disk**)selected_disks); if (num_selected_disks == 1) { snprintf(message, sizeof(message), @@ -645,7 +645,7 @@ int main(int argc, char *argv[]) { if (HW_FS_DEFAULT == filesystems[i].fstype) fs_choice = i; - fs_names[i] = filesystems[i].description; + fs_names[i] = &filesystems[i].description; } rc = newtWinMenu(_("Filesystem Selection"), _("Please choose your filesystem:"), From a8fca24560c74f0c37a270f93bd957f0c0b981f6 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 26 Oct 2014 16:00:03 +0100 Subject: [PATCH 169/297] installer: Allow to disable creation of swap space on command line --- src/installer/hw.c | 13 +++++++++---- src/installer/hw.h | 3 ++- src/installer/main.c | 24 ++++++++++++++++-------- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/installer/hw.c b/src/installer/hw.c index e14a47016..d74526050 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -440,7 +440,7 @@ static int hw_device_has_p_suffix(const struct hw_destination* dest) { return 0; } -static int hw_calculate_partition_table(struct hw_destination* dest) { +static int hw_calculate_partition_table(struct hw_destination* dest, int disable_swap) { char path[DEV_SIZE]; int part_idx = 1; @@ -493,9 +493,14 @@ static int hw_calculate_partition_table(struct hw_destination* dest) { } dest->size_boot = hw_boot_size(dest); - dest->size_swap = hw_swap_size(dest); dest->size_root = hw_root_size(dest); + // Should we use swap? + if (disable_swap) + dest->size_swap = 0; + else + dest->size_swap = hw_swap_size(dest); + // Determine the size of the data partition. unsigned long long used_space = dest->size_bootldr + dest->size_boot + dest->size_swap + dest->size_root; @@ -540,7 +545,7 @@ static int hw_calculate_partition_table(struct hw_destination* dest) { return 0; } -struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks) { +struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks, int disable_swap) { struct hw_destination* dest = malloc(sizeof(*dest)); if (part_type == HW_PART_TYPE_NORMAL) { @@ -560,7 +565,7 @@ struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks // Is this a RAID device? dest->is_raid = (part_type > HW_PART_TYPE_NORMAL); - int r = hw_calculate_partition_table(dest); + int r = hw_calculate_partition_table(dest, disable_swap); if (r) return NULL; diff --git a/src/installer/hw.h b/src/installer/hw.h index 83753fdc0..f16b39cb6 100644 --- a/src/installer/hw.h +++ b/src/installer/hw.h @@ -111,7 +111,8 @@ unsigned int hw_count_disks(const struct hw_disk** disks); struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection); struct hw_disk** hw_select_first_disk(const struct hw_disk** disks); -struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks); +struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks, + int disable_swap); unsigned long long hw_memory(); diff --git a/src/installer/main.c b/src/installer/main.c index 1d8abb81b..d3e1c6e3e 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -231,12 +231,14 @@ static struct config { int serial_console; int require_networking; int perform_download; + int disable_swap; char download_url[STRING_SIZE]; } config = { .unattended = 0, .serial_console = 0, .require_networking = 0, .perform_download = 0, + .disable_swap = 0, .download_url = DOWNLOAD_URL, }; @@ -269,6 +271,10 @@ static void parse_command_line(struct config* c) { else if (strcmp(token, "installer.unattended") == 0) c->unattended = 1; + // disable swap + else if (strcmp(token, "installer.disable-swap") == 0) + c->disable_swap = 1; + // download url else if (strcmp(key, "installer.download-url") == 0) { strncpy(c->download_url, val, sizeof(c->download_url)); @@ -601,7 +607,7 @@ int main(int argc, char *argv[]) { hw_free_disks(disks); - struct hw_destination* destination = hw_make_destination(part_type, selected_disks); + struct hw_destination* destination = hw_make_destination(part_type, selected_disks, config.disable_swap); if (!destination) { errorbox(_("Your harddisk is too small.")); @@ -617,19 +623,21 @@ int main(int argc, char *argv[]) { fprintf(flog, "Memory : %lluMB\n", BYTES2MB(hw_memory())); // Warn the user if there is not enough space to create a swap partition - if (!config.unattended && !*destination->part_swap) { - rc = newtWinChoice(title, _("OK"), _("Cancel"), - _("Your harddisk is very small, but you can continue without a swap partition.")); + if (!config.unattended) { + if (!config.disable_swap && !*destination->part_swap) { + rc = newtWinChoice(title, _("OK"), _("Cancel"), + _("Your harddisk is very small, but you can continue without a swap partition.")); - if (rc != 1) - goto EXIT; + if (rc != 1) + goto EXIT; + } } // Filesystem selection if (!config.unattended) { struct filesystems { int fstype; - const char* description; + char* description; } filesystems[] = { { HW_FS_EXT4, _("ext4 Filesystem") }, { HW_FS_EXT4_WO_JOURNAL, _("ext4 Filesystem without journal") }, @@ -645,7 +653,7 @@ int main(int argc, char *argv[]) { if (HW_FS_DEFAULT == filesystems[i].fstype) fs_choice = i; - fs_names[i] = &filesystems[i].description; + fs_names[i] = filesystems[i].description; } rc = newtWinMenu(_("Filesystem Selection"), _("Please choose your filesystem:"), From c409c335266ae7880bdd1c4712102935724d9c94 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 26 Oct 2014 16:37:44 +0100 Subject: [PATCH 170/297] glibc: fix build on intel platform. --- lfs/glibc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lfs/glibc b/lfs/glibc index 194f5565e..df3e39224 100644 --- a/lfs/glibc +++ b/lfs/glibc @@ -284,8 +284,10 @@ endif # Makefile:235: *** mixed implicit and normal rules. Stop. cd $(DIR_APP) && sed -i 's/ot \$$/ot:\n\ttouch $$@\n$$/' manual/Makefile +ifeq "$(MACHINE_TYPE)" "arm" # http://sourceware.org/ml/libc-ports/2011-09/msg00018.html cd $(DIR_APP) && sed -e "s/PIC/SHARED/g" -i ports/sysdeps/arm/{,eabi/}{set,__long}jmp.S +endif ifeq "$(ROOT)" "" ifeq "$(MACHINE_TYPE)" "arm" From 048fb6b9ea374d055200576a0a6467de46b4c0ad Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 26 Oct 2014 16:38:38 +0100 Subject: [PATCH 171/297] cryptodev: update to unreleased 1.7 from git. --- lfs/cryptodev | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lfs/cryptodev b/lfs/cryptodev index 14e463e2b..00e83e7c8 100644 --- a/lfs/cryptodev +++ b/lfs/cryptodev @@ -30,7 +30,7 @@ endif VERSUFIX=ipfire$(KCFG) -VER = 1.4 +VER = 6aa62a2c320b04f55fdfe0ed015c3d9b48997239 THISAPP = cryptodev-linux-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -46,7 +46,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 7b0ac1c0a88d8fbe7316db02f21666e6 +$(DL_FILE)_MD5 = ddf7876487c876f6676ef0e050e9d204 install : $(TARGET) From 9d3616dc517ae3d1a3568c92b7c7c2a58d4503ca Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 26 Oct 2014 16:40:04 +0100 Subject: [PATCH 172/297] kernel: update to 3.14.22 (intel only yet). --- config/kernel/kernel.config.i586-ipfire | 583 +- config/kernel/kernel.config.i586-ipfire-pae | 583 +- lfs/linux | 33 +- src/patches/linux-3.14-layer7-filter.patch | 2165 ++++++ src/patches/linux-3.14.22-dvbsky.patch | 6558 +++++++++++++++++ src/patches/linux-3.14.22-imq.patch | 1767 +++++ ...22-iwlwifi-noibss_only_on_radar_chan.patch | 22 + 7 files changed, 11398 insertions(+), 313 deletions(-) create mode 100644 src/patches/linux-3.14-layer7-filter.patch create mode 100644 src/patches/linux-3.14.22-dvbsky.patch create mode 100644 src/patches/linux-3.14.22-imq.patch create mode 100644 src/patches/linux-3.14.22-iwlwifi-noibss_only_on_radar_chan.patch diff --git a/config/kernel/kernel.config.i586-ipfire b/config/kernel/kernel.config.i586-ipfire index 3c83b945b..03d0eadae 100644 --- a/config/kernel/kernel.config.i586-ipfire +++ b/config/kernel/kernel.config.i586-ipfire @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.10.52 Kernel Configuration +# Linux/x86 3.14.22 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -28,6 +28,8 @@ CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y # CONFIG_ZONE_DMA32 is not set # CONFIG_AUDIT_ARCH is not set CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y @@ -36,7 +38,6 @@ CONFIG_HAVE_INTEL_TXT=y CONFIG_X86_32_SMP=y CONFIG_X86_HT=y CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" -CONFIG_ARCH_CPU_PROBE_RELEASE=y CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_IRQ_WORK=y @@ -47,6 +48,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y # CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" +# CONFIG_COMPILE_TEST is not set CONFIG_LOCALVERSION="" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y @@ -54,11 +56,13 @@ CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y CONFIG_HAVE_KERNEL_XZ=y CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_LZ4=y # CONFIG_KERNEL_GZIP is not set # CONFIG_KERNEL_BZIP2 is not set # CONFIG_KERNEL_LZMA is not set CONFIG_KERNEL_XZ=y # CONFIG_KERNEL_LZO is not set +# CONFIG_KERNEL_LZ4 is not set CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SWAP=y CONFIG_SYSVIPC=y @@ -70,13 +74,10 @@ CONFIG_AUDIT=y CONFIG_AUDITSYSCALL=y CONFIG_AUDIT_WATCH=y CONFIG_AUDIT_TREE=y -CONFIG_AUDIT_LOGINUID_IMMUTABLE=y -CONFIG_HAVE_GENERIC_HARDIRQS=y # # IRQ subsystem # -CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_PENDING_IRQ=y @@ -153,6 +154,7 @@ CONFIG_BLK_CGROUP=y CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y +CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_SCHED_AUTOGROUP=y @@ -165,12 +167,12 @@ CONFIG_RD_BZIP2=y CONFIG_RD_LZMA=y CONFIG_RD_XZ=y CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_HAVE_UID16=y CONFIG_SYSCTL_EXCEPTION_TRACE=y -CONFIG_HOTPLUG=y CONFIG_HAVE_PCSPKR_PLATFORM=y CONFIG_EXPERT=y CONFIG_UID16=y @@ -204,6 +206,8 @@ CONFIG_SLUB_DEBUG=y # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLOB is not set +CONFIG_SLUB_CPU_PARTIAL=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set # CONFIG_PROFILING is not set CONFIG_TRACEPOINTS=y CONFIG_HAVE_OPROFILE=y @@ -222,7 +226,6 @@ CONFIG_HAVE_KPROBES_ON_FTRACE=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_ATTRS=y CONFIG_HAVE_DMA_CONTIGUOUS=y -CONFIG_USE_GENERIC_SMP_HELPERS=y CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_CLK=y @@ -241,8 +244,14 @@ CONFIG_HAVE_CMPXCHG_DOUBLE=y CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y +CONFIG_HAVE_CC_STACKPROTECTOR=y +CONFIG_CC_STACKPROTECTOR=y +# CONFIG_CC_STACKPROTECTOR_NONE is not set +CONFIG_CC_STACKPROTECTOR_REGULAR=y +# CONFIG_CC_STACKPROTECTOR_STRONG is not set CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARCH_SOFT_DIRTY=y CONFIG_MODULES_USE_ELF_REL=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND3=y @@ -260,7 +269,7 @@ CONFIG_MODULES=y # CONFIG_MODULE_FORCE_LOAD is not set CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_FORCE_UNLOAD is not set -# CONFIG_MODVERSIONS is not set +CONFIG_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_MODULE_SIG is not set CONFIG_STOP_MACHINE=y @@ -270,12 +279,14 @@ CONFIG_BLK_DEV_BSG=y CONFIG_BLK_DEV_BSGLIB=y CONFIG_BLK_DEV_INTEGRITY=y CONFIG_BLK_DEV_THROTTLING=y +# CONFIG_BLK_CMDLINE_PARSER is not set # # Partition Types # CONFIG_PARTITION_ADVANCED=y # CONFIG_ACORN_PARTITION is not set +# CONFIG_AIX_PARTITION is not set # CONFIG_OSF_PARTITION is not set # CONFIG_AMIGA_PARTITION is not set # CONFIG_ATARI_PARTITION is not set @@ -293,6 +304,7 @@ CONFIG_LDM_PARTITION=y # CONFIG_KARMA_PARTITION is not set CONFIG_EFI_PARTITION=y # CONFIG_SYSV68_PARTITION is not set +# CONFIG_CMDLINE_PARTITION is not set # # IO Schedulers @@ -326,7 +338,7 @@ CONFIG_X86_MPPARSE=y CONFIG_X86_BIGSMP=y CONFIG_X86_EXTENDED_PLATFORM=y # CONFIG_X86_GOLDFISH is not set -# CONFIG_X86_WANT_INTEL_MID is not set +# CONFIG_X86_INTEL_MID is not set CONFIG_X86_INTEL_LPSS=y # CONFIG_X86_RDC321X is not set CONFIG_X86_32_NON_STANDARD=y @@ -343,6 +355,7 @@ CONFIG_PARAVIRT=y # CONFIG_PARAVIRT_SPINLOCKS is not set # CONFIG_XEN_PRIVILEGED_GUEST is not set CONFIG_KVM_GUEST=y +# CONFIG_KVM_DEBUG_FS is not set # CONFIG_LGUEST_GUEST is not set CONFIG_PARAVIRT_TIME_ACCOUNTING=y CONFIG_PARAVIRT_CLOCK=y @@ -417,9 +430,8 @@ CONFIG_MICROCODE=m CONFIG_MICROCODE_INTEL=y CONFIG_MICROCODE_AMD=y CONFIG_MICROCODE_OLD_INTERFACE=y -CONFIG_MICROCODE_INTEL_LIB=y -CONFIG_MICROCODE_INTEL_EARLY=y -CONFIG_MICROCODE_EARLY=y +# CONFIG_MICROCODE_INTEL_EARLY is not set +# CONFIG_MICROCODE_AMD_EARLY is not set # CONFIG_X86_MSR is not set CONFIG_X86_CPUID=y # CONFIG_NOHIGHMEM is not set @@ -467,6 +479,9 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y CONFIG_CROSS_MEMORY_ATTACH=y CONFIG_CLEANCACHE=y # CONFIG_FRONTSWAP is not set +# CONFIG_CMA is not set +# CONFIG_ZBUD is not set +# CONFIG_ZSMALLOC is not set CONFIG_HIGHPTE=y CONFIG_X86_CHECK_BIOS_CORRUPTION=y CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y @@ -483,7 +498,6 @@ CONFIG_X86_SMAP=y CONFIG_EFI=y CONFIG_EFI_STUB=y CONFIG_SECCOMP=y -CONFIG_CC_STACKPROTECTOR=y # CONFIG_HZ_100 is not set # CONFIG_HZ_250 is not set CONFIG_HZ_300=y @@ -494,6 +508,7 @@ CONFIG_SCHED_HRTICK=y CONFIG_CRASH_DUMP=y CONFIG_PHYSICAL_START=0x400000 CONFIG_RELOCATABLE=y +# CONFIG_RANDOMIZE_BASE is not set CONFIG_X86_NEED_RELOCS=y CONFIG_PHYSICAL_ALIGN=0x400000 CONFIG_HOTPLUG_CPU=y @@ -507,9 +522,6 @@ CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y # CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y -CONFIG_HIBERNATE_CALLBACKS=y -CONFIG_HIBERNATION=y -CONFIG_PM_STD_PARTITION="" CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y # CONFIG_PM_AUTOSLEEP is not set @@ -518,19 +530,18 @@ CONFIG_PM_RUNTIME=y CONFIG_PM=y # CONFIG_PM_DEBUG is not set CONFIG_PM_CLK=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_ACPI=y CONFIG_ACPI_SLEEP=y CONFIG_ACPI_PROCFS=y # CONFIG_ACPI_PROCFS_POWER is not set CONFIG_ACPI_EC_DEBUGFS=m -# CONFIG_ACPI_PROC_EVENT is not set CONFIG_ACPI_AC=y CONFIG_ACPI_BATTERY=y CONFIG_ACPI_BUTTON=y CONFIG_ACPI_VIDEO=m CONFIG_ACPI_FAN=y CONFIG_ACPI_DOCK=y -CONFIG_ACPI_I2C=m CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_IPMI=m CONFIG_ACPI_HOTPLUG_CPU=y @@ -538,7 +549,6 @@ CONFIG_ACPI_PROCESSOR_AGGREGATOR=m CONFIG_ACPI_THERMAL=y # CONFIG_ACPI_CUSTOM_DSDT is not set CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y -CONFIG_ACPI_BLACKLIST_YEAR=1999 # CONFIG_ACPI_DEBUG is not set CONFIG_ACPI_PCI_SLOT=y CONFIG_X86_PM_TIMER=y @@ -553,6 +563,7 @@ CONFIG_ACPI_APEI_PCIEAER=y CONFIG_ACPI_APEI_MEMORY_FAILURE=y # CONFIG_ACPI_APEI_EINJ is not set # CONFIG_ACPI_APEI_ERST_DEBUG is not set +CONFIG_ACPI_EXTLOG=m CONFIG_SFI=y CONFIG_X86_APM_BOOT=y CONFIG_APM=y @@ -566,7 +577,6 @@ CONFIG_APM_CPU_IDLE=y # CPU Frequency scaling # CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_TABLE=y CONFIG_CPU_FREQ_GOV_COMMON=y CONFIG_CPU_FREQ_STAT=m CONFIG_CPU_FREQ_STAT_DETAILS=y @@ -608,6 +618,10 @@ CONFIG_X86_LONGHAUL=m # CONFIG_X86_SPEEDSTEP_LIB=m CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y + +# +# CPU Idle +# CONFIG_CPU_IDLE=y # CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set CONFIG_CPU_IDLE_GOV_LADDER=y @@ -639,7 +653,6 @@ CONFIG_PCIEASPM_DEFAULT=y # CONFIG_PCIEASPM_POWERSAVE is not set # CONFIG_PCIEASPM_PERFORMANCE is not set CONFIG_PCIE_PME=y -CONFIG_ARCH_SUPPORTS_MSI=y CONFIG_PCI_MSI=y # CONFIG_PCI_DEBUG is not set # CONFIG_PCI_REALLOC_ENABLE_AUTO is not set @@ -651,6 +664,10 @@ CONFIG_PCI_IOV=y # CONFIG_PCI_PASID is not set CONFIG_PCI_IOAPIC=y CONFIG_PCI_LABEL=y + +# +# PCI host controller drivers +# CONFIG_ISA_DMA_API=y CONFIG_ISA=y CONFIG_EISA=y @@ -694,6 +711,7 @@ CONFIG_HOTPLUG_PCI_ACPI_IBM=m # CONFIG_HOTPLUG_PCI_CPCI is not set # CONFIG_HOTPLUG_PCI_SHPC is not set # CONFIG_RAPIDIO is not set +CONFIG_X86_SYSFB=y # # Executable file formats / Emulations @@ -706,7 +724,6 @@ CONFIG_HAVE_AOUT=y CONFIG_BINFMT_MISC=y CONFIG_COREDUMP=y CONFIG_HAVE_ATOMIC_IOMAP=y -CONFIG_HAVE_TEXT_POKE_SMP=y CONFIG_NET=y # @@ -743,7 +760,6 @@ CONFIG_IP_MROUTE=y CONFIG_IP_MROUTE_MULTIPLE_TABLES=y CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y -# CONFIG_ARPD is not set CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=m CONFIG_INET_AH=m @@ -776,7 +792,6 @@ CONFIG_DEFAULT_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" CONFIG_TCP_MD5SIG=y CONFIG_IPV6=y -CONFIG_IPV6_PRIVACY=y CONFIG_IPV6_ROUTER_PREF=y CONFIG_IPV6_ROUTE_INFO=y CONFIG_IPV6_OPTIMISTIC_DAD=y @@ -790,6 +805,7 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m CONFIG_INET6_XFRM_MODE_TUNNEL=m CONFIG_INET6_XFRM_MODE_BEET=m CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_VTI=m CONFIG_IPV6_SIT=m CONFIG_IPV6_SIT_6RD=y CONFIG_IPV6_NDISC_NODETYPE=y @@ -853,7 +869,22 @@ CONFIG_NF_NAT_FTP=m CONFIG_NF_NAT_IRC=m CONFIG_NF_NAT_SIP=m CONFIG_NF_NAT_TFTP=m -CONFIG_NETFILTER_TPROXY=m +CONFIG_NETFILTER_SYNPROXY=m +CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_INET=m +CONFIG_NFT_EXTHDR=m +CONFIG_NFT_META=m +CONFIG_NFT_CT=m +CONFIG_NFT_RBTREE=m +CONFIG_NFT_HASH=m +CONFIG_NFT_COUNTER=m +CONFIG_NFT_LOG=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_NAT=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m +CONFIG_NFT_COMPAT=m CONFIG_NETFILTER_XTABLES=y # @@ -898,6 +929,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m # CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m CONFIG_NETFILTER_XT_MATCH_CLUSTER=m CONFIG_NETFILTER_XT_MATCH_COMMENT=m CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m @@ -914,8 +946,10 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m CONFIG_NETFILTER_XT_MATCH_HELPER=m CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m CONFIG_NETFILTER_XT_MATCH_IPRANGE=m # CONFIG_NETFILTER_XT_MATCH_IPVS is not set +CONFIG_NETFILTER_XT_MATCH_L2TP=m CONFIG_NETFILTER_XT_MATCH_LAYER7=m # CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set CONFIG_NETFILTER_XT_MATCH_LENGTH=m @@ -950,7 +984,9 @@ CONFIG_IP_SET_HASH_IP=m CONFIG_IP_SET_HASH_IPPORT=m CONFIG_IP_SET_HASH_IPPORTIP=m CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_NETPORTNET=m CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETNET=m CONFIG_IP_SET_HASH_NETPORT=m CONFIG_IP_SET_HASH_NETIFACE=m CONFIG_IP_SET_LIST_SET=m @@ -1001,6 +1037,11 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=y CONFIG_NF_CONNTRACK_IPV4=y # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set +CONFIG_NF_TABLES_IPV4=m +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NF_TABLES_ARP=m CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_AH=m CONFIG_IP_NF_MATCH_ECN=m @@ -1008,6 +1049,7 @@ CONFIG_IP_NF_MATCH_RPFILTER=m CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_FILTER=m CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m # CONFIG_IP_NF_TARGET_ULOG is not set CONFIG_NF_NAT_IPV4=m CONFIG_IP_NF_TARGET_MASQUERADE=m @@ -1033,6 +1075,10 @@ CONFIG_IP_NF_MATCH_IPP2P=m # CONFIG_NF_DEFRAG_IPV6=y CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_NF_TABLES_IPV6=m +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_REJECT_IPV6=m CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m @@ -1046,12 +1092,14 @@ CONFIG_IP6_NF_MATCH_RT=m CONFIG_IP6_NF_TARGET_HL=m CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_RAW=m CONFIG_IP6_NF_SECURITY=m CONFIG_NF_NAT_IPV6=m CONFIG_IP6_NF_TARGET_MASQUERADE=m CONFIG_IP6_NF_TARGET_NPT=m +CONFIG_NF_TABLES_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m @@ -1076,7 +1124,6 @@ CONFIG_BRIDGE_EBT_LOG=m CONFIG_BRIDGE_EBT_NFLOG=m # CONFIG_IP_DCCP is not set CONFIG_IP_SCTP=m -# CONFIG_SCTP_DBG_MSG is not set # CONFIG_SCTP_DBG_OBJCNT is not set # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y @@ -1118,6 +1165,7 @@ CONFIG_LLC=y # CONFIG_LAPB is not set # CONFIG_PHONET is not set # CONFIG_IEEE802154 is not set +CONFIG_6LOWPAN_IPHC=m CONFIG_NET_SCHED=y # @@ -1143,6 +1191,8 @@ CONFIG_NET_SCH_CHOKE=m CONFIG_NET_SCH_QFQ=m CONFIG_NET_SCH_CODEL=m CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_HHF=m CONFIG_NET_SCH_PIE=m CONFIG_NET_SCH_INGRESS=m CONFIG_NET_SCH_PLUG=m @@ -1162,6 +1212,7 @@ CONFIG_NET_CLS_RSVP=m CONFIG_NET_CLS_RSVP6=m CONFIG_NET_CLS_FLOW=m CONFIG_NET_CLS_CGROUP=m +CONFIG_NET_CLS_BPF=m CONFIG_NET_EMATCH=y CONFIG_NET_EMATCH_STACK=32 CONFIG_NET_EMATCH_CMP=m @@ -1191,15 +1242,22 @@ CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m +CONFIG_OPENVSWITCH_GRE=y +CONFIG_OPENVSWITCH_VXLAN=y CONFIG_VSOCKETS=m CONFIG_VMWARE_VMCI_VSOCKETS=m CONFIG_NETLINK_MMAP=y CONFIG_NETLINK_DIAG=m +CONFIG_NET_MPLS_GSO=m +CONFIG_HSR=m CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y -CONFIG_NETPRIO_CGROUP=m +CONFIG_CGROUP_NET_PRIO=m +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y # # Network testing @@ -1309,7 +1367,6 @@ CONFIG_REGMAP=y CONFIG_REGMAP_I2C=m CONFIG_REGMAP_IRQ=y CONFIG_DMA_SHARED_BUFFER=y -# CONFIG_CMA is not set # # Bus devices @@ -1317,6 +1374,7 @@ CONFIG_DMA_SHARED_BUFFER=y CONFIG_CONNECTOR=y CONFIG_PROC_EVENTS=y # CONFIG_MTD is not set +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y CONFIG_PARPORT=m CONFIG_PARPORT_PC=m CONFIG_PARPORT_SERIAL=m @@ -1338,10 +1396,10 @@ CONFIG_PNPBIOS=y # CONFIG_PNPBIOS_PROC_FS is not set CONFIG_PNPACPI=y CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_NULL_BLK is not set CONFIG_BLK_DEV_FD=m # CONFIG_PARIDE is not set CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m -CONFIG_BLK_CPQ_DA=m CONFIG_BLK_CPQ_CISS_DA=m # CONFIG_CISS_SCSI_TAPE is not set CONFIG_BLK_DEV_DAC960=m @@ -1375,7 +1433,6 @@ CONFIG_SENSORS_LIS3LV02D=m CONFIG_DUMMY_IRQ=m CONFIG_IBM_ASM=m # CONFIG_PHANTOM is not set -# CONFIG_INTEL_MID_PTI is not set # CONFIG_SGI_IOC4 is not set CONFIG_TIFM_CORE=m CONFIG_TIFM_7XX1=m @@ -1427,6 +1484,14 @@ CONFIG_ALTERA_STAPL=m # CONFIG_INTEL_MEI is not set # CONFIG_INTEL_MEI_ME is not set CONFIG_VMWARE_VMCI=m + +# +# Intel MIC Host Driver +# + +# +# Intel MIC Card Driver +# CONFIG_HAVE_IDE=y # CONFIG_IDE is not set @@ -1494,7 +1559,6 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=5000 CONFIG_AIC7XXX_DEBUG_ENABLE=y CONFIG_AIC7XXX_DEBUG_MASK=0 CONFIG_AIC7XXX_REG_PRETTY_PRINT=y -# CONFIG_SCSI_AIC7XXX_OLD is not set CONFIG_SCSI_AIC79XX=m CONFIG_AIC79XX_CMDS_PER_DEVICE=32 CONFIG_AIC79XX_RESET_DELAY_MS=4000 @@ -1511,6 +1575,7 @@ CONFIG_SCSI_DPT_I2O=m CONFIG_SCSI_ADVANSYS=m CONFIG_SCSI_IN2000=m CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_ESAS2R=m CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m @@ -1636,6 +1701,7 @@ CONFIG_SATA_HIGHBANK=m CONFIG_SATA_MV=m CONFIG_SATA_NV=m CONFIG_SATA_PROMISE=m +CONFIG_SATA_RCAR=m CONFIG_SATA_SIL=m CONFIG_SATA_SIS=m CONFIG_SATA_SVW=m @@ -1719,14 +1785,14 @@ CONFIG_MD_MULTIPATH=m CONFIG_MD_FAULTY=m CONFIG_BCACHE=m # CONFIG_BCACHE_DEBUG is not set -# CONFIG_BCACHE_EDEBUG is not set # CONFIG_BCACHE_CLOSURES_DEBUG is not set CONFIG_BLK_DEV_DM_BUILTIN=y CONFIG_BLK_DEV_DM=y # CONFIG_DM_DEBUG is not set -CONFIG_DM_BUFIO=m +CONFIG_DM_BUFIO=y CONFIG_DM_BIO_PRISON=m CONFIG_DM_PERSISTENT_DATA=m +# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set CONFIG_DM_CRYPT=m CONFIG_DM_SNAPSHOT=y # CONFIG_DM_THIN_PROVISIONING is not set @@ -1734,8 +1800,8 @@ CONFIG_DM_CACHE=m CONFIG_DM_CACHE_MQ=m CONFIG_DM_CACHE_CLEANER=m CONFIG_DM_MIRROR=y -CONFIG_DM_RAID=m CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_RAID=m CONFIG_DM_ZERO=y CONFIG_DM_MULTIPATH=m CONFIG_DM_MULTIPATH_QL=m @@ -1744,6 +1810,7 @@ CONFIG_DM_MULTIPATH_ST=m CONFIG_DM_UEVENT=y # CONFIG_DM_FLAKEY is not set CONFIG_DM_VERITY=m +CONFIG_DM_SWITCH=m # CONFIG_TARGET_CORE is not set CONFIG_FUSION=y CONFIG_FUSION_SPI=m @@ -1773,12 +1840,12 @@ CONFIG_I2O_PROC=m CONFIG_MACINTOSH_DRIVERS=y # CONFIG_MAC_EMUMOUSEBTN is not set CONFIG_NETDEVICES=y +CONFIG_MII=m CONFIG_NET_CORE=y CONFIG_BONDING=m CONFIG_DUMMY=m # CONFIG_EQUALIZER is not set # CONFIG_NET_FC is not set -CONFIG_MII=m CONFIG_IFB=m # CONFIG_NET_TEAM is not set CONFIG_MACVLAN=m @@ -1798,6 +1865,7 @@ CONFIG_IMQ_NUM_DEVS=2 CONFIG_TUN=m CONFIG_VETH=m CONFIG_VIRTIO_NET=m +CONFIG_NLMON=m CONFIG_SUNGEM_PHY=m # CONFIG_ARCNET is not set CONFIG_ATM_DRIVERS=y @@ -1836,6 +1904,7 @@ CONFIG_ATM_SOLOS=m # CONFIG_VHOST_NET=m CONFIG_VHOST_RING=m +CONFIG_VHOST=m # # Distributed Switch Architecture drivers @@ -1865,6 +1934,7 @@ CONFIG_LANCE=m CONFIG_PCNET32=m CONFIG_PCMCIA_NMCLAN=m CONFIG_NI65=m +CONFIG_NET_VENDOR_ARC=y CONFIG_NET_VENDOR_ATHEROS=y CONFIG_ATL2=m CONFIG_ATL1=m @@ -1940,6 +2010,9 @@ CONFIG_IXGBE=m CONFIG_IXGBE_HWMON=y CONFIG_IXGBE_DCA=y CONFIG_IXGBEVF=m +CONFIG_I40E=m +CONFIG_I40E_VXLAN=y +CONFIG_I40EVF=m CONFIG_NET_VENDOR_I825XX=y CONFIG_IP1000=m CONFIG_JME=m @@ -1954,6 +2027,7 @@ CONFIG_NET_VENDOR_MELLANOX=y CONFIG_MLX4_EN=m CONFIG_MLX4_CORE=m CONFIG_MLX4_DEBUG=y +# CONFIG_MLX5_CORE is not set CONFIG_NET_VENDOR_MICREL=y CONFIG_KS8842=m CONFIG_KS8851_MLL=m @@ -1993,6 +2067,7 @@ CONFIG_8139TOO=m CONFIG_8139TOO_8129=y # CONFIG_8139_OLD_RX_RESET is not set CONFIG_R8169=m +CONFIG_SH_ETH=m CONFIG_NET_VENDOR_RDC=y CONFIG_R6040=m CONFIG_NET_VENDOR_SEEQ=y @@ -2008,6 +2083,8 @@ CONFIG_NET_VENDOR_SMSC=y CONFIG_SMC9194=m CONFIG_PCMCIA_SMC91C92=m CONFIG_EPIC100=m +CONFIG_SMSC911X=m +# CONFIG_SMSC911X_ARCH_HOOKS is not set CONFIG_SMSC9420=m CONFIG_NET_VENDOR_STMICRO=y CONFIG_STMMAC_ETH=m @@ -2094,8 +2171,11 @@ CONFIG_USB_NET_AX88179_178A=m CONFIG_USB_NET_CDCETHER=m CONFIG_USB_NET_CDC_EEM=m CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_HUAWEI_CDC_NCM=m CONFIG_USB_NET_CDC_MBIM=m CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m CONFIG_USB_NET_SMSC75XX=m CONFIG_USB_NET_SMSC95XX=m CONFIG_USB_NET_GL620A=m @@ -2155,7 +2235,9 @@ CONFIG_ATH9K=m CONFIG_ATH9K_PCI=y CONFIG_ATH9K_AHB=y # CONFIG_ATH9K_DEBUGFS is not set +# CONFIG_ATH9K_WOW is not set # CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set +CONFIG_ATH9K_RFKILL=y CONFIG_ATH9K_HTC=m # CONFIG_ATH9K_HTC_DEBUGFS is not set CONFIG_CARL9170=m @@ -2166,9 +2248,16 @@ CONFIG_CARL9170_WPC=y CONFIG_AR5523=m CONFIG_WIL6210=m CONFIG_WIL6210_ISR_COR=y +CONFIG_WIL6210_TRACING=y +CONFIG_ATH10K=m +CONFIG_ATH10K_PCI=m +# CONFIG_ATH10K_DEBUG is not set +# CONFIG_ATH10K_DEBUGFS is not set +# CONFIG_ATH10K_TRACING is not set +CONFIG_WCN36XX=m +# CONFIG_WCN36XX_DEBUGFS is not set CONFIG_B43=m CONFIG_B43_BCMA=y -CONFIG_B43_BCMA_EXTRA=y CONFIG_B43_SSB=y CONFIG_B43_PCI_AUTOSELECT=y CONFIG_B43_PCICORE_AUTOSELECT=y @@ -2227,7 +2316,6 @@ CONFIG_IWLWIFI_OPMODE_MODULAR=y # # CONFIG_IWLWIFI_DEBUG is not set # CONFIG_IWLWIFI_DEVICE_TRACING is not set -CONFIG_IWLWIFI_P2P=y CONFIG_IWLEGACY=m CONFIG_IWL4965=m CONFIG_IWL3945=m @@ -2269,10 +2357,12 @@ CONFIG_RT73USB=m CONFIG_RT2800USB=m CONFIG_RT2800USB_RT33XX=y CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT3573=y CONFIG_RT2800USB_RT53XX=y CONFIG_RT2800USB_RT55XX=y CONFIG_RT2800USB_UNKNOWN=y CONFIG_RT2800_LIB=m +CONFIG_RT2800_LIB_MMIO=m CONFIG_RT2X00_LIB_MMIO=m CONFIG_RT2X00_LIB_PCI=m CONFIG_RT2X00_LIB_USB=m @@ -2281,14 +2371,17 @@ CONFIG_RT2X00_LIB_FIRMWARE=y CONFIG_RT2X00_LIB_CRYPTO=y CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set -CONFIG_RTLWIFI=m -# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTL_CARDS=m CONFIG_RTL8192CE=m CONFIG_RTL8192SE=m CONFIG_RTL8192DE=m CONFIG_RTL8723AE=m CONFIG_RTL8188EE=m CONFIG_RTL8192CU=m +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_PCI=m +CONFIG_RTLWIFI_USB=m +# CONFIG_RTLWIFI_DEBUG is not set CONFIG_RTL8192C_COMMON=m CONFIG_WL_TI=y CONFIG_WL1251=m @@ -2304,6 +2397,8 @@ CONFIG_MWIFIEX=m CONFIG_MWIFIEX_SDIO=m CONFIG_MWIFIEX_PCIE=m CONFIG_MWIFIEX_USB=m +CONFIG_CW1200=m +CONFIG_CW1200_WLAN_SDIO=m # # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -2406,8 +2501,8 @@ CONFIG_HISAX_FRITZ_PCIPNP=m CONFIG_ISDN_CAPI=m CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y CONFIG_CAPI_TRACE=y -CONFIG_ISDN_CAPI_MIDDLEWARE=y CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_MIDDLEWARE=y CONFIG_ISDN_CAPI_CAPIDRV=m # @@ -2552,11 +2647,13 @@ CONFIG_INPUT_GPIO_ROTARY_ENCODER=m # CONFIG_INPUT_ADXL34X is not set # CONFIG_INPUT_IMS_PCU is not set # CONFIG_INPUT_CMA3000 is not set +CONFIG_INPUT_IDEAPAD_SLIDEBAR=m # # Hardware I/O ports # CONFIG_SERIO=y +CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y CONFIG_SERIO_I8042=y CONFIG_SERIO_SERPORT=y # CONFIG_SERIO_CT82C710 is not set @@ -2567,6 +2664,7 @@ CONFIG_SERIO_RAW=m CONFIG_SERIO_ALTERA_PS2=m # CONFIG_SERIO_PS2MULT is not set CONFIG_SERIO_ARC_PS2=m +CONFIG_HYPERV_KEYBOARD=m # CONFIG_GAMEPORT is not set # @@ -2597,7 +2695,6 @@ CONFIG_N_HDLC=m CONFIG_N_GSM=m # CONFIG_TRACE_SINK is not set # CONFIG_DEVKMEM is not set -# CONFIG_STALDRV is not set # # Serial drivers @@ -2640,6 +2737,7 @@ CONFIG_SERIAL_ARC=m CONFIG_SERIAL_ARC_NR_PORTS=1 CONFIG_SERIAL_RP2=m CONFIG_SERIAL_RP2_NR_UARTS=32 +CONFIG_SERIAL_FSL_LPUART=m # CONFIG_TTY_PRINTK is not set CONFIG_PRINTER=m CONFIG_LP_CONSOLE=y @@ -2690,7 +2788,15 @@ CONFIG_I2C=m CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y CONFIG_I2C_CHARDEV=m -# CONFIG_I2C_MUX is not set +CONFIG_I2C_MUX=m + +# +# Multiplexer I2C Chip support +# +CONFIG_I2C_MUX_GPIO=m +CONFIG_I2C_MUX_PCA9541=m +CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_SMBUS=m CONFIG_I2C_ALGOBIT=m @@ -2735,7 +2841,6 @@ CONFIG_I2C_DESIGNWARE_PLATFORM=m # CONFIG_I2C_DESIGNWARE_PCI is not set # CONFIG_I2C_EG20T is not set # CONFIG_I2C_GPIO is not set -# CONFIG_I2C_INTEL_MID is not set # CONFIG_I2C_OCORES is not set CONFIG_I2C_PCA_PLATFORM=m # CONFIG_I2C_PXA_PCI is not set @@ -2748,6 +2853,7 @@ CONFIG_I2C_SIMTEC=m CONFIG_I2C_DIOLAN_U2C=m CONFIG_I2C_PARPORT=m CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_ROBOTFUZZ_OSIF=m # CONFIG_I2C_TAOS_EVM is not set CONFIG_I2C_TINY_USB=m CONFIG_I2C_VIPERBOARD=m @@ -2762,11 +2868,6 @@ CONFIG_SCx200_ACB=m # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set # CONFIG_SPI is not set - -# -# Qualcomm MSM SSBI bus support -# -# CONFIG_SSBI is not set CONFIG_HSI=m CONFIG_HSI_BOARDINFO=y @@ -2802,9 +2903,18 @@ CONFIG_PTP_1588_CLOCK=m # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. # CONFIG_PTP_1588_CLOCK_PCH=m +CONFIG_PINCTRL=y + +# +# Pin controllers +# +# CONFIG_PINMUX is not set +# CONFIG_PINCONF is not set +# CONFIG_DEBUG_PINCTRL is not set +CONFIG_PINCTRL_BAYTRAIL=y CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y -CONFIG_GPIO_DEVRES=y CONFIG_GPIOLIB=y +CONFIG_GPIO_DEVRES=y CONFIG_GPIO_ACPI=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y @@ -2814,6 +2924,8 @@ CONFIG_GPIO_SYSFS=y # # CONFIG_GPIO_GENERIC_PLATFORM is not set # CONFIG_GPIO_IT8761E is not set +# CONFIG_GPIO_F7188X is not set +# CONFIG_GPIO_SCH311X is not set CONFIG_GPIO_TS5500=m CONFIG_GPIO_SCH=m CONFIG_GPIO_ICH=m @@ -2834,7 +2946,7 @@ CONFIG_GPIO_ICH=m # CONFIG_GPIO_CS5535=m # CONFIG_GPIO_AMD8111 is not set -# CONFIG_GPIO_LANGWELL is not set +# CONFIG_GPIO_INTEL_MID is not set # CONFIG_GPIO_PCH is not set # CONFIG_GPIO_ML_IOH is not set # CONFIG_GPIO_RDC321X is not set @@ -2842,12 +2954,15 @@ CONFIG_GPIO_CS5535=m # # SPI GPIO expanders: # -# CONFIG_GPIO_MCP23S08 is not set # # AC97 GPIO expanders: # +# +# LPC GPIO expanders: +# + # # MODULbus GPIO expanders: # @@ -2898,12 +3013,14 @@ CONFIG_GENERIC_ADC_BATTERY=m # CONFIG_BATTERY_BQ27x00 is not set # CONFIG_BATTERY_MAX17040 is not set # CONFIG_BATTERY_MAX17042 is not set +# CONFIG_CHARGER_ISP1704 is not set # CONFIG_CHARGER_MAX8903 is not set # CONFIG_CHARGER_LP8727 is not set # CONFIG_CHARGER_GPIO is not set # CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24735 is not set # CONFIG_CHARGER_SMB347 is not set -# CONFIG_BATTERY_GOLDFISH is not set CONFIG_POWER_RESET=y CONFIG_POWER_AVS=y CONFIG_HWMON=y @@ -2943,10 +3060,12 @@ CONFIG_SENSORS_F71882FG=m CONFIG_SENSORS_F75375S=m CONFIG_SENSORS_FSCHMD=m CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_G762=m CONFIG_SENSORS_GL518SM=m CONFIG_SENSORS_GL520SM=m # CONFIG_SENSORS_GPIO_FAN is not set CONFIG_SENSORS_HIH6130=m +CONFIG_SENSORS_HTU21=m CONFIG_SENSORS_CORETEMP=m CONFIG_SENSORS_IBMAEM=m CONFIG_SENSORS_IBMPEX=m @@ -3050,9 +3169,14 @@ CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y CONFIG_THERMAL_GOV_FAIR_SHARE=y CONFIG_THERMAL_GOV_STEP_WISE=y CONFIG_THERMAL_GOV_USER_SPACE=y -CONFIG_CPU_THERMAL=y CONFIG_THERMAL_EMULATION=y CONFIG_INTEL_POWERCLAMP=m +CONFIG_X86_PKG_TEMP_THERMAL=m +CONFIG_ACPI_INT3403_THERMAL=m + +# +# Texas Instruments thermal drivers +# CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y CONFIG_WATCHDOG_NOWAYOUT=y @@ -3061,6 +3185,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y # Watchdog Device Drivers # CONFIG_SOFT_WATCHDOG=m +CONFIG_DW_WATCHDOG=m CONFIG_RETU_WATCHDOG=m CONFIG_ACQUIRE_WDT=m CONFIG_ADVANTECH_WDT=m @@ -3101,6 +3226,7 @@ CONFIG_W83877F_WDT=m CONFIG_W83977F_WDT=m CONFIG_MACHZ_WDT=m CONFIG_SBC_EPX_C3_WATCHDOG=m +CONFIG_MEN_A21_WDT=m # # ISA-based Watchdog Cards @@ -3147,6 +3273,7 @@ CONFIG_BCMA=m CONFIG_BCMA_BLOCKIO=y CONFIG_BCMA_HOST_PCI_POSSIBLE=y CONFIG_BCMA_HOST_PCI=y +CONFIG_BCMA_HOST_SOC=y CONFIG_BCMA_DRIVER_GMAC_CMN=y CONFIG_BCMA_DRIVER_GPIO=y # CONFIG_BCMA_DEBUG is not set @@ -3162,6 +3289,7 @@ CONFIG_MFD_CS5535=m CONFIG_LPC_ICH=m CONFIG_LPC_SCH=m # CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_KEMPLD is not set CONFIG_MFD_VIPERBOARD=m CONFIG_MFD_RETU=m # CONFIG_MFD_PCF50633 is not set @@ -3174,6 +3302,7 @@ CONFIG_MFD_SM501_GPIO=y # CONFIG_ABX500_CORE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_MFD_LP3943 is not set # CONFIG_TPS6105X is not set # CONFIG_TPS65010 is not set # CONFIG_TPS6507X is not set @@ -3213,7 +3342,6 @@ CONFIG_VIDEOBUF2_CORE=m CONFIG_VIDEOBUF2_MEMOPS=m CONFIG_VIDEOBUF2_DMA_CONTIG=m CONFIG_VIDEOBUF2_VMALLOC=m -CONFIG_VIDEO_V4L2_INT_DEVICE=m CONFIG_DVB_CORE=m CONFIG_DVB_NET=y CONFIG_TTPCI_EEPROM=m @@ -3296,6 +3424,7 @@ CONFIG_USB_GSPCA_SQ905=m CONFIG_USB_GSPCA_SQ905C=m CONFIG_USB_GSPCA_SQ930X=m CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STK1135=m CONFIG_USB_GSPCA_STV0680=m CONFIG_USB_GSPCA_SUNPLUS=m CONFIG_USB_GSPCA_T613=m @@ -3312,7 +3441,7 @@ CONFIG_VIDEO_CPIA2=m CONFIG_USB_ZR364XX=m CONFIG_USB_STKWEBCAM=m CONFIG_USB_S2255=m -CONFIG_USB_SN9C102=m +CONFIG_VIDEO_USBTV=m # # Analog TV USB devices @@ -3324,8 +3453,9 @@ CONFIG_VIDEO_PVRUSB2_DVB=y CONFIG_VIDEO_HDPVR=m CONFIG_VIDEO_TLG2300=m CONFIG_VIDEO_USBVISION=m -CONFIG_VIDEO_STK1160=m +CONFIG_VIDEO_STK1160_COMMON=m CONFIG_VIDEO_STK1160_AC97=y +CONFIG_VIDEO_STK1160=m # # Analog/digital TV USB devices @@ -3394,6 +3524,7 @@ CONFIG_DVB_B2C2_FLEXCOP_USB=m # Webcam, TV (analog/digital) USB devices # CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_V4L2=m CONFIG_VIDEO_EM28XX_ALSA=m CONFIG_VIDEO_EM28XX_DVB=m CONFIG_VIDEO_EM28XX_RC=m @@ -3435,6 +3566,7 @@ CONFIG_VIDEO_CX88=m CONFIG_VIDEO_CX88_ALSA=m CONFIG_VIDEO_CX88_BLACKBIRD=m CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_ENABLE_VP3054=y CONFIG_VIDEO_CX88_VP3054=m CONFIG_VIDEO_CX88_MPEG=m CONFIG_VIDEO_BT848=m @@ -3470,12 +3602,15 @@ CONFIG_VIDEO_CAFE_CCIC=m # CONFIG_VIDEO_VIA_CAMERA is not set CONFIG_VIDEO_TIMBERDALE=m CONFIG_SOC_CAMERA=m +CONFIG_SOC_CAMERA_SCALE_CROP=m CONFIG_SOC_CAMERA_PLATFORM=m +CONFIG_VIDEO_RCAR_VIN=m CONFIG_VIDEO_SH_MOBILE_CSI2=m CONFIG_VIDEO_SH_MOBILE_CEU=m CONFIG_V4L_MEM2MEM_DRIVERS=y CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m CONFIG_VIDEO_SH_VEU=m +CONFIG_VIDEO_RENESAS_VSP1=m # CONFIG_V4L_TEST_DRIVERS is not set # @@ -3503,7 +3638,6 @@ CONFIG_VIDEO_SAA7146=m CONFIG_VIDEO_SAA7146_VV=m CONFIG_SMS_SIANO_MDTV=m CONFIG_SMS_SIANO_RC=y -# CONFIG_SMS_SIANO_DEBUGFS is not set # # Media ancillary drivers (tuners, sensors, i2c, frontends) @@ -3576,7 +3710,12 @@ CONFIG_VIDEO_UPD64031A=m CONFIG_VIDEO_UPD64083=m # -# Miscelaneous helper chips +# Audio/Video compression chips +# +CONFIG_VIDEO_SAA6752HS=m + +# +# Miscellaneous helper chips # CONFIG_VIDEO_M52790=m @@ -3627,6 +3766,7 @@ CONFIG_MEDIA_TUNER_FC0013=m CONFIG_MEDIA_TUNER_TDA18212=m CONFIG_MEDIA_TUNER_E4000=m CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_M88TS2022=m CONFIG_MEDIA_TUNER_TUA9001=m CONFIG_MEDIA_TUNER_IT913X=m CONFIG_MEDIA_TUNER_R820T=m @@ -3638,6 +3778,7 @@ CONFIG_DVB_STB0899=m CONFIG_DVB_STB6100=m CONFIG_DVB_STV090x=m CONFIG_DVB_STV6110x=m +CONFIG_DVB_M88DS3103=m # # Multistandard (cable + terrestrial) frontends @@ -3668,8 +3809,7 @@ CONFIG_DVB_TUNER_CX24113=m CONFIG_DVB_TDA826X=m CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m -CONFIG_DVB_M88DS3103=m -CONFIG_DVB_M88DC2800=m +CONFIG_DVB_CX24117=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m @@ -3751,6 +3891,8 @@ CONFIG_DVB_A8293=m CONFIG_DVB_LGS8GXX=m CONFIG_DVB_ATBM8830=m CONFIG_DVB_TDA665x=m +CONFIG_DVB_DVBSKY_M88DS3103=m +CONFIG_DVB_M88DC2800=m CONFIG_DVB_IX2505V=m CONFIG_DVB_IT913X_FE=m CONFIG_DVB_M88RS2000=m @@ -3775,12 +3917,14 @@ CONFIG_AGP_SIS=y # CONFIG_AGP_SWORKS is not set CONFIG_AGP_VIA=y # CONFIG_AGP_EFFICEON is not set +CONFIG_INTEL_GTT=y CONFIG_VGA_ARB=y CONFIG_VGA_ARB_MAX_GPUS=16 CONFIG_VGA_SWITCHEROO=y CONFIG_DRM=m CONFIG_DRM_USB=m CONFIG_DRM_KMS_HELPER=m +CONFIG_DRM_KMS_FB_HELPER=y # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set CONFIG_DRM_TTM=m @@ -3801,6 +3945,9 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y CONFIG_DRM_I810=m CONFIG_DRM_I915=m CONFIG_DRM_I915_KMS=y +CONFIG_DRM_I915_FBDEV=y +CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y +# CONFIG_DRM_I915_UMS is not set CONFIG_DRM_MGA=m CONFIG_DRM_SIS=m CONFIG_DRM_VIA=m @@ -3815,6 +3962,7 @@ CONFIG_DRM_AST=m CONFIG_DRM_MGAG200=m CONFIG_DRM_CIRRUS_QEMU=m CONFIG_DRM_QXL=m +CONFIG_DRM_BOCHS=m CONFIG_VGASTATE=m CONFIG_VIDEO_OUTPUT_CONTROL=m CONFIG_HDMI=y @@ -3855,6 +4003,7 @@ CONFIG_FB_VESA=y CONFIG_FB_EFI=y # CONFIG_FB_N411 is not set CONFIG_FB_HGA=m +CONFIG_FB_OPENCORES=m # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_NVIDIA is not set CONFIG_FB_RIVA=m @@ -3911,6 +4060,7 @@ CONFIG_FB_UDL=m # CONFIG_FB_BROADSHEET is not set # CONFIG_FB_AUO_K190X is not set CONFIG_FB_HYPERV=m +CONFIG_FB_SIMPLE=y # CONFIG_EXYNOS_VIDEO is not set CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_LCD_CLASS_DEVICE=m @@ -3923,10 +4073,13 @@ CONFIG_BACKLIGHT_APPLE=m # CONFIG_BACKLIGHT_SAHARA is not set # CONFIG_BACKLIGHT_ADP8860 is not set # CONFIG_BACKLIGHT_ADP8870 is not set -# CONFIG_BACKLIGHT_LM3630 is not set +# CONFIG_BACKLIGHT_LM3630A is not set # CONFIG_BACKLIGHT_LM3639 is not set # CONFIG_BACKLIGHT_LP855X is not set # CONFIG_BACKLIGHT_OT200 is not set +# CONFIG_BACKLIGHT_GPIO is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set # # Console display driver support @@ -3938,9 +4091,6 @@ CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set @@ -3964,6 +4114,7 @@ CONFIG_SND_SEQUENCER_OSS=y CONFIG_SND_HRTIMER=m CONFIG_SND_SEQ_HRTIMER_DEFAULT=y CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_MAX_CARDS=32 # CONFIG_SND_SUPPORT_OLD_API is not set CONFIG_SND_VERBOSE_PROCFS=y CONFIG_SND_VERBOSE_PRINTK=y @@ -4033,7 +4184,6 @@ CONFIG_SND_SSCAPE=m CONFIG_SND_WAVEFRONT=m CONFIG_SND_MSND_PINNACLE=m CONFIG_SND_MSND_CLASSIC=m -CONFIG_SND_TEA575X=m CONFIG_SND_PCI=y CONFIG_SND_AD1889=m CONFIG_SND_ALS300=m @@ -4080,9 +4230,7 @@ CONFIG_SND_ENS1371=m CONFIG_SND_ES1938=m CONFIG_SND_ES1968=m CONFIG_SND_ES1968_INPUT=y -CONFIG_SND_ES1968_RADIO=y CONFIG_SND_FM801=m -CONFIG_SND_FM801_TEA575X_BOOL=y CONFIG_SND_HDA_INTEL=m CONFIG_SND_HDA_PREALLOC_SIZE=64 CONFIG_SND_HDA_HWDEP=y @@ -4091,19 +4239,20 @@ CONFIG_SND_HDA_INPUT_BEEP=y CONFIG_SND_HDA_INPUT_BEEP_MODE=1 CONFIG_SND_HDA_INPUT_JACK=y # CONFIG_SND_HDA_PATCH_LOADER is not set -CONFIG_SND_HDA_CODEC_REALTEK=y -CONFIG_SND_HDA_CODEC_ANALOG=y -CONFIG_SND_HDA_CODEC_SIGMATEL=y -CONFIG_SND_HDA_CODEC_VIA=y -CONFIG_SND_HDA_CODEC_HDMI=y -CONFIG_SND_HDA_CODEC_CIRRUS=y -CONFIG_SND_HDA_CODEC_CONEXANT=y -CONFIG_SND_HDA_CODEC_CA0110=y -CONFIG_SND_HDA_CODEC_CA0132=y +CONFIG_SND_HDA_CODEC_REALTEK=m +CONFIG_SND_HDA_CODEC_ANALOG=m +CONFIG_SND_HDA_CODEC_SIGMATEL=m +CONFIG_SND_HDA_CODEC_VIA=m +CONFIG_SND_HDA_CODEC_HDMI=m +CONFIG_SND_HDA_I915=y +CONFIG_SND_HDA_CODEC_CIRRUS=m +CONFIG_SND_HDA_CODEC_CONEXANT=m +CONFIG_SND_HDA_CODEC_CA0110=m +CONFIG_SND_HDA_CODEC_CA0132=m # CONFIG_SND_HDA_CODEC_CA0132_DSP is not set -CONFIG_SND_HDA_CODEC_CMEDIA=y -CONFIG_SND_HDA_CODEC_SI3054=y -CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_CODEC_CMEDIA=m +CONFIG_SND_HDA_CODEC_SI3054=m +CONFIG_SND_HDA_GENERIC=m CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 CONFIG_SND_HDSP=m CONFIG_SND_HDSPM=m @@ -4139,8 +4288,10 @@ CONFIG_SND_USB_CAIAQ=m CONFIG_SND_USB_CAIAQ_INPUT=y CONFIG_SND_USB_US122L=m CONFIG_SND_USB_6FIRE=m +CONFIG_SND_USB_HIFACE=m CONFIG_SND_FIREWIRE=y CONFIG_SND_FIREWIRE_LIB=m +CONFIG_SND_DICE=m CONFIG_SND_FIREWIRE_SPEAKERS=m # CONFIG_SND_ISIGHT is not set # CONFIG_SND_SCS1X is not set @@ -4176,8 +4327,10 @@ CONFIG_HID_CYPRESS=y # CONFIG_HID_DRAGONRISE is not set # CONFIG_HID_EMS_FF is not set # CONFIG_HID_ELECOM is not set +# CONFIG_HID_ELO is not set CONFIG_HID_EZKEY=y # CONFIG_HID_HOLTEK is not set +# CONFIG_HID_HUION is not set CONFIG_HID_KEYTOUCH=m CONFIG_HID_KYE=y # CONFIG_HID_UCLOGIC is not set @@ -4209,7 +4362,6 @@ CONFIG_HID_PICOLCD_LCD=y CONFIG_HID_PICOLCD_LEDS=y CONFIG_HID_PICOLCD_CIR=y # CONFIG_HID_PRIMAX is not set -# CONFIG_HID_PS3REMOTE is not set CONFIG_HID_ROCCAT=m CONFIG_HID_SAITEK=m CONFIG_HID_SAMSUNG=m @@ -4226,6 +4378,7 @@ CONFIG_HID_THINGM=m # CONFIG_HID_THRUSTMASTER is not set # CONFIG_HID_WACOM is not set # CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_XINMO is not set # CONFIG_HID_ZEROPLUS is not set CONFIG_HID_ZYDACRON=m CONFIG_HID_SENSOR_HUB=m @@ -4241,9 +4394,7 @@ CONFIG_USB_HIDDEV=y # I2C HID support # CONFIG_I2C_HID=m -CONFIG_USB_ARCH_HAS_OHCI=y -CONFIG_USB_ARCH_HAS_EHCI=y -CONFIG_USB_ARCH_HAS_XHCI=y +CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_SUPPORT=y CONFIG_USB_COMMON=y CONFIG_USB_ARCH_HAS_HCD=y @@ -4256,7 +4407,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # CONFIG_USB_DEFAULT_PERSIST=y # CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set +CONFIG_USB_OTG=y # CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set CONFIG_USB_MON=m @@ -4270,7 +4421,6 @@ CONFIG_USB_WUSB_CBAF=m # CONFIG_USB_C67X00_HCD is not set CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_PLATFORM=m -# CONFIG_USB_XHCI_HCD_DEBUGGING is not set CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y @@ -4280,11 +4430,11 @@ CONFIG_USB_EHCI_HCD_PLATFORM=y # CONFIG_USB_ISP116X_HCD is not set # CONFIG_USB_ISP1760_HCD is not set CONFIG_USB_ISP1362_HCD=m +# CONFIG_USB_FUSBH200_HCD is not set +# CONFIG_USB_FOTG210_HCD is not set CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PCI=y CONFIG_USB_OHCI_HCD_PLATFORM=y -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_UHCI_HCD=y # CONFIG_USB_U132_HCD is not set CONFIG_USB_SL811_HCD=m @@ -4295,6 +4445,7 @@ CONFIG_USB_WHCI_HCD=m CONFIG_USB_HWA_HCD=m CONFIG_USB_HCD_BCMA=m CONFIG_USB_HCD_SSB=m +# CONFIG_USB_HCD_TEST_MODE is not set # # USB Device Class drivers @@ -4333,9 +4484,22 @@ CONFIG_USB_STORAGE_ENE_UB6250=m # CONFIG_USB_MDC800=m CONFIG_USB_MICROTEK=m +# CONFIG_USB_MUSB_HDRC is not set CONFIG_USB_DWC3=m CONFIG_USB_DWC3_HOST=y + +# +# Platform Glue Driver Support +# +# CONFIG_USB_DWC3_EXYNOS is not set +CONFIG_USB_DWC3_PCI=m +CONFIG_USB_DWC3_KEYSTONE=m + +# +# Debugging features +# # CONFIG_USB_DWC3_DEBUG is not set +# CONFIG_USB_DWC2 is not set CONFIG_USB_CHIPIDEA=m # CONFIG_USB_CHIPIDEA_HOST is not set # CONFIG_USB_CHIPIDEA_DEBUG is not set @@ -4346,6 +4510,7 @@ CONFIG_USB_CHIPIDEA=m CONFIG_USB_USS720=m CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_SIMPLE=m CONFIG_USB_SERIAL_AIRCABLE=m CONFIG_USB_SERIAL_ARK3116=m CONFIG_USB_SERIAL_BELKIN=m @@ -4356,7 +4521,6 @@ CONFIG_USB_SERIAL_CP210X=m CONFIG_USB_SERIAL_CYPRESS_M8=m # CONFIG_USB_SERIAL_EMPEG is not set CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_FUNSOFT=m CONFIG_USB_SERIAL_VISOR=m CONFIG_USB_SERIAL_IPAQ=m CONFIG_USB_SERIAL_IR=m @@ -4375,16 +4539,14 @@ CONFIG_USB_SERIAL_MCT_U232=m CONFIG_USB_SERIAL_MOS7720=m CONFIG_USB_SERIAL_MOS7715_PARPORT=y CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_MOTOROLA=m +CONFIG_USB_SERIAL_MXUPORT=m # CONFIG_USB_SERIAL_NAVMAN is not set CONFIG_USB_SERIAL_PL2303=m CONFIG_USB_SERIAL_OTI6858=m CONFIG_USB_SERIAL_QCAUX=m CONFIG_USB_SERIAL_QUALCOMM=m CONFIG_USB_SERIAL_SPCP8X5=m -# CONFIG_USB_SERIAL_HP4X is not set # CONFIG_USB_SERIAL_SAFE is not set -CONFIG_USB_SERIAL_SIEMENS_MPI=m CONFIG_USB_SERIAL_SIERRAWIRELESS=m # CONFIG_USB_SERIAL_SYMBOL is not set # CONFIG_USB_SERIAL_TI is not set @@ -4394,9 +4556,7 @@ CONFIG_USB_SERIAL_WWAN=m CONFIG_USB_SERIAL_OPTION=m # CONFIG_USB_SERIAL_OMNINET is not set # CONFIG_USB_SERIAL_OPTICON is not set -# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set # CONFIG_USB_SERIAL_XSENS_MT is not set -# CONFIG_USB_SERIAL_ZIO is not set # CONFIG_USB_SERIAL_WISHBONE is not set CONFIG_USB_SERIAL_ZTE=m CONFIG_USB_SERIAL_SSU100=m @@ -4425,6 +4585,7 @@ CONFIG_USB_SISUSBVGA_CON=y # CONFIG_USB_TRANCEVIBRATOR is not set CONFIG_USB_IOWARRIOR=m # CONFIG_USB_TEST is not set +CONFIG_USB_EHSET_TEST_FIXTURE=m # CONFIG_USB_ISIGHTFW is not set CONFIG_USB_YUREX=m CONFIG_USB_EZUSB_FX2=m @@ -4434,7 +4595,18 @@ CONFIG_USB_SPEEDTOUCH=m CONFIG_USB_CXACRU=m CONFIG_USB_UEAGLEATM=m CONFIG_USB_XUSBATM=m -# CONFIG_USB_PHY is not set + +# +# USB Physical Layer drivers +# +CONFIG_USB_PHY=y +CONFIG_USB_OTG_FSM=m +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_SAMSUNG_USB2PHY is not set +# CONFIG_SAMSUNG_USB3PHY is not set +# CONFIG_USB_GPIO_VBUS is not set +# CONFIG_USB_ISP1301 is not set +# CONFIG_USB_RCAR_PHY is not set # CONFIG_USB_GADGET is not set CONFIG_UWB=m CONFIG_UWB_HWA=m @@ -4480,6 +4652,7 @@ CONFIG_MEMSTICK=m # # CONFIG_MEMSTICK_UNSAFE_RESUME is not set CONFIG_MSPRO_BLOCK=m +CONFIG_MS_BLOCK=m # # MemoryStick Host Controller Drivers @@ -4505,14 +4678,15 @@ CONFIG_LEDS_LP55XX_COMMON=m CONFIG_LEDS_LP5521=m CONFIG_LEDS_LP5523=m CONFIG_LEDS_LP5562=m +CONFIG_LEDS_LP8501=m CONFIG_LEDS_CLEVO_MAIL=m CONFIG_LEDS_PCA955X=m -CONFIG_LEDS_PCA9633=m +CONFIG_LEDS_PCA963X=m +CONFIG_LEDS_PCA9685=m CONFIG_LEDS_BD2802=m CONFIG_LEDS_INTEL_SS4200=m CONFIG_LEDS_LT3593=m CONFIG_LEDS_DELL_NETBOOKS=m -# CONFIG_LEDS_RENESAS_TPU is not set CONFIG_LEDS_TCA6507=m CONFIG_LEDS_LM355x=m CONFIG_LEDS_OT200=m @@ -4586,7 +4760,9 @@ CONFIG_RTC_DRV_MAX6900=m CONFIG_RTC_DRV_RS5C372=m CONFIG_RTC_DRV_ISL1208=m CONFIG_RTC_DRV_ISL12022=m +CONFIG_RTC_DRV_ISL12057=m CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF2127=m CONFIG_RTC_DRV_PCF8523=m CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8583=m @@ -4625,6 +4801,7 @@ CONFIG_RTC_DRV_DS2404=m # # on-CPU RTC drivers # +CONFIG_RTC_DRV_MOXART=m # # HID Sensor RTC drivers @@ -4638,8 +4815,9 @@ CONFIG_DMADEVICES=y # # CONFIG_INTEL_MID_DMAC is not set CONFIG_INTEL_IOATDMA=m +CONFIG_DW_DMAC_CORE=m CONFIG_DW_DMAC=m -# CONFIG_DW_DMAC_BIG_ENDIAN_IO is not set +CONFIG_DW_DMAC_PCI=m CONFIG_TIMB_DMA=m CONFIG_PCH_DMA=m CONFIG_DMA_ENGINE=y @@ -4650,17 +4828,18 @@ CONFIG_DMA_ACPI=y # CONFIG_ASYNC_TX_DMA=y # CONFIG_DMATEST is not set +CONFIG_DMA_ENGINE_RAID=y CONFIG_DCA=m # CONFIG_AUXDISPLAY is not set CONFIG_UIO=m # CONFIG_UIO_CIF is not set -# CONFIG_UIO_PDRV is not set # CONFIG_UIO_PDRV_GENIRQ is not set # CONFIG_UIO_DMEM_GENIRQ is not set CONFIG_UIO_AEC=m CONFIG_UIO_SERCOS3=m CONFIG_UIO_PCI_GENERIC=m # CONFIG_UIO_NETX is not set +# CONFIG_UIO_MF624 is not set # CONFIG_VFIO is not set CONFIG_VIRT_DRIVERS=y CONFIG_VIRTIO=y @@ -4690,14 +4869,16 @@ CONFIG_USBIP_HOST=m # CONFIG_PRISM2_USB is not set CONFIG_ECHO=m # CONFIG_COMEDI is not set -# CONFIG_ASUS_OLED is not set # CONFIG_PANEL is not set # CONFIG_R8187SE is not set # CONFIG_RTL8192U is not set # CONFIG_RTLLIB is not set # CONFIG_R8712U is not set +# CONFIG_R8188EU is not set +# CONFIG_R8821AE is not set CONFIG_RTS5139=m # CONFIG_RTS5139_DEBUG is not set +# CONFIG_RTS5208 is not set # CONFIG_TRANZPORT is not set # CONFIG_IDE_PHISON is not set # CONFIG_LINE6_USB is not set @@ -4772,10 +4953,7 @@ CONFIG_RTS5139=m # Triggers - standalone # # CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set -# CONFIG_IIO_GPIO_TRIGGER is not set -# CONFIG_IIO_SYSFS_TRIGGER is not set # CONFIG_IIO_SIMPLE_DUMMY is not set -# CONFIG_ZSMALLOC is not set # CONFIG_WLAGS49_H2 is not set # CONFIG_WLAGS49_H25 is not set # CONFIG_FB_SM7XX is not set @@ -4800,17 +4978,19 @@ CONFIG_RTS5139=m # CONFIG_ANDROID is not set # CONFIG_USB_WPAN_HCD is not set # CONFIG_WIMAX_GDM72XX is not set -# CONFIG_CSR_WIFI is not set +CONFIG_LTE_GDM724X=m # CONFIG_NET_VENDOR_SILICOM is not set # CONFIG_CED1401 is not set # CONFIG_DGRP is not set # CONFIG_FIREWIRE_SERIAL is not set -# CONFIG_USB_DWC2 is not set +# CONFIG_LUSTRE_FS is not set +# CONFIG_XILLYBUS is not set +# CONFIG_DGNC is not set +# CONFIG_DGAP is not set CONFIG_X86_PLATFORM_DEVICES=y CONFIG_ACER_WMI=m CONFIG_ACERHDF=m CONFIG_ASUS_LAPTOP=m -CONFIG_CHROMEOS_LAPTOP=m CONFIG_DELL_LAPTOP=m CONFIG_DELL_WMI=m CONFIG_DELL_WMI_AIO=m @@ -4820,6 +5000,7 @@ CONFIG_FUJITSU_LAPTOP=m CONFIG_AMILO_RFKILL=m CONFIG_TC1100_WMI=m CONFIG_HP_ACCEL=m +# CONFIG_HP_WIRELESS is not set CONFIG_HP_WMI=m CONFIG_MSI_LAPTOP=m CONFIG_PANASONIC_LAPTOP=m @@ -4854,7 +5035,10 @@ CONFIG_MXM_WMI=m CONFIG_INTEL_OAKTRAIL=m CONFIG_SAMSUNG_Q10=m # CONFIG_APPLE_GMUX is not set +CONFIG_INTEL_RST=m +# CONFIG_INTEL_SMARTCONNECT is not set CONFIG_PVPANIC=m +# CONFIG_CHROME_PLATFORMS is not set CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y @@ -4862,7 +5046,7 @@ CONFIG_COMMON_CLK=y # # Common Clock Framework # -# CONFIG_COMMON_CLK_DEBUG is not set +# CONFIG_COMMON_CLK_SI5351 is not set # # Hardware Spinlock drivers @@ -4900,6 +5084,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # # Accelerometers # +# CONFIG_BMA180 is not set # CONFIG_HID_SENSOR_ACCEL_3D is not set # CONFIG_IIO_ST_ACCEL_3AXIS is not set @@ -4907,6 +5092,8 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # Analog to digital converters # # CONFIG_MAX1363 is not set +# CONFIG_MCP3422 is not set +# CONFIG_NAU7802 is not set # CONFIG_TI_ADC081C is not set # CONFIG_VIPERBOARD_ADC is not set @@ -4919,7 +5106,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_HID_SENSOR_IIO_COMMON=m CONFIG_HID_SENSOR_IIO_TRIGGER=m -# CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS is not set # # Digital to analog converters @@ -4949,6 +5135,11 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m # CONFIG_IIO_ST_GYRO_3AXIS is not set # CONFIG_ITG3200 is not set +# +# Humidity sensors +# +# CONFIG_DHT11 is not set + # # Inertial measurement units # @@ -4958,21 +5149,60 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m # Light sensors # # CONFIG_ADJD_S311 is not set -# CONFIG_SENSORS_LM3533 is not set -# CONFIG_SENSORS_TSL2563 is not set -# CONFIG_VCNL4000 is not set +# CONFIG_APDS9300 is not set +# CONFIG_CM32181 is not set +# CONFIG_CM36651 is not set +# CONFIG_GP2AP020A00F is not set # CONFIG_HID_SENSOR_ALS is not set +# CONFIG_SENSORS_LM3533 is not set +# CONFIG_TCS3472 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_TSL4531 is not set +# CONFIG_VCNL4000 is not set # # Magnetometer sensors # # CONFIG_AK8975 is not set +# CONFIG_MAG3110 is not set # CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set # CONFIG_IIO_ST_MAGN_3AXIS is not set + +# +# Inclinometer sensors +# +# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set + +# +# Triggers - standalone +# +# CONFIG_IIO_INTERRUPT_TRIGGER is not set +# CONFIG_IIO_SYSFS_TRIGGER is not set + +# +# Pressure sensors +# +# CONFIG_MPL3115 is not set +# CONFIG_IIO_ST_PRESS is not set + +# +# Temperature sensors +# +# CONFIG_TMP006 is not set +# CONFIG_NTB is not set # CONFIG_VME_BUS is not set # CONFIG_PWM is not set # CONFIG_IPACK_BUS is not set -# CONFIG_RESET_CONTROLLER is not set +CONFIG_RESET_CONTROLLER=y +# CONFIG_FMC is not set + +# +# PHY Subsystem +# +CONFIG_GENERIC_PHY=y +# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set +# CONFIG_BCM_KONA_USB2_PHY is not set +# CONFIG_POWERCAP is not set # # Firmware Drivers @@ -4984,6 +5214,7 @@ CONFIG_DELL_RBU=m CONFIG_DCDBAS=m CONFIG_DMIID=y CONFIG_DMI_SYSFS=y +CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y CONFIG_ISCSI_IBFT_FIND=y CONFIG_ISCSI_IBFT=m # CONFIG_GOOGLE_FIRMWARE is not set @@ -4994,6 +5225,7 @@ CONFIG_ISCSI_IBFT=m CONFIG_EFI_VARS=y CONFIG_EFI_VARS_PSTORE=y # CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set +CONFIG_UEFI_CPER=y # # File systems @@ -5029,6 +5261,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set # CONFIG_BTRFS_DEBUG is not set +CONFIG_BTRFS_ASSERT=y # CONFIG_NILFS2_FS is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y @@ -5049,7 +5282,6 @@ CONFIG_QUOTACTL=y CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m -CONFIG_GENERIC_ACL=y # # Caches @@ -5132,10 +5364,13 @@ CONFIG_NFS_V3_ACL=y CONFIG_NFS_V4=m # CONFIG_NFS_SWAP is not set CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y CONFIG_PNFS_FILE_LAYOUT=m CONFIG_PNFS_BLOCK=m CONFIG_PNFS_OBJLAYOUT=m CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="ipfire.org" +CONFIG_NFS_V4_1_MIGRATION=y +CONFIG_NFS_V4_SECURITY_LABEL=y CONFIG_NFS_FSCACHE=y # CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_NFS_USE_KERNEL_DNS=y @@ -5144,6 +5379,7 @@ CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y +CONFIG_NFSD_V4_SECURITY_LABEL=y # CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_LOCKD=m CONFIG_LOCKD_V4=y @@ -5228,64 +5464,92 @@ CONFIG_DLM=m # Kernel hacking # CONFIG_TRACE_IRQFLAGS_SUPPORT=y + +# +# printk and dmesg options +# # CONFIG_PRINTK_TIME is not set CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 +# CONFIG_BOOT_PRINTK_DELAY is not set +CONFIG_DYNAMIC_DEBUG=y + +# +# Compile-time checks and compiler options +# +# CONFIG_DEBUG_INFO is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=2048 -# CONFIG_MAGIC_SYSRQ is not set CONFIG_STRIP_ASM_SYMS=y # CONFIG_READABLE_ASM is not set # CONFIG_UNUSED_SYMBOLS is not set CONFIG_DEBUG_FS=y CONFIG_HEADERS_CHECK=y # CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_MAGIC_SYSRQ is not set CONFIG_DEBUG_KERNEL=y + +# +# Memory Debugging +# +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_VIRTUAL is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_DEBUG_HIGHMEM is not set +CONFIG_HAVE_DEBUG_STACKOVERFLOW=y +CONFIG_DEBUG_STACKOVERFLOW=y +CONFIG_HAVE_ARCH_KMEMCHECK=y CONFIG_DEBUG_SHIRQ=y + +# +# Debug Lockups and Hangs +# CONFIG_LOCKUP_DETECTOR=y CONFIG_HARDLOCKUP_DETECTOR=y # CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0 # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_DETECT_HUNG_TASK is not set # CONFIG_PANIC_ON_OOPS is not set CONFIG_PANIC_ON_OOPS_VALUE=0 -# CONFIG_DETECT_HUNG_TASK is not set +CONFIG_PANIC_TIMEOUT=0 CONFIG_SCHED_DEBUG=y CONFIG_SCHEDSTATS=y CONFIG_TIMER_STATS=y -# CONFIG_DEBUG_OBJECTS is not set -# CONFIG_SLUB_DEBUG_ON is not set -# CONFIG_SLUB_STATS is not set -CONFIG_HAVE_DEBUG_KMEMLEAK=y -# CONFIG_DEBUG_KMEMLEAK is not set + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set # CONFIG_DEBUG_LOCK_ALLOC is not set # CONFIG_PROVE_LOCKING is not set # CONFIG_LOCK_STAT is not set # CONFIG_DEBUG_ATOMIC_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set CONFIG_STACKTRACE=y -# CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_DEBUG_KOBJECT is not set -# CONFIG_DEBUG_HIGHMEM is not set CONFIG_DEBUG_BUGVERBOSE=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_VIRTUAL is not set # CONFIG_DEBUG_WRITECOUNT is not set -CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DEBUG_LIST=y -# CONFIG_TEST_LIST_SORT is not set # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_DEBUG_CREDENTIALS is not set -CONFIG_ARCH_WANT_FRAME_POINTERS=y -CONFIG_FRAME_POINTER=y -# CONFIG_BOOT_PRINTK_DELAY is not set # # RCU Debugging @@ -5295,16 +5559,11 @@ CONFIG_FRAME_POINTER=y CONFIG_RCU_CPU_STALL_TIMEOUT=60 # CONFIG_RCU_CPU_STALL_INFO is not set # CONFIG_RCU_TRACE is not set -# CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -# CONFIG_DEBUG_PER_CPU_MAPS is not set -# CONFIG_LKDTM is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set # CONFIG_FAULT_INJECTION is not set CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set -# CONFIG_DEBUG_PAGEALLOC is not set CONFIG_USER_STACKTRACE_SUPPORT=y CONFIG_NOP_TRACER=y CONFIG_HAVE_FUNCTION_TRACER=y @@ -5347,24 +5606,32 @@ CONFIG_FTRACE_MCOUNT_RECORD=y # CONFIG_MMIOTRACE is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set + +# +# Runtime Testing +# +# CONFIG_LKDTM is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_BACKTRACE_SELF_TEST is not set CONFIG_RBTREE_TEST=m # CONFIG_INTERVAL_TREE_TEST is not set -# CONFIG_BUILD_DOCSRC is not set -CONFIG_DYNAMIC_DEBUG=y -# CONFIG_DMA_API_DEBUG is not set +# CONFIG_PERCPU_TEST is not set # CONFIG_ATOMIC64_SELFTEST is not set CONFIG_ASYNC_RAID6_TEST=m +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_BUILD_DOCSRC is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_TEST_MODULE is not set +# CONFIG_TEST_USER_COPY is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set -CONFIG_HAVE_ARCH_KMEMCHECK=y -# CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_TEST_KSTRTOX is not set CONFIG_STRICT_DEVMEM=y # CONFIG_X86_VERBOSE_BOOTUP is not set CONFIG_EARLY_PRINTK=y # CONFIG_EARLY_PRINTK_DBGP is not set -CONFIG_DEBUG_STACKOVERFLOW=y +CONFIG_EARLY_PRINTK_EFI=y # CONFIG_X86_PTDUMP is not set CONFIG_DEBUG_NX_TEST=m CONFIG_DOUBLEFAULT=y @@ -5384,6 +5651,7 @@ CONFIG_DEBUG_BOOT_PARAMS=y # CONFIG_CPA_DEBUG is not set CONFIG_OPTIMIZE_INLINING=y # CONFIG_DEBUG_NMI_SELFTEST is not set +# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set # # Security options @@ -5442,6 +5710,7 @@ CONFIG_PAX_RANDMMAP=y # # Miscellaneous hardening features # +CONFIG_PAX_MEMORY_SANITIZE=y CONFIG_PAX_MEMORY_STACKLEAK=y CONFIG_PAX_MEMORY_STRUCTLEAK=y # CONFIG_PAX_MEMORY_UDEREF is not set @@ -5463,6 +5732,8 @@ CONFIG_GRKERNSEC_PROC_MEMMAP=y CONFIG_GRKERNSEC_BRUTE=y CONFIG_GRKERNSEC_MODHARDEN=y CONFIG_GRKERNSEC_HIDESYM=y +CONFIG_GRKERNSEC_RANDSTRUCT=y +CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y CONFIG_GRKERNSEC_KERN_LOCKOUT=y # @@ -5522,12 +5793,12 @@ CONFIG_GRKERNSEC_DMESG=y CONFIG_GRKERNSEC_HARDEN_PTRACE=y CONFIG_GRKERNSEC_PTRACE_READEXEC=y CONFIG_GRKERNSEC_SETXID=y +CONFIG_GRKERNSEC_HARDEN_IPC=y # CONFIG_GRKERNSEC_TPE is not set # # Network Protections # -CONFIG_GRKERNSEC_RANDNET=y CONFIG_GRKERNSEC_BLACKHOLE=y CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y # CONFIG_GRKERNSEC_SOCKET is not set @@ -5548,6 +5819,8 @@ CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y CONFIG_GRKERNSEC_FLOODTIME=10 CONFIG_GRKERNSEC_FLOODBURST=6 CONFIG_KEYS=y +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_BIG_KEYS is not set # CONFIG_ENCRYPTED_KEYS is not set CONFIG_KEYS_DEBUG_PROC_KEYS=y CONFIG_SECURITY_DMESG_RESTRICT=y @@ -5600,7 +5873,7 @@ CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_CRYPTD=y CONFIG_CRYPTO_AUTHENC=m CONFIG_CRYPTO_TEST=m -CONFIG_CRYPTO_ABLK_HELPER_X86=y +CONFIG_CRYPTO_ABLK_HELPER=y CONFIG_CRYPTO_GLUE_HELPER_X86=m # @@ -5636,6 +5909,7 @@ CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C_INTEL=y CONFIG_CRYPTO_CRC32=y CONFIG_CRYPTO_CRC32_PCLMUL=m +CONFIG_CRYPTO_CRCT10DIF=y CONFIG_CRYPTO_GHASH=m CONFIG_CRYPTO_MD4=m CONFIG_CRYPTO_MD5=y @@ -5683,6 +5957,8 @@ CONFIG_CRYPTO_TWOFISH_586=m CONFIG_CRYPTO_DEFLATE=m CONFIG_CRYPTO_ZLIB=m CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m # # Random Number Generation @@ -5691,6 +5967,7 @@ CONFIG_CRYPTO_ANSI_CPRNG=m CONFIG_CRYPTO_USER_API=y CONFIG_CRYPTO_USER_API_HASH=y CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_CRYPTO_HASH_INFO=y CONFIG_CRYPTO_HW=y CONFIG_CRYPTO_DEV_PADLOCK=m CONFIG_CRYPTO_DEV_PADLOCK_AES=m @@ -5698,6 +5975,9 @@ CONFIG_CRYPTO_DEV_PADLOCK_SHA=m CONFIG_CRYPTO_DEV_GEODE=m CONFIG_CRYPTO_DEV_HIFN_795X=m CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y +CONFIG_CRYPTO_DEV_CCP=y +CONFIG_CRYPTO_DEV_CCP_DD=m +CONFIG_CRYPTO_DEV_CCP_CRYPTO=m CONFIG_ASYMMETRIC_KEY_TYPE=m CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m CONFIG_PUBLIC_KEY_ALGO_RSA=m @@ -5711,6 +5991,7 @@ CONFIG_KVM_MMIO=y CONFIG_KVM_ASYNC_PF=y CONFIG_HAVE_KVM_MSI=y CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y +CONFIG_KVM_VFIO=y CONFIG_VIRTUALIZATION=y CONFIG_KVM=m CONFIG_KVM_INTEL=m @@ -5727,10 +6008,12 @@ CONFIG_RAID6_PQ=m CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y CONFIG_GENERIC_FIND_FIRST_BIT=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IOMAP=y CONFIG_GENERIC_IO=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y CONFIG_CRC_CCITT=y CONFIG_CRC16=y CONFIG_CRC_T10DIF=y @@ -5745,10 +6028,14 @@ CONFIG_CRC7=m CONFIG_LIBCRC32C=m CONFIG_CRC8=m CONFIG_AUDIT_GENERIC=y +# CONFIG_RANDOM32_SELFTEST is not set CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y CONFIG_XZ_DEC=y CONFIG_XZ_DEC_X86=y CONFIG_XZ_DEC_POWERPC=y @@ -5763,11 +6050,13 @@ CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_LZMA=y CONFIG_DECOMPRESS_XZ=y CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_TEXTSEARCH=y CONFIG_TEXTSEARCH_KMP=m CONFIG_TEXTSEARCH_BM=m CONFIG_TEXTSEARCH_FSM=m +CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_DMA=y @@ -5783,3 +6072,7 @@ CONFIG_CORDIC=m CONFIG_MPILIB=m CONFIG_OID_REGISTRY=m CONFIG_UCS2_STRING=y +CONFIG_FONT_SUPPORT=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y diff --git a/config/kernel/kernel.config.i586-ipfire-pae b/config/kernel/kernel.config.i586-ipfire-pae index ce5b039d6..ff3a9eea7 100644 --- a/config/kernel/kernel.config.i586-ipfire-pae +++ b/config/kernel/kernel.config.i586-ipfire-pae @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 3.10.52 Kernel Configuration +# Linux/x86 3.14.22 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -28,6 +28,8 @@ CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y # CONFIG_ZONE_DMA32 is not set # CONFIG_AUDIT_ARCH is not set CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y @@ -36,7 +38,6 @@ CONFIG_HAVE_INTEL_TXT=y CONFIG_X86_32_SMP=y CONFIG_X86_HT=y CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" -CONFIG_ARCH_CPU_PROBE_RELEASE=y CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_IRQ_WORK=y @@ -47,6 +48,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y # CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_CROSS_COMPILE="" +# CONFIG_COMPILE_TEST is not set CONFIG_LOCALVERSION="" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_HAVE_KERNEL_GZIP=y @@ -54,11 +56,13 @@ CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y CONFIG_HAVE_KERNEL_XZ=y CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_LZ4=y # CONFIG_KERNEL_GZIP is not set # CONFIG_KERNEL_BZIP2 is not set # CONFIG_KERNEL_LZMA is not set CONFIG_KERNEL_XZ=y # CONFIG_KERNEL_LZO is not set +# CONFIG_KERNEL_LZ4 is not set CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SWAP=y CONFIG_SYSVIPC=y @@ -70,13 +74,10 @@ CONFIG_AUDIT=y CONFIG_AUDITSYSCALL=y CONFIG_AUDIT_WATCH=y CONFIG_AUDIT_TREE=y -CONFIG_AUDIT_LOGINUID_IMMUTABLE=y -CONFIG_HAVE_GENERIC_HARDIRQS=y # # IRQ subsystem # -CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_PENDING_IRQ=y @@ -153,6 +154,7 @@ CONFIG_BLK_CGROUP=y CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y +CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_SCHED_AUTOGROUP=y @@ -165,12 +167,12 @@ CONFIG_RD_BZIP2=y CONFIG_RD_LZMA=y CONFIG_RD_XZ=y CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_HAVE_UID16=y CONFIG_SYSCTL_EXCEPTION_TRACE=y -CONFIG_HOTPLUG=y CONFIG_HAVE_PCSPKR_PLATFORM=y CONFIG_EXPERT=y CONFIG_UID16=y @@ -204,6 +206,8 @@ CONFIG_SLUB_DEBUG=y # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLOB is not set +CONFIG_SLUB_CPU_PARTIAL=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set # CONFIG_PROFILING is not set CONFIG_TRACEPOINTS=y CONFIG_HAVE_OPROFILE=y @@ -221,7 +225,6 @@ CONFIG_HAVE_OPTPROBES=y CONFIG_HAVE_KPROBES_ON_FTRACE=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_ATTRS=y -CONFIG_USE_GENERIC_SMP_HELPERS=y CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_CLK=y @@ -240,8 +243,14 @@ CONFIG_HAVE_CMPXCHG_DOUBLE=y CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y +CONFIG_HAVE_CC_STACKPROTECTOR=y +CONFIG_CC_STACKPROTECTOR=y +# CONFIG_CC_STACKPROTECTOR_NONE is not set +CONFIG_CC_STACKPROTECTOR_REGULAR=y +# CONFIG_CC_STACKPROTECTOR_STRONG is not set CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARCH_SOFT_DIRTY=y CONFIG_MODULES_USE_ELF_REL=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND3=y @@ -259,7 +268,7 @@ CONFIG_MODULES=y # CONFIG_MODULE_FORCE_LOAD is not set CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_FORCE_UNLOAD is not set -# CONFIG_MODVERSIONS is not set +CONFIG_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_MODULE_SIG is not set CONFIG_STOP_MACHINE=y @@ -269,12 +278,14 @@ CONFIG_BLK_DEV_BSG=y CONFIG_BLK_DEV_BSGLIB=y CONFIG_BLK_DEV_INTEGRITY=y CONFIG_BLK_DEV_THROTTLING=y +# CONFIG_BLK_CMDLINE_PARSER is not set # # Partition Types # CONFIG_PARTITION_ADVANCED=y # CONFIG_ACORN_PARTITION is not set +# CONFIG_AIX_PARTITION is not set # CONFIG_OSF_PARTITION is not set # CONFIG_AMIGA_PARTITION is not set # CONFIG_ATARI_PARTITION is not set @@ -292,6 +303,7 @@ CONFIG_LDM_PARTITION=y # CONFIG_KARMA_PARTITION is not set CONFIG_EFI_PARTITION=y # CONFIG_SYSV68_PARTITION is not set +# CONFIG_CMDLINE_PARTITION is not set # # IO Schedulers @@ -325,7 +337,7 @@ CONFIG_X86_MPPARSE=y CONFIG_X86_BIGSMP=y CONFIG_X86_EXTENDED_PLATFORM=y # CONFIG_X86_GOLDFISH is not set -# CONFIG_X86_WANT_INTEL_MID is not set +# CONFIG_X86_INTEL_MID is not set CONFIG_X86_INTEL_LPSS=y # CONFIG_X86_RDC321X is not set CONFIG_X86_32_NON_STANDARD=y @@ -348,6 +360,7 @@ CONFIG_XEN_MAX_DOMAIN_MEMORY=64 CONFIG_XEN_SAVE_RESTORE=y CONFIG_XEN_DEBUG_FS=y CONFIG_KVM_GUEST=y +# CONFIG_KVM_DEBUG_FS is not set # CONFIG_LGUEST_GUEST is not set CONFIG_PARAVIRT_TIME_ACCOUNTING=y CONFIG_PARAVIRT_CLOCK=y @@ -427,9 +440,8 @@ CONFIG_MICROCODE=m CONFIG_MICROCODE_INTEL=y CONFIG_MICROCODE_AMD=y CONFIG_MICROCODE_OLD_INTERFACE=y -CONFIG_MICROCODE_INTEL_LIB=y -CONFIG_MICROCODE_INTEL_EARLY=y -CONFIG_MICROCODE_EARLY=y +# CONFIG_MICROCODE_INTEL_EARLY is not set +# CONFIG_MICROCODE_AMD_EARLY is not set # CONFIG_X86_MSR is not set CONFIG_X86_CPUID=y # CONFIG_NOHIGHMEM is not set @@ -461,6 +473,7 @@ CONFIG_MEMORY_ISOLATION=y # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y CONFIG_BALLOON_COMPACTION=y CONFIG_COMPACTION=y CONFIG_MIGRATION=y @@ -479,6 +492,9 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y CONFIG_CROSS_MEMORY_ATTACH=y CONFIG_CLEANCACHE=y # CONFIG_FRONTSWAP is not set +# CONFIG_CMA is not set +# CONFIG_ZBUD is not set +# CONFIG_ZSMALLOC is not set CONFIG_HIGHPTE=y CONFIG_X86_CHECK_BIOS_CORRUPTION=y CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y @@ -495,7 +511,6 @@ CONFIG_X86_SMAP=y CONFIG_EFI=y CONFIG_EFI_STUB=y CONFIG_SECCOMP=y -CONFIG_CC_STACKPROTECTOR=y # CONFIG_HZ_100 is not set # CONFIG_HZ_250 is not set CONFIG_HZ_300=y @@ -506,6 +521,7 @@ CONFIG_SCHED_HRTICK=y CONFIG_CRASH_DUMP=y CONFIG_PHYSICAL_START=0x400000 CONFIG_RELOCATABLE=y +# CONFIG_RANDOMIZE_BASE is not set CONFIG_X86_NEED_RELOCS=y CONFIG_PHYSICAL_ALIGN=0x400000 CONFIG_HOTPLUG_CPU=y @@ -520,8 +536,6 @@ CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y CONFIG_HIBERNATE_CALLBACKS=y -CONFIG_HIBERNATION=y -CONFIG_PM_STD_PARTITION="" CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y # CONFIG_PM_AUTOSLEEP is not set @@ -530,19 +544,18 @@ CONFIG_PM_RUNTIME=y CONFIG_PM=y # CONFIG_PM_DEBUG is not set CONFIG_PM_CLK=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_ACPI=y CONFIG_ACPI_SLEEP=y CONFIG_ACPI_PROCFS=y # CONFIG_ACPI_PROCFS_POWER is not set CONFIG_ACPI_EC_DEBUGFS=m -# CONFIG_ACPI_PROC_EVENT is not set CONFIG_ACPI_AC=y CONFIG_ACPI_BATTERY=y CONFIG_ACPI_BUTTON=y CONFIG_ACPI_VIDEO=m CONFIG_ACPI_FAN=y CONFIG_ACPI_DOCK=y -CONFIG_ACPI_I2C=m CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_IPMI=m CONFIG_ACPI_HOTPLUG_CPU=y @@ -550,7 +563,6 @@ CONFIG_ACPI_PROCESSOR_AGGREGATOR=m CONFIG_ACPI_THERMAL=y # CONFIG_ACPI_CUSTOM_DSDT is not set CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y -CONFIG_ACPI_BLACKLIST_YEAR=1999 # CONFIG_ACPI_DEBUG is not set CONFIG_ACPI_PCI_SLOT=y CONFIG_X86_PM_TIMER=y @@ -565,6 +577,7 @@ CONFIG_ACPI_APEI_PCIEAER=y CONFIG_ACPI_APEI_MEMORY_FAILURE=y # CONFIG_ACPI_APEI_EINJ is not set # CONFIG_ACPI_APEI_ERST_DEBUG is not set +CONFIG_ACPI_EXTLOG=m CONFIG_SFI=y CONFIG_X86_APM_BOOT=y CONFIG_APM=y @@ -578,7 +591,6 @@ CONFIG_APM_CPU_IDLE=y # CPU Frequency scaling # CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_TABLE=y CONFIG_CPU_FREQ_GOV_COMMON=y CONFIG_CPU_FREQ_STAT=m CONFIG_CPU_FREQ_STAT_DETAILS=y @@ -620,6 +632,10 @@ CONFIG_X86_LONGHAUL=m # CONFIG_X86_SPEEDSTEP_LIB=m CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y + +# +# CPU Idle +# CONFIG_CPU_IDLE=y # CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set CONFIG_CPU_IDLE_GOV_LADDER=y @@ -652,7 +668,6 @@ CONFIG_PCIEASPM_DEFAULT=y # CONFIG_PCIEASPM_POWERSAVE is not set # CONFIG_PCIEASPM_PERFORMANCE is not set CONFIG_PCIE_PME=y -CONFIG_ARCH_SUPPORTS_MSI=y CONFIG_PCI_MSI=y # CONFIG_PCI_DEBUG is not set # CONFIG_PCI_REALLOC_ENABLE_AUTO is not set @@ -665,6 +680,10 @@ CONFIG_PCI_IOV=y # CONFIG_PCI_PASID is not set CONFIG_PCI_IOAPIC=y CONFIG_PCI_LABEL=y + +# +# PCI host controller drivers +# CONFIG_ISA_DMA_API=y CONFIG_ISA=y CONFIG_EISA=y @@ -706,6 +725,7 @@ CONFIG_HOTPLUG_PCI_ACPI_IBM=m # CONFIG_HOTPLUG_PCI_CPCI is not set # CONFIG_HOTPLUG_PCI_SHPC is not set # CONFIG_RAPIDIO is not set +CONFIG_X86_SYSFB=y # # Executable file formats / Emulations @@ -718,7 +738,6 @@ CONFIG_HAVE_AOUT=y CONFIG_BINFMT_MISC=y CONFIG_COREDUMP=y CONFIG_HAVE_ATOMIC_IOMAP=y -CONFIG_HAVE_TEXT_POKE_SMP=y CONFIG_NET=y # @@ -755,7 +774,6 @@ CONFIG_IP_MROUTE=y CONFIG_IP_MROUTE_MULTIPLE_TABLES=y CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y -# CONFIG_ARPD is not set CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=m CONFIG_INET_AH=m @@ -788,7 +806,6 @@ CONFIG_DEFAULT_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" CONFIG_TCP_MD5SIG=y CONFIG_IPV6=y -CONFIG_IPV6_PRIVACY=y CONFIG_IPV6_ROUTER_PREF=y CONFIG_IPV6_ROUTE_INFO=y CONFIG_IPV6_OPTIMISTIC_DAD=y @@ -802,6 +819,7 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m CONFIG_INET6_XFRM_MODE_TUNNEL=m CONFIG_INET6_XFRM_MODE_BEET=m CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_VTI=m CONFIG_IPV6_SIT=m CONFIG_IPV6_SIT_6RD=y CONFIG_IPV6_NDISC_NODETYPE=y @@ -823,7 +841,7 @@ CONFIG_BRIDGE_NETFILTER=y # # Core Netfilter Configuration # -CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK=y CONFIG_NETFILTER_NETLINK_ACCT=m CONFIG_NETFILTER_NETLINK_QUEUE=m CONFIG_NETFILTER_NETLINK_LOG=m @@ -865,7 +883,22 @@ CONFIG_NF_NAT_FTP=m CONFIG_NF_NAT_IRC=m CONFIG_NF_NAT_SIP=m CONFIG_NF_NAT_TFTP=m -CONFIG_NETFILTER_TPROXY=m +CONFIG_NETFILTER_SYNPROXY=m +CONFIG_NF_TABLES=y +CONFIG_NF_TABLES_INET=m +CONFIG_NFT_EXTHDR=m +CONFIG_NFT_META=m +CONFIG_NFT_CT=m +CONFIG_NFT_RBTREE=m +CONFIG_NFT_HASH=m +CONFIG_NFT_COUNTER=m +CONFIG_NFT_LOG=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_NAT=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m +CONFIG_NFT_COMPAT=m CONFIG_NETFILTER_XTABLES=y # @@ -910,6 +943,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m # CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m CONFIG_NETFILTER_XT_MATCH_CLUSTER=m CONFIG_NETFILTER_XT_MATCH_COMMENT=m CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m @@ -926,8 +960,10 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m CONFIG_NETFILTER_XT_MATCH_HELPER=m CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m CONFIG_NETFILTER_XT_MATCH_IPRANGE=m -# CONFIG_NETFILTER_XT_MATCH_IPVS is not set +CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_L2TP=m CONFIG_NETFILTER_XT_MATCH_LAYER7=m # CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set CONFIG_NETFILTER_XT_MATCH_LENGTH=m @@ -962,7 +998,9 @@ CONFIG_IP_SET_HASH_IP=m CONFIG_IP_SET_HASH_IPPORT=m CONFIG_IP_SET_HASH_IPPORTIP=m CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_NETPORTNET=m CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETNET=m CONFIG_IP_SET_HASH_NETPORT=m CONFIG_IP_SET_HASH_NETIFACE=m CONFIG_IP_SET_LIST_SET=m @@ -1013,6 +1051,11 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=y CONFIG_NF_CONNTRACK_IPV4=y # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set +CONFIG_NF_TABLES_IPV4=m +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NF_TABLES_ARP=m CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_AH=m CONFIG_IP_NF_MATCH_ECN=m @@ -1020,6 +1063,7 @@ CONFIG_IP_NF_MATCH_RPFILTER=m CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_FILTER=m CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m # CONFIG_IP_NF_TARGET_ULOG is not set CONFIG_NF_NAT_IPV4=m CONFIG_IP_NF_TARGET_MASQUERADE=m @@ -1045,6 +1089,10 @@ CONFIG_IP_NF_MATCH_IPP2P=m # CONFIG_NF_DEFRAG_IPV6=y CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_NF_TABLES_IPV6=m +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_REJECT_IPV6=m CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m @@ -1058,12 +1106,14 @@ CONFIG_IP6_NF_MATCH_RT=m CONFIG_IP6_NF_TARGET_HL=m CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_RAW=m CONFIG_IP6_NF_SECURITY=m CONFIG_NF_NAT_IPV6=m CONFIG_IP6_NF_TARGET_MASQUERADE=m CONFIG_IP6_NF_TARGET_NPT=m +CONFIG_NF_TABLES_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m @@ -1088,7 +1138,6 @@ CONFIG_BRIDGE_EBT_LOG=m CONFIG_BRIDGE_EBT_NFLOG=m # CONFIG_IP_DCCP is not set CONFIG_IP_SCTP=m -# CONFIG_SCTP_DBG_MSG is not set # CONFIG_SCTP_DBG_OBJCNT is not set # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y @@ -1130,6 +1179,7 @@ CONFIG_LLC=y # CONFIG_LAPB is not set # CONFIG_PHONET is not set # CONFIG_IEEE802154 is not set +CONFIG_6LOWPAN_IPHC=m CONFIG_NET_SCHED=y # @@ -1155,6 +1205,8 @@ CONFIG_NET_SCH_CHOKE=m CONFIG_NET_SCH_QFQ=m CONFIG_NET_SCH_CODEL=m CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_HHF=m CONFIG_NET_SCH_PIE=m CONFIG_NET_SCH_INGRESS=m CONFIG_NET_SCH_PLUG=m @@ -1174,6 +1226,7 @@ CONFIG_NET_CLS_RSVP=m CONFIG_NET_CLS_RSVP6=m CONFIG_NET_CLS_FLOW=m CONFIG_NET_CLS_CGROUP=m +CONFIG_NET_CLS_BPF=m CONFIG_NET_EMATCH=y CONFIG_NET_EMATCH_STACK=32 CONFIG_NET_EMATCH_CMP=m @@ -1203,15 +1256,22 @@ CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m +CONFIG_OPENVSWITCH_GRE=y +CONFIG_OPENVSWITCH_VXLAN=y CONFIG_VSOCKETS=m CONFIG_VMWARE_VMCI_VSOCKETS=m CONFIG_NETLINK_MMAP=y CONFIG_NETLINK_DIAG=m +CONFIG_NET_MPLS_GSO=m +CONFIG_HSR=m CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y -CONFIG_NETPRIO_CGROUP=m +CONFIG_CGROUP_NET_PRIO=m +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y # # Network testing @@ -1328,6 +1388,7 @@ CONFIG_DMA_SHARED_BUFFER=y CONFIG_CONNECTOR=y CONFIG_PROC_EVENTS=y # CONFIG_MTD is not set +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y CONFIG_PARPORT=m CONFIG_PARPORT_PC=m CONFIG_PARPORT_SERIAL=m @@ -1349,10 +1410,10 @@ CONFIG_PNPBIOS=y # CONFIG_PNPBIOS_PROC_FS is not set CONFIG_PNPACPI=y CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_NULL_BLK is not set CONFIG_BLK_DEV_FD=m # CONFIG_PARIDE is not set CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m -CONFIG_BLK_CPQ_DA=m CONFIG_BLK_CPQ_CISS_DA=m # CONFIG_CISS_SCSI_TAPE is not set CONFIG_BLK_DEV_DAC960=m @@ -1388,7 +1449,6 @@ CONFIG_SENSORS_LIS3LV02D=m CONFIG_DUMMY_IRQ=m CONFIG_IBM_ASM=m # CONFIG_PHANTOM is not set -# CONFIG_INTEL_MID_PTI is not set # CONFIG_SGI_IOC4 is not set CONFIG_TIFM_CORE=m CONFIG_TIFM_7XX1=m @@ -1440,6 +1500,14 @@ CONFIG_ALTERA_STAPL=m # CONFIG_INTEL_MEI is not set # CONFIG_INTEL_MEI_ME is not set CONFIG_VMWARE_VMCI=m + +# +# Intel MIC Host Driver +# + +# +# Intel MIC Card Driver +# CONFIG_HAVE_IDE=y # CONFIG_IDE is not set @@ -1507,7 +1575,6 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=5000 CONFIG_AIC7XXX_DEBUG_ENABLE=y CONFIG_AIC7XXX_DEBUG_MASK=0 CONFIG_AIC7XXX_REG_PRETTY_PRINT=y -# CONFIG_SCSI_AIC7XXX_OLD is not set CONFIG_SCSI_AIC79XX=m CONFIG_AIC79XX_CMDS_PER_DEVICE=32 CONFIG_AIC79XX_RESET_DELAY_MS=4000 @@ -1524,6 +1591,7 @@ CONFIG_SCSI_DPT_I2O=m CONFIG_SCSI_ADVANSYS=m CONFIG_SCSI_IN2000=m CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_ESAS2R=m CONFIG_MEGARAID_NEWGEN=y CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m @@ -1649,6 +1717,7 @@ CONFIG_SATA_HIGHBANK=m CONFIG_SATA_MV=m CONFIG_SATA_NV=m CONFIG_SATA_PROMISE=m +CONFIG_SATA_RCAR=m CONFIG_SATA_SIL=m CONFIG_SATA_SIS=m CONFIG_SATA_SVW=m @@ -1732,14 +1801,14 @@ CONFIG_MD_MULTIPATH=m CONFIG_MD_FAULTY=m CONFIG_BCACHE=m # CONFIG_BCACHE_DEBUG is not set -# CONFIG_BCACHE_EDEBUG is not set # CONFIG_BCACHE_CLOSURES_DEBUG is not set CONFIG_BLK_DEV_DM_BUILTIN=y CONFIG_BLK_DEV_DM=y # CONFIG_DM_DEBUG is not set -CONFIG_DM_BUFIO=m +CONFIG_DM_BUFIO=y CONFIG_DM_BIO_PRISON=m CONFIG_DM_PERSISTENT_DATA=m +# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set CONFIG_DM_CRYPT=m CONFIG_DM_SNAPSHOT=y # CONFIG_DM_THIN_PROVISIONING is not set @@ -1747,8 +1816,8 @@ CONFIG_DM_CACHE=m CONFIG_DM_CACHE_MQ=m CONFIG_DM_CACHE_CLEANER=m CONFIG_DM_MIRROR=y -CONFIG_DM_RAID=m CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_RAID=m CONFIG_DM_ZERO=y CONFIG_DM_MULTIPATH=m CONFIG_DM_MULTIPATH_QL=m @@ -1757,6 +1826,7 @@ CONFIG_DM_MULTIPATH_ST=m CONFIG_DM_UEVENT=y # CONFIG_DM_FLAKEY is not set CONFIG_DM_VERITY=m +CONFIG_DM_SWITCH=m # CONFIG_TARGET_CORE is not set CONFIG_FUSION=y CONFIG_FUSION_SPI=m @@ -1787,12 +1857,12 @@ CONFIG_I2O_PROC=m CONFIG_MACINTOSH_DRIVERS=y # CONFIG_MAC_EMUMOUSEBTN is not set CONFIG_NETDEVICES=y +CONFIG_MII=m CONFIG_NET_CORE=y CONFIG_BONDING=m CONFIG_DUMMY=m # CONFIG_EQUALIZER is not set # CONFIG_NET_FC is not set -CONFIG_MII=m CONFIG_IFB=m # CONFIG_NET_TEAM is not set CONFIG_MACVLAN=m @@ -1812,6 +1882,7 @@ CONFIG_IMQ_NUM_DEVS=2 CONFIG_TUN=m CONFIG_VETH=m CONFIG_VIRTIO_NET=m +CONFIG_NLMON=m CONFIG_SUNGEM_PHY=m # CONFIG_ARCNET is not set CONFIG_ATM_DRIVERS=y @@ -1850,6 +1921,7 @@ CONFIG_ATM_SOLOS=m # CONFIG_VHOST_NET=m CONFIG_VHOST_RING=m +CONFIG_VHOST=m # # Distributed Switch Architecture drivers @@ -1879,6 +1951,7 @@ CONFIG_LANCE=m CONFIG_PCNET32=m CONFIG_PCMCIA_NMCLAN=m CONFIG_NI65=m +CONFIG_NET_VENDOR_ARC=y CONFIG_NET_VENDOR_ATHEROS=y CONFIG_ATL2=m CONFIG_ATL1=m @@ -1954,6 +2027,9 @@ CONFIG_IXGBE=m CONFIG_IXGBE_HWMON=y CONFIG_IXGBE_DCA=y CONFIG_IXGBEVF=m +CONFIG_I40E=m +CONFIG_I40E_VXLAN=y +CONFIG_I40EVF=m CONFIG_NET_VENDOR_I825XX=y CONFIG_IP1000=m CONFIG_JME=m @@ -1968,6 +2044,7 @@ CONFIG_NET_VENDOR_MELLANOX=y CONFIG_MLX4_EN=m CONFIG_MLX4_CORE=m CONFIG_MLX4_DEBUG=y +# CONFIG_MLX5_CORE is not set CONFIG_NET_VENDOR_MICREL=y CONFIG_KS8842=m CONFIG_KS8851_MLL=m @@ -2007,6 +2084,7 @@ CONFIG_8139TOO=m CONFIG_8139TOO_8129=y # CONFIG_8139_OLD_RX_RESET is not set CONFIG_R8169=m +CONFIG_SH_ETH=m CONFIG_NET_VENDOR_RDC=y CONFIG_R6040=m CONFIG_NET_VENDOR_SEEQ=y @@ -2022,6 +2100,8 @@ CONFIG_NET_VENDOR_SMSC=y CONFIG_SMC9194=m CONFIG_PCMCIA_SMC91C92=m CONFIG_EPIC100=m +CONFIG_SMSC911X=m +# CONFIG_SMSC911X_ARCH_HOOKS is not set CONFIG_SMSC9420=m CONFIG_NET_VENDOR_STMICRO=y CONFIG_STMMAC_ETH=m @@ -2108,8 +2188,11 @@ CONFIG_USB_NET_AX88179_178A=m CONFIG_USB_NET_CDCETHER=m CONFIG_USB_NET_CDC_EEM=m CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_HUAWEI_CDC_NCM=m CONFIG_USB_NET_CDC_MBIM=m CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m CONFIG_USB_NET_SMSC75XX=m CONFIG_USB_NET_SMSC95XX=m CONFIG_USB_NET_GL620A=m @@ -2169,7 +2252,9 @@ CONFIG_ATH9K=m CONFIG_ATH9K_PCI=y CONFIG_ATH9K_AHB=y # CONFIG_ATH9K_DEBUGFS is not set +# CONFIG_ATH9K_WOW is not set # CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set +CONFIG_ATH9K_RFKILL=y CONFIG_ATH9K_HTC=m # CONFIG_ATH9K_HTC_DEBUGFS is not set CONFIG_CARL9170=m @@ -2180,9 +2265,16 @@ CONFIG_CARL9170_WPC=y CONFIG_AR5523=m CONFIG_WIL6210=m CONFIG_WIL6210_ISR_COR=y +CONFIG_WIL6210_TRACING=y +CONFIG_ATH10K=m +CONFIG_ATH10K_PCI=m +# CONFIG_ATH10K_DEBUG is not set +# CONFIG_ATH10K_DEBUGFS is not set +# CONFIG_ATH10K_TRACING is not set +CONFIG_WCN36XX=m +# CONFIG_WCN36XX_DEBUGFS is not set CONFIG_B43=m CONFIG_B43_BCMA=y -CONFIG_B43_BCMA_EXTRA=y CONFIG_B43_SSB=y CONFIG_B43_PCI_AUTOSELECT=y CONFIG_B43_PCICORE_AUTOSELECT=y @@ -2241,7 +2333,6 @@ CONFIG_IWLWIFI_OPMODE_MODULAR=y # # CONFIG_IWLWIFI_DEBUG is not set # CONFIG_IWLWIFI_DEVICE_TRACING is not set -CONFIG_IWLWIFI_P2P=y CONFIG_IWLEGACY=m CONFIG_IWL4965=m CONFIG_IWL3945=m @@ -2283,10 +2374,12 @@ CONFIG_RT73USB=m CONFIG_RT2800USB=m CONFIG_RT2800USB_RT33XX=y CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT3573=y CONFIG_RT2800USB_RT53XX=y CONFIG_RT2800USB_RT55XX=y CONFIG_RT2800USB_UNKNOWN=y CONFIG_RT2800_LIB=m +CONFIG_RT2800_LIB_MMIO=m CONFIG_RT2X00_LIB_MMIO=m CONFIG_RT2X00_LIB_PCI=m CONFIG_RT2X00_LIB_USB=m @@ -2295,14 +2388,17 @@ CONFIG_RT2X00_LIB_FIRMWARE=y CONFIG_RT2X00_LIB_CRYPTO=y CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set -CONFIG_RTLWIFI=m -# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTL_CARDS=m CONFIG_RTL8192CE=m CONFIG_RTL8192SE=m CONFIG_RTL8192DE=m CONFIG_RTL8723AE=m CONFIG_RTL8188EE=m CONFIG_RTL8192CU=m +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_PCI=m +CONFIG_RTLWIFI_USB=m +# CONFIG_RTLWIFI_DEBUG is not set CONFIG_RTL8192C_COMMON=m CONFIG_WL_TI=y CONFIG_WL1251=m @@ -2318,6 +2414,8 @@ CONFIG_MWIFIEX=m CONFIG_MWIFIEX_SDIO=m CONFIG_MWIFIEX_PCIE=m CONFIG_MWIFIEX_USB=m +CONFIG_CW1200=m +CONFIG_CW1200_WLAN_SDIO=m # # Enable WiMAX (Networking options) to see the WiMAX drivers @@ -2422,8 +2520,8 @@ CONFIG_HISAX_FRITZ_PCIPNP=m CONFIG_ISDN_CAPI=m CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y CONFIG_CAPI_TRACE=y -CONFIG_ISDN_CAPI_MIDDLEWARE=y CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_MIDDLEWARE=y CONFIG_ISDN_CAPI_CAPIDRV=m # @@ -2569,11 +2667,13 @@ CONFIG_INPUT_GPIO_ROTARY_ENCODER=m # CONFIG_INPUT_IMS_PCU is not set # CONFIG_INPUT_CMA3000 is not set CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y +CONFIG_INPUT_IDEAPAD_SLIDEBAR=m # # Hardware I/O ports # CONFIG_SERIO=y +CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y CONFIG_SERIO_I8042=y CONFIG_SERIO_SERPORT=y # CONFIG_SERIO_CT82C710 is not set @@ -2584,6 +2684,7 @@ CONFIG_SERIO_RAW=m CONFIG_SERIO_ALTERA_PS2=m # CONFIG_SERIO_PS2MULT is not set CONFIG_SERIO_ARC_PS2=m +CONFIG_HYPERV_KEYBOARD=m # CONFIG_GAMEPORT is not set # @@ -2614,7 +2715,6 @@ CONFIG_N_HDLC=m CONFIG_N_GSM=m # CONFIG_TRACE_SINK is not set # CONFIG_DEVKMEM is not set -# CONFIG_STALDRV is not set # # Serial drivers @@ -2657,6 +2757,7 @@ CONFIG_SERIAL_ARC=m CONFIG_SERIAL_ARC_NR_PORTS=1 CONFIG_SERIAL_RP2=m CONFIG_SERIAL_RP2_NR_UARTS=32 +CONFIG_SERIAL_FSL_LPUART=m # CONFIG_TTY_PRINTK is not set CONFIG_PRINTER=m CONFIG_LP_CONSOLE=y @@ -2709,7 +2810,15 @@ CONFIG_I2C=m CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y CONFIG_I2C_CHARDEV=m -# CONFIG_I2C_MUX is not set +CONFIG_I2C_MUX=m + +# +# Multiplexer I2C Chip support +# +CONFIG_I2C_MUX_GPIO=m +CONFIG_I2C_MUX_PCA9541=m +CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_SMBUS=m CONFIG_I2C_ALGOBIT=m @@ -2754,7 +2863,6 @@ CONFIG_I2C_DESIGNWARE_PLATFORM=m # CONFIG_I2C_DESIGNWARE_PCI is not set # CONFIG_I2C_EG20T is not set # CONFIG_I2C_GPIO is not set -# CONFIG_I2C_INTEL_MID is not set # CONFIG_I2C_OCORES is not set CONFIG_I2C_PCA_PLATFORM=m # CONFIG_I2C_PXA_PCI is not set @@ -2767,6 +2875,7 @@ CONFIG_I2C_SIMTEC=m CONFIG_I2C_DIOLAN_U2C=m CONFIG_I2C_PARPORT=m CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_ROBOTFUZZ_OSIF=m # CONFIG_I2C_TAOS_EVM is not set CONFIG_I2C_TINY_USB=m CONFIG_I2C_VIPERBOARD=m @@ -2781,11 +2890,6 @@ CONFIG_SCx200_ACB=m # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set # CONFIG_SPI is not set - -# -# Qualcomm MSM SSBI bus support -# -# CONFIG_SSBI is not set CONFIG_HSI=m CONFIG_HSI_BOARDINFO=y @@ -2821,9 +2925,18 @@ CONFIG_PTP_1588_CLOCK=m # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. # CONFIG_PTP_1588_CLOCK_PCH=m +CONFIG_PINCTRL=y + +# +# Pin controllers +# +# CONFIG_PINMUX is not set +# CONFIG_PINCONF is not set +# CONFIG_DEBUG_PINCTRL is not set +CONFIG_PINCTRL_BAYTRAIL=y CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y -CONFIG_GPIO_DEVRES=y CONFIG_GPIOLIB=y +CONFIG_GPIO_DEVRES=y CONFIG_GPIO_ACPI=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y @@ -2833,6 +2946,8 @@ CONFIG_GPIO_SYSFS=y # # CONFIG_GPIO_GENERIC_PLATFORM is not set # CONFIG_GPIO_IT8761E is not set +CONFIG_GPIO_F7188X=m +CONFIG_GPIO_SCH311X=m CONFIG_GPIO_TS5500=m CONFIG_GPIO_SCH=m CONFIG_GPIO_ICH=m @@ -2853,7 +2968,7 @@ CONFIG_GPIO_ICH=m # # CONFIG_GPIO_CS5535 is not set # CONFIG_GPIO_AMD8111 is not set -# CONFIG_GPIO_LANGWELL is not set +# CONFIG_GPIO_INTEL_MID is not set # CONFIG_GPIO_PCH is not set # CONFIG_GPIO_ML_IOH is not set # CONFIG_GPIO_RDC321X is not set @@ -2861,12 +2976,15 @@ CONFIG_GPIO_ICH=m # # SPI GPIO expanders: # -# CONFIG_GPIO_MCP23S08 is not set # # AC97 GPIO expanders: # +# +# LPC GPIO expanders: +# + # # MODULbus GPIO expanders: # @@ -2917,12 +3035,14 @@ CONFIG_GENERIC_ADC_BATTERY=m # CONFIG_BATTERY_BQ27x00 is not set # CONFIG_BATTERY_MAX17040 is not set # CONFIG_BATTERY_MAX17042 is not set +# CONFIG_CHARGER_ISP1704 is not set # CONFIG_CHARGER_MAX8903 is not set # CONFIG_CHARGER_LP8727 is not set # CONFIG_CHARGER_GPIO is not set # CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24735 is not set # CONFIG_CHARGER_SMB347 is not set -# CONFIG_BATTERY_GOLDFISH is not set CONFIG_POWER_RESET=y CONFIG_POWER_AVS=y CONFIG_HWMON=y @@ -2962,10 +3082,12 @@ CONFIG_SENSORS_F71882FG=m CONFIG_SENSORS_F75375S=m CONFIG_SENSORS_FSCHMD=m CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_G762=m CONFIG_SENSORS_GL518SM=m CONFIG_SENSORS_GL520SM=m # CONFIG_SENSORS_GPIO_FAN is not set CONFIG_SENSORS_HIH6130=m +CONFIG_SENSORS_HTU21=m CONFIG_SENSORS_CORETEMP=m CONFIG_SENSORS_IBMAEM=m CONFIG_SENSORS_IBMPEX=m @@ -3069,9 +3191,14 @@ CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y CONFIG_THERMAL_GOV_FAIR_SHARE=y CONFIG_THERMAL_GOV_STEP_WISE=y CONFIG_THERMAL_GOV_USER_SPACE=y -CONFIG_CPU_THERMAL=y CONFIG_THERMAL_EMULATION=y CONFIG_INTEL_POWERCLAMP=m +CONFIG_X86_PKG_TEMP_THERMAL=m +CONFIG_ACPI_INT3403_THERMAL=m + +# +# Texas Instruments thermal drivers +# CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y CONFIG_WATCHDOG_NOWAYOUT=y @@ -3080,6 +3207,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y # Watchdog Device Drivers # CONFIG_SOFT_WATCHDOG=m +CONFIG_DW_WATCHDOG=m CONFIG_RETU_WATCHDOG=m CONFIG_ACQUIRE_WDT=m CONFIG_ADVANTECH_WDT=m @@ -3119,6 +3247,7 @@ CONFIG_W83877F_WDT=m CONFIG_W83977F_WDT=m CONFIG_MACHZ_WDT=m CONFIG_SBC_EPX_C3_WATCHDOG=m +CONFIG_MEN_A21_WDT=m CONFIG_XEN_WDT=m # @@ -3166,6 +3295,7 @@ CONFIG_BCMA=m CONFIG_BCMA_BLOCKIO=y CONFIG_BCMA_HOST_PCI_POSSIBLE=y CONFIG_BCMA_HOST_PCI=y +CONFIG_BCMA_HOST_SOC=y CONFIG_BCMA_DRIVER_GMAC_CMN=y CONFIG_BCMA_DRIVER_GPIO=y # CONFIG_BCMA_DEBUG is not set @@ -3181,6 +3311,7 @@ CONFIG_MFD_CS5535=m CONFIG_LPC_ICH=m CONFIG_LPC_SCH=m # CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_KEMPLD is not set CONFIG_MFD_VIPERBOARD=m CONFIG_MFD_RETU=m # CONFIG_MFD_PCF50633 is not set @@ -3193,6 +3324,7 @@ CONFIG_MFD_SM501_GPIO=y # CONFIG_ABX500_CORE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_MFD_LP3943 is not set # CONFIG_TPS6105X is not set # CONFIG_TPS65010 is not set # CONFIG_TPS6507X is not set @@ -3232,7 +3364,6 @@ CONFIG_VIDEOBUF2_CORE=m CONFIG_VIDEOBUF2_MEMOPS=m CONFIG_VIDEOBUF2_DMA_CONTIG=m CONFIG_VIDEOBUF2_VMALLOC=m -CONFIG_VIDEO_V4L2_INT_DEVICE=m CONFIG_DVB_CORE=m CONFIG_DVB_NET=y CONFIG_TTPCI_EEPROM=m @@ -3315,6 +3446,7 @@ CONFIG_USB_GSPCA_SQ905=m CONFIG_USB_GSPCA_SQ905C=m CONFIG_USB_GSPCA_SQ930X=m CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STK1135=m CONFIG_USB_GSPCA_STV0680=m CONFIG_USB_GSPCA_SUNPLUS=m CONFIG_USB_GSPCA_T613=m @@ -3331,7 +3463,7 @@ CONFIG_VIDEO_CPIA2=m CONFIG_USB_ZR364XX=m CONFIG_USB_STKWEBCAM=m CONFIG_USB_S2255=m -CONFIG_USB_SN9C102=m +CONFIG_VIDEO_USBTV=m # # Analog TV USB devices @@ -3343,8 +3475,9 @@ CONFIG_VIDEO_PVRUSB2_DVB=y CONFIG_VIDEO_HDPVR=m CONFIG_VIDEO_TLG2300=m CONFIG_VIDEO_USBVISION=m -CONFIG_VIDEO_STK1160=m +CONFIG_VIDEO_STK1160_COMMON=m CONFIG_VIDEO_STK1160_AC97=y +CONFIG_VIDEO_STK1160=m # # Analog/digital TV USB devices @@ -3413,6 +3546,7 @@ CONFIG_DVB_B2C2_FLEXCOP_USB=m # Webcam, TV (analog/digital) USB devices # CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_V4L2=m CONFIG_VIDEO_EM28XX_ALSA=m CONFIG_VIDEO_EM28XX_DVB=m CONFIG_VIDEO_EM28XX_RC=m @@ -3454,6 +3588,7 @@ CONFIG_VIDEO_CX88=m CONFIG_VIDEO_CX88_ALSA=m CONFIG_VIDEO_CX88_BLACKBIRD=m CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_ENABLE_VP3054=y CONFIG_VIDEO_CX88_VP3054=m CONFIG_VIDEO_CX88_MPEG=m CONFIG_VIDEO_BT848=m @@ -3489,12 +3624,15 @@ CONFIG_VIDEO_CAFE_CCIC=m # CONFIG_VIDEO_VIA_CAMERA is not set CONFIG_VIDEO_TIMBERDALE=m CONFIG_SOC_CAMERA=m +CONFIG_SOC_CAMERA_SCALE_CROP=m CONFIG_SOC_CAMERA_PLATFORM=m +CONFIG_VIDEO_RCAR_VIN=m CONFIG_VIDEO_SH_MOBILE_CSI2=m CONFIG_VIDEO_SH_MOBILE_CEU=m CONFIG_V4L_MEM2MEM_DRIVERS=y CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m CONFIG_VIDEO_SH_VEU=m +CONFIG_VIDEO_RENESAS_VSP1=m # CONFIG_V4L_TEST_DRIVERS is not set # @@ -3522,7 +3660,6 @@ CONFIG_VIDEO_SAA7146=m CONFIG_VIDEO_SAA7146_VV=m CONFIG_SMS_SIANO_MDTV=m CONFIG_SMS_SIANO_RC=y -# CONFIG_SMS_SIANO_DEBUGFS is not set # # Media ancillary drivers (tuners, sensors, i2c, frontends) @@ -3595,7 +3732,12 @@ CONFIG_VIDEO_UPD64031A=m CONFIG_VIDEO_UPD64083=m # -# Miscelaneous helper chips +# Audio/Video compression chips +# +CONFIG_VIDEO_SAA6752HS=m + +# +# Miscellaneous helper chips # CONFIG_VIDEO_M52790=m @@ -3646,6 +3788,7 @@ CONFIG_MEDIA_TUNER_FC0013=m CONFIG_MEDIA_TUNER_TDA18212=m CONFIG_MEDIA_TUNER_E4000=m CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_M88TS2022=m CONFIG_MEDIA_TUNER_TUA9001=m CONFIG_MEDIA_TUNER_IT913X=m CONFIG_MEDIA_TUNER_R820T=m @@ -3657,6 +3800,7 @@ CONFIG_DVB_STB0899=m CONFIG_DVB_STB6100=m CONFIG_DVB_STV090x=m CONFIG_DVB_STV6110x=m +CONFIG_DVB_M88DS3103=m # # Multistandard (cable + terrestrial) frontends @@ -3687,7 +3831,7 @@ CONFIG_DVB_TUNER_CX24113=m CONFIG_DVB_TDA826X=m CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m -CONFIG_DVB_M88DS3103=m +CONFIG_DVB_CX24117=m CONFIG_DVB_M88DC2800=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m @@ -3794,12 +3938,14 @@ CONFIG_AGP_SIS=y # CONFIG_AGP_SWORKS is not set CONFIG_AGP_VIA=y # CONFIG_AGP_EFFICEON is not set +CONFIG_INTEL_GTT=y CONFIG_VGA_ARB=y CONFIG_VGA_ARB_MAX_GPUS=16 CONFIG_VGA_SWITCHEROO=y CONFIG_DRM=m CONFIG_DRM_USB=m CONFIG_DRM_KMS_HELPER=m +CONFIG_DRM_KMS_FB_HELPER=y # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set CONFIG_DRM_TTM=m @@ -3820,6 +3966,9 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y CONFIG_DRM_I810=m CONFIG_DRM_I915=m CONFIG_DRM_I915_KMS=y +CONFIG_DRM_I915_FBDEV=y +CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y +# CONFIG_DRM_I915_UMS is not set CONFIG_DRM_MGA=m CONFIG_DRM_SIS=m CONFIG_DRM_VIA=m @@ -3834,6 +3983,7 @@ CONFIG_DRM_AST=m CONFIG_DRM_MGAG200=m CONFIG_DRM_CIRRUS_QEMU=m CONFIG_DRM_QXL=m +CONFIG_DRM_BOCHS=m CONFIG_VGASTATE=m CONFIG_VIDEO_OUTPUT_CONTROL=m CONFIG_HDMI=y @@ -3874,6 +4024,7 @@ CONFIG_FB_VESA=y CONFIG_FB_EFI=y # CONFIG_FB_N411 is not set CONFIG_FB_HGA=m +CONFIG_FB_OPENCORES=m # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_NVIDIA is not set CONFIG_FB_RIVA=m @@ -3931,6 +4082,7 @@ CONFIG_XEN_FBDEV_FRONTEND=m # CONFIG_FB_BROADSHEET is not set # CONFIG_FB_AUO_K190X is not set CONFIG_FB_HYPERV=m +CONFIG_FB_SIMPLE=y # CONFIG_EXYNOS_VIDEO is not set CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_LCD_CLASS_DEVICE=m @@ -3943,9 +4095,12 @@ CONFIG_BACKLIGHT_APPLE=m # CONFIG_BACKLIGHT_SAHARA is not set # CONFIG_BACKLIGHT_ADP8860 is not set # CONFIG_BACKLIGHT_ADP8870 is not set -# CONFIG_BACKLIGHT_LM3630 is not set +# CONFIG_BACKLIGHT_LM3630A is not set # CONFIG_BACKLIGHT_LM3639 is not set # CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_GPIO is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set # # Console display driver support @@ -3957,9 +4112,6 @@ CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set @@ -3983,6 +4135,7 @@ CONFIG_SND_SEQUENCER_OSS=y CONFIG_SND_HRTIMER=m CONFIG_SND_SEQ_HRTIMER_DEFAULT=y CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_MAX_CARDS=32 # CONFIG_SND_SUPPORT_OLD_API is not set CONFIG_SND_VERBOSE_PROCFS=y CONFIG_SND_VERBOSE_PRINTK=y @@ -4052,7 +4205,6 @@ CONFIG_SND_SSCAPE=m CONFIG_SND_WAVEFRONT=m CONFIG_SND_MSND_PINNACLE=m CONFIG_SND_MSND_CLASSIC=m -CONFIG_SND_TEA575X=m CONFIG_SND_PCI=y CONFIG_SND_AD1889=m CONFIG_SND_ALS300=m @@ -4099,9 +4251,7 @@ CONFIG_SND_ENS1371=m CONFIG_SND_ES1938=m CONFIG_SND_ES1968=m CONFIG_SND_ES1968_INPUT=y -CONFIG_SND_ES1968_RADIO=y CONFIG_SND_FM801=m -CONFIG_SND_FM801_TEA575X_BOOL=y CONFIG_SND_HDA_INTEL=m CONFIG_SND_HDA_PREALLOC_SIZE=64 CONFIG_SND_HDA_HWDEP=y @@ -4110,19 +4260,20 @@ CONFIG_SND_HDA_INPUT_BEEP=y CONFIG_SND_HDA_INPUT_BEEP_MODE=1 CONFIG_SND_HDA_INPUT_JACK=y # CONFIG_SND_HDA_PATCH_LOADER is not set -CONFIG_SND_HDA_CODEC_REALTEK=y -CONFIG_SND_HDA_CODEC_ANALOG=y -CONFIG_SND_HDA_CODEC_SIGMATEL=y -CONFIG_SND_HDA_CODEC_VIA=y -CONFIG_SND_HDA_CODEC_HDMI=y -CONFIG_SND_HDA_CODEC_CIRRUS=y -CONFIG_SND_HDA_CODEC_CONEXANT=y -CONFIG_SND_HDA_CODEC_CA0110=y -CONFIG_SND_HDA_CODEC_CA0132=y +CONFIG_SND_HDA_CODEC_REALTEK=m +CONFIG_SND_HDA_CODEC_ANALOG=m +CONFIG_SND_HDA_CODEC_SIGMATEL=m +CONFIG_SND_HDA_CODEC_VIA=m +CONFIG_SND_HDA_CODEC_HDMI=m +CONFIG_SND_HDA_I915=y +CONFIG_SND_HDA_CODEC_CIRRUS=m +CONFIG_SND_HDA_CODEC_CONEXANT=m +CONFIG_SND_HDA_CODEC_CA0110=m +CONFIG_SND_HDA_CODEC_CA0132=m # CONFIG_SND_HDA_CODEC_CA0132_DSP is not set -CONFIG_SND_HDA_CODEC_CMEDIA=y -CONFIG_SND_HDA_CODEC_SI3054=y -CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_CODEC_CMEDIA=m +CONFIG_SND_HDA_CODEC_SI3054=m +CONFIG_SND_HDA_GENERIC=m CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 CONFIG_SND_HDSP=m CONFIG_SND_HDSPM=m @@ -4158,8 +4309,10 @@ CONFIG_SND_USB_CAIAQ=m CONFIG_SND_USB_CAIAQ_INPUT=y CONFIG_SND_USB_US122L=m CONFIG_SND_USB_6FIRE=m +CONFIG_SND_USB_HIFACE=m CONFIG_SND_FIREWIRE=y CONFIG_SND_FIREWIRE_LIB=m +# CONFIG_SND_DICE is not set CONFIG_SND_FIREWIRE_SPEAKERS=m # CONFIG_SND_ISIGHT is not set # CONFIG_SND_SCS1X is not set @@ -4195,8 +4348,10 @@ CONFIG_HID_CYPRESS=y # CONFIG_HID_DRAGONRISE is not set # CONFIG_HID_EMS_FF is not set # CONFIG_HID_ELECOM is not set +# CONFIG_HID_ELO is not set CONFIG_HID_EZKEY=y # CONFIG_HID_HOLTEK is not set +# CONFIG_HID_HUION is not set CONFIG_HID_KEYTOUCH=m CONFIG_HID_KYE=y # CONFIG_HID_UCLOGIC is not set @@ -4228,7 +4383,6 @@ CONFIG_HID_PICOLCD_LCD=y CONFIG_HID_PICOLCD_LEDS=y CONFIG_HID_PICOLCD_CIR=y # CONFIG_HID_PRIMAX is not set -# CONFIG_HID_PS3REMOTE is not set CONFIG_HID_ROCCAT=m CONFIG_HID_SAITEK=m CONFIG_HID_SAMSUNG=m @@ -4245,6 +4399,7 @@ CONFIG_HID_THINGM=m # CONFIG_HID_THRUSTMASTER is not set # CONFIG_HID_WACOM is not set # CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_XINMO is not set # CONFIG_HID_ZEROPLUS is not set CONFIG_HID_ZYDACRON=m CONFIG_HID_SENSOR_HUB=m @@ -4260,9 +4415,7 @@ CONFIG_USB_HIDDEV=y # I2C HID support # CONFIG_I2C_HID=m -CONFIG_USB_ARCH_HAS_OHCI=y -CONFIG_USB_ARCH_HAS_EHCI=y -CONFIG_USB_ARCH_HAS_XHCI=y +CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_SUPPORT=y CONFIG_USB_COMMON=y CONFIG_USB_ARCH_HAS_HCD=y @@ -4275,7 +4428,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # CONFIG_USB_DEFAULT_PERSIST=y # CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set +CONFIG_USB_OTG=y # CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set CONFIG_USB_MON=m @@ -4289,7 +4442,6 @@ CONFIG_USB_WUSB_CBAF=m # CONFIG_USB_C67X00_HCD is not set CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_PLATFORM=m -# CONFIG_USB_XHCI_HCD_DEBUGGING is not set CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y @@ -4299,11 +4451,11 @@ CONFIG_USB_EHCI_HCD_PLATFORM=y # CONFIG_USB_ISP116X_HCD is not set # CONFIG_USB_ISP1760_HCD is not set CONFIG_USB_ISP1362_HCD=m +# CONFIG_USB_FUSBH200_HCD is not set +# CONFIG_USB_FOTG210_HCD is not set CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PCI=m CONFIG_USB_OHCI_HCD_PLATFORM=y -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_UHCI_HCD=y # CONFIG_USB_U132_HCD is not set CONFIG_USB_SL811_HCD=m @@ -4314,6 +4466,7 @@ CONFIG_USB_WHCI_HCD=m CONFIG_USB_HWA_HCD=m CONFIG_USB_HCD_BCMA=m CONFIG_USB_HCD_SSB=m +# CONFIG_USB_HCD_TEST_MODE is not set # # USB Device Class drivers @@ -4352,9 +4505,22 @@ CONFIG_USB_STORAGE_ENE_UB6250=m # CONFIG_USB_MDC800=m CONFIG_USB_MICROTEK=m +# CONFIG_USB_MUSB_HDRC is not set CONFIG_USB_DWC3=m CONFIG_USB_DWC3_HOST=y + +# +# Platform Glue Driver Support +# +# CONFIG_USB_DWC3_EXYNOS is not set +CONFIG_USB_DWC3_PCI=m +CONFIG_USB_DWC3_KEYSTONE=m + +# +# Debugging features +# # CONFIG_USB_DWC3_DEBUG is not set +# CONFIG_USB_DWC2 is not set CONFIG_USB_CHIPIDEA=m # CONFIG_USB_CHIPIDEA_HOST is not set # CONFIG_USB_CHIPIDEA_DEBUG is not set @@ -4365,6 +4531,7 @@ CONFIG_USB_CHIPIDEA=m CONFIG_USB_USS720=m CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_SIMPLE=m CONFIG_USB_SERIAL_AIRCABLE=m CONFIG_USB_SERIAL_ARK3116=m CONFIG_USB_SERIAL_BELKIN=m @@ -4375,7 +4542,6 @@ CONFIG_USB_SERIAL_CP210X=m CONFIG_USB_SERIAL_CYPRESS_M8=m # CONFIG_USB_SERIAL_EMPEG is not set CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_FUNSOFT=m CONFIG_USB_SERIAL_VISOR=m CONFIG_USB_SERIAL_IPAQ=m CONFIG_USB_SERIAL_IR=m @@ -4394,16 +4560,14 @@ CONFIG_USB_SERIAL_MCT_U232=m CONFIG_USB_SERIAL_MOS7720=m CONFIG_USB_SERIAL_MOS7715_PARPORT=y CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_MOTOROLA=m +CONFIG_USB_SERIAL_MXUPORT=m # CONFIG_USB_SERIAL_NAVMAN is not set CONFIG_USB_SERIAL_PL2303=m CONFIG_USB_SERIAL_OTI6858=m CONFIG_USB_SERIAL_QCAUX=m CONFIG_USB_SERIAL_QUALCOMM=m CONFIG_USB_SERIAL_SPCP8X5=m -# CONFIG_USB_SERIAL_HP4X is not set # CONFIG_USB_SERIAL_SAFE is not set -CONFIG_USB_SERIAL_SIEMENS_MPI=m CONFIG_USB_SERIAL_SIERRAWIRELESS=m # CONFIG_USB_SERIAL_SYMBOL is not set # CONFIG_USB_SERIAL_TI is not set @@ -4413,9 +4577,7 @@ CONFIG_USB_SERIAL_WWAN=m CONFIG_USB_SERIAL_OPTION=m # CONFIG_USB_SERIAL_OMNINET is not set # CONFIG_USB_SERIAL_OPTICON is not set -# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set # CONFIG_USB_SERIAL_XSENS_MT is not set -# CONFIG_USB_SERIAL_ZIO is not set # CONFIG_USB_SERIAL_WISHBONE is not set CONFIG_USB_SERIAL_ZTE=m CONFIG_USB_SERIAL_SSU100=m @@ -4444,6 +4606,7 @@ CONFIG_USB_SISUSBVGA_CON=y # CONFIG_USB_TRANCEVIBRATOR is not set CONFIG_USB_IOWARRIOR=m # CONFIG_USB_TEST is not set +CONFIG_USB_EHSET_TEST_FIXTURE=m # CONFIG_USB_ISIGHTFW is not set CONFIG_USB_YUREX=m CONFIG_USB_EZUSB_FX2=m @@ -4453,7 +4616,18 @@ CONFIG_USB_SPEEDTOUCH=m CONFIG_USB_CXACRU=m CONFIG_USB_UEAGLEATM=m CONFIG_USB_XUSBATM=m -# CONFIG_USB_PHY is not set + +# +# USB Physical Layer drivers +# +CONFIG_USB_PHY=y +CONFIG_USB_OTG_FSM=m +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_SAMSUNG_USB2PHY is not set +# CONFIG_SAMSUNG_USB3PHY is not set +# CONFIG_USB_GPIO_VBUS is not set +# CONFIG_USB_ISP1301 is not set +# CONFIG_USB_RCAR_PHY is not set # CONFIG_USB_GADGET is not set CONFIG_UWB=m CONFIG_UWB_HWA=m @@ -4499,6 +4673,7 @@ CONFIG_MEMSTICK=m # # CONFIG_MEMSTICK_UNSAFE_RESUME is not set CONFIG_MSPRO_BLOCK=m +CONFIG_MS_BLOCK=m # # MemoryStick Host Controller Drivers @@ -4524,14 +4699,15 @@ CONFIG_LEDS_LP55XX_COMMON=m CONFIG_LEDS_LP5521=m CONFIG_LEDS_LP5523=m CONFIG_LEDS_LP5562=m +CONFIG_LEDS_LP8501=m CONFIG_LEDS_CLEVO_MAIL=m CONFIG_LEDS_PCA955X=m -CONFIG_LEDS_PCA9633=m +CONFIG_LEDS_PCA963X=m +CONFIG_LEDS_PCA9685=m CONFIG_LEDS_BD2802=m CONFIG_LEDS_INTEL_SS4200=m CONFIG_LEDS_LT3593=m CONFIG_LEDS_DELL_NETBOOKS=m -# CONFIG_LEDS_RENESAS_TPU is not set CONFIG_LEDS_TCA6507=m CONFIG_LEDS_LM355x=m CONFIG_LEDS_OT200=m @@ -4605,7 +4781,9 @@ CONFIG_RTC_DRV_MAX6900=m CONFIG_RTC_DRV_RS5C372=m CONFIG_RTC_DRV_ISL1208=m CONFIG_RTC_DRV_ISL12022=m +CONFIG_RTC_DRV_ISL12057=m CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF2127=m CONFIG_RTC_DRV_PCF8523=m CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8583=m @@ -4644,6 +4822,7 @@ CONFIG_RTC_DRV_DS2404=m # # on-CPU RTC drivers # +CONFIG_RTC_DRV_MOXART=m # # HID Sensor RTC drivers @@ -4657,8 +4836,9 @@ CONFIG_DMADEVICES=y # # CONFIG_INTEL_MID_DMAC is not set CONFIG_INTEL_IOATDMA=m +CONFIG_DW_DMAC_CORE=m CONFIG_DW_DMAC=m -# CONFIG_DW_DMAC_BIG_ENDIAN_IO is not set +CONFIG_DW_DMAC_PCI=m CONFIG_TIMB_DMA=m CONFIG_PCH_DMA=m CONFIG_DMA_ENGINE=y @@ -4669,17 +4849,18 @@ CONFIG_DMA_ACPI=y # CONFIG_ASYNC_TX_DMA=y # CONFIG_DMATEST is not set +CONFIG_DMA_ENGINE_RAID=y CONFIG_DCA=m # CONFIG_AUXDISPLAY is not set CONFIG_UIO=m # CONFIG_UIO_CIF is not set -# CONFIG_UIO_PDRV is not set # CONFIG_UIO_PDRV_GENIRQ is not set # CONFIG_UIO_DMEM_GENIRQ is not set CONFIG_UIO_AEC=m CONFIG_UIO_SERCOS3=m CONFIG_UIO_PCI_GENERIC=m # CONFIG_UIO_NETX is not set +# CONFIG_UIO_MF624 is not set # CONFIG_VFIO is not set CONFIG_VIRT_DRIVERS=y CONFIG_VIRTIO=y @@ -4730,14 +4911,16 @@ CONFIG_USBIP_HOST=m # CONFIG_PRISM2_USB is not set CONFIG_ECHO=m # CONFIG_COMEDI is not set -# CONFIG_ASUS_OLED is not set # CONFIG_PANEL is not set # CONFIG_R8187SE is not set # CONFIG_RTL8192U is not set # CONFIG_RTLLIB is not set # CONFIG_R8712U is not set +# CONFIG_R8188EU is not set +# CONFIG_R8821AE is not set CONFIG_RTS5139=m # CONFIG_RTS5139_DEBUG is not set +# CONFIG_RTS5208 is not set # CONFIG_TRANZPORT is not set # CONFIG_IDE_PHISON is not set # CONFIG_LINE6_USB is not set @@ -4812,10 +4995,7 @@ CONFIG_RTS5139=m # Triggers - standalone # # CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set -# CONFIG_IIO_GPIO_TRIGGER is not set -# CONFIG_IIO_SYSFS_TRIGGER is not set # CONFIG_IIO_SIMPLE_DUMMY is not set -# CONFIG_ZSMALLOC is not set # CONFIG_WLAGS49_H2 is not set # CONFIG_WLAGS49_H25 is not set # CONFIG_FB_SM7XX is not set @@ -4840,17 +5020,19 @@ CONFIG_RTS5139=m # CONFIG_ANDROID is not set # CONFIG_USB_WPAN_HCD is not set # CONFIG_WIMAX_GDM72XX is not set -# CONFIG_CSR_WIFI is not set +CONFIG_LTE_GDM724X=m # CONFIG_NET_VENDOR_SILICOM is not set # CONFIG_CED1401 is not set # CONFIG_DGRP is not set # CONFIG_FIREWIRE_SERIAL is not set -# CONFIG_USB_DWC2 is not set +# CONFIG_LUSTRE_FS is not set +# CONFIG_XILLYBUS is not set +# CONFIG_DGNC is not set +# CONFIG_DGAP is not set CONFIG_X86_PLATFORM_DEVICES=y CONFIG_ACER_WMI=m CONFIG_ACERHDF=m CONFIG_ASUS_LAPTOP=m -CONFIG_CHROMEOS_LAPTOP=m CONFIG_DELL_LAPTOP=m CONFIG_DELL_WMI=m CONFIG_DELL_WMI_AIO=m @@ -4860,6 +5042,7 @@ CONFIG_FUJITSU_LAPTOP=m CONFIG_AMILO_RFKILL=m CONFIG_TC1100_WMI=m CONFIG_HP_ACCEL=m +# CONFIG_HP_WIRELESS is not set CONFIG_HP_WMI=m CONFIG_MSI_LAPTOP=m CONFIG_PANASONIC_LAPTOP=m @@ -4894,7 +5077,10 @@ CONFIG_MXM_WMI=m CONFIG_INTEL_OAKTRAIL=m CONFIG_SAMSUNG_Q10=m # CONFIG_APPLE_GMUX is not set +CONFIG_INTEL_RST=m +# CONFIG_INTEL_SMARTCONNECT is not set CONFIG_PVPANIC=m +# CONFIG_CHROME_PLATFORMS is not set CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y @@ -4902,7 +5088,7 @@ CONFIG_COMMON_CLK=y # # Common Clock Framework # -# CONFIG_COMMON_CLK_DEBUG is not set +# CONFIG_COMMON_CLK_SI5351 is not set # # Hardware Spinlock drivers @@ -4940,6 +5126,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # # Accelerometers # +# CONFIG_BMA180 is not set # CONFIG_HID_SENSOR_ACCEL_3D is not set # CONFIG_IIO_ST_ACCEL_3AXIS is not set @@ -4947,6 +5134,8 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # Analog to digital converters # # CONFIG_MAX1363 is not set +# CONFIG_MCP3422 is not set +# CONFIG_NAU7802 is not set # CONFIG_TI_ADC081C is not set # CONFIG_VIPERBOARD_ADC is not set @@ -4959,7 +5148,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_HID_SENSOR_IIO_COMMON=m CONFIG_HID_SENSOR_IIO_TRIGGER=m -# CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS is not set # # Digital to analog converters @@ -4989,6 +5177,11 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m # CONFIG_IIO_ST_GYRO_3AXIS is not set # CONFIG_ITG3200 is not set +# +# Humidity sensors +# +# CONFIG_DHT11 is not set + # # Inertial measurement units # @@ -4998,21 +5191,60 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m # Light sensors # # CONFIG_ADJD_S311 is not set -# CONFIG_SENSORS_LM3533 is not set -# CONFIG_SENSORS_TSL2563 is not set -# CONFIG_VCNL4000 is not set +# CONFIG_APDS9300 is not set +# CONFIG_CM32181 is not set +# CONFIG_CM36651 is not set +# CONFIG_GP2AP020A00F is not set # CONFIG_HID_SENSOR_ALS is not set +# CONFIG_SENSORS_LM3533 is not set +# CONFIG_TCS3472 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_TSL4531 is not set +# CONFIG_VCNL4000 is not set # # Magnetometer sensors # # CONFIG_AK8975 is not set +# CONFIG_MAG3110 is not set # CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set # CONFIG_IIO_ST_MAGN_3AXIS is not set + +# +# Inclinometer sensors +# +# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set + +# +# Triggers - standalone +# +# CONFIG_IIO_INTERRUPT_TRIGGER is not set +# CONFIG_IIO_SYSFS_TRIGGER is not set + +# +# Pressure sensors +# +# CONFIG_MPL3115 is not set +# CONFIG_IIO_ST_PRESS is not set + +# +# Temperature sensors +# +# CONFIG_TMP006 is not set +# CONFIG_NTB is not set # CONFIG_VME_BUS is not set # CONFIG_PWM is not set # CONFIG_IPACK_BUS is not set -# CONFIG_RESET_CONTROLLER is not set +CONFIG_RESET_CONTROLLER=y +# CONFIG_FMC is not set + +# +# PHY Subsystem +# +CONFIG_GENERIC_PHY=y +# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set +# CONFIG_BCM_KONA_USB2_PHY is not set +# CONFIG_POWERCAP is not set # # Firmware Drivers @@ -5024,6 +5256,7 @@ CONFIG_DELL_RBU=m CONFIG_DCDBAS=m CONFIG_DMIID=y CONFIG_DMI_SYSFS=y +CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y CONFIG_ISCSI_IBFT_FIND=y CONFIG_ISCSI_IBFT=m # CONFIG_GOOGLE_FIRMWARE is not set @@ -5034,6 +5267,7 @@ CONFIG_ISCSI_IBFT=m CONFIG_EFI_VARS=y CONFIG_EFI_VARS_PSTORE=y # CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set +CONFIG_UEFI_CPER=y # # File systems @@ -5069,6 +5303,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set # CONFIG_BTRFS_DEBUG is not set +CONFIG_BTRFS_ASSERT=y # CONFIG_NILFS2_FS is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y @@ -5089,7 +5324,6 @@ CONFIG_QUOTACTL=y CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m -CONFIG_GENERIC_ACL=y # # Caches @@ -5172,10 +5406,13 @@ CONFIG_NFS_V3_ACL=y CONFIG_NFS_V4=m # CONFIG_NFS_SWAP is not set CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y CONFIG_PNFS_FILE_LAYOUT=m CONFIG_PNFS_BLOCK=m CONFIG_PNFS_OBJLAYOUT=m CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="ipfire.org" +CONFIG_NFS_V4_1_MIGRATION=y +CONFIG_NFS_V4_SECURITY_LABEL=y CONFIG_NFS_FSCACHE=y # CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_NFS_USE_KERNEL_DNS=y @@ -5184,6 +5421,7 @@ CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y +CONFIG_NFSD_V4_SECURITY_LABEL=y # CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_LOCKD=m CONFIG_LOCKD_V4=y @@ -5268,64 +5506,92 @@ CONFIG_DLM=m # Kernel hacking # CONFIG_TRACE_IRQFLAGS_SUPPORT=y + +# +# printk and dmesg options +# # CONFIG_PRINTK_TIME is not set CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 +# CONFIG_BOOT_PRINTK_DELAY is not set +CONFIG_DYNAMIC_DEBUG=y + +# +# Compile-time checks and compiler options +# +# CONFIG_DEBUG_INFO is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=2048 -# CONFIG_MAGIC_SYSRQ is not set CONFIG_STRIP_ASM_SYMS=y # CONFIG_READABLE_ASM is not set # CONFIG_UNUSED_SYMBOLS is not set CONFIG_DEBUG_FS=y CONFIG_HEADERS_CHECK=y # CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_MAGIC_SYSRQ is not set CONFIG_DEBUG_KERNEL=y + +# +# Memory Debugging +# +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_VIRTUAL is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_DEBUG_HIGHMEM is not set +CONFIG_HAVE_DEBUG_STACKOVERFLOW=y +CONFIG_DEBUG_STACKOVERFLOW=y +CONFIG_HAVE_ARCH_KMEMCHECK=y CONFIG_DEBUG_SHIRQ=y + +# +# Debug Lockups and Hangs +# CONFIG_LOCKUP_DETECTOR=y CONFIG_HARDLOCKUP_DETECTOR=y # CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0 # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_DETECT_HUNG_TASK is not set # CONFIG_PANIC_ON_OOPS is not set CONFIG_PANIC_ON_OOPS_VALUE=0 -# CONFIG_DETECT_HUNG_TASK is not set +CONFIG_PANIC_TIMEOUT=0 CONFIG_SCHED_DEBUG=y CONFIG_SCHEDSTATS=y CONFIG_TIMER_STATS=y -# CONFIG_DEBUG_OBJECTS is not set -# CONFIG_SLUB_DEBUG_ON is not set -# CONFIG_SLUB_STATS is not set -CONFIG_HAVE_DEBUG_KMEMLEAK=y -# CONFIG_DEBUG_KMEMLEAK is not set + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set # CONFIG_DEBUG_LOCK_ALLOC is not set # CONFIG_PROVE_LOCKING is not set # CONFIG_LOCK_STAT is not set # CONFIG_DEBUG_ATOMIC_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set CONFIG_STACKTRACE=y -# CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_DEBUG_KOBJECT is not set -# CONFIG_DEBUG_HIGHMEM is not set CONFIG_DEBUG_BUGVERBOSE=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_VIRTUAL is not set # CONFIG_DEBUG_WRITECOUNT is not set -CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DEBUG_LIST=y -# CONFIG_TEST_LIST_SORT is not set # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_DEBUG_CREDENTIALS is not set -CONFIG_ARCH_WANT_FRAME_POINTERS=y -CONFIG_FRAME_POINTER=y -# CONFIG_BOOT_PRINTK_DELAY is not set # # RCU Debugging @@ -5335,16 +5601,11 @@ CONFIG_FRAME_POINTER=y CONFIG_RCU_CPU_STALL_TIMEOUT=60 # CONFIG_RCU_CPU_STALL_INFO is not set # CONFIG_RCU_TRACE is not set -# CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -# CONFIG_DEBUG_PER_CPU_MAPS is not set -# CONFIG_LKDTM is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set # CONFIG_FAULT_INJECTION is not set CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set -# CONFIG_DEBUG_PAGEALLOC is not set CONFIG_USER_STACKTRACE_SUPPORT=y CONFIG_NOP_TRACER=y CONFIG_HAVE_FUNCTION_TRACER=y @@ -5387,24 +5648,32 @@ CONFIG_FTRACE_MCOUNT_RECORD=y # CONFIG_MMIOTRACE is not set CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_RING_BUFFER_STARTUP_TEST is not set + +# +# Runtime Testing +# +# CONFIG_LKDTM is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_BACKTRACE_SELF_TEST is not set CONFIG_RBTREE_TEST=m # CONFIG_INTERVAL_TREE_TEST is not set -# CONFIG_BUILD_DOCSRC is not set -CONFIG_DYNAMIC_DEBUG=y -# CONFIG_DMA_API_DEBUG is not set +# CONFIG_PERCPU_TEST is not set # CONFIG_ATOMIC64_SELFTEST is not set CONFIG_ASYNC_RAID6_TEST=m +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_BUILD_DOCSRC is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_TEST_MODULE is not set +# CONFIG_TEST_USER_COPY is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set -CONFIG_HAVE_ARCH_KMEMCHECK=y -# CONFIG_TEST_STRING_HELPERS is not set -# CONFIG_TEST_KSTRTOX is not set CONFIG_STRICT_DEVMEM=y # CONFIG_X86_VERBOSE_BOOTUP is not set CONFIG_EARLY_PRINTK=y # CONFIG_EARLY_PRINTK_DBGP is not set -CONFIG_DEBUG_STACKOVERFLOW=y +CONFIG_EARLY_PRINTK_EFI=y # CONFIG_X86_PTDUMP is not set CONFIG_DEBUG_NX_TEST=m CONFIG_DOUBLEFAULT=y @@ -5424,6 +5693,7 @@ CONFIG_DEBUG_BOOT_PARAMS=y # CONFIG_CPA_DEBUG is not set CONFIG_OPTIMIZE_INLINING=y # CONFIG_DEBUG_NMI_SELFTEST is not set +# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set # # Security options @@ -5481,6 +5751,7 @@ CONFIG_PAX_RANDMMAP=y # # Miscellaneous hardening features # +CONFIG_PAX_MEMORY_SANITIZE=y CONFIG_PAX_MEMORY_STACKLEAK=y CONFIG_PAX_MEMORY_STRUCTLEAK=y CONFIG_PAX_REFCOUNT=y @@ -5501,6 +5772,8 @@ CONFIG_GRKERNSEC_PROC_MEMMAP=y CONFIG_GRKERNSEC_BRUTE=y CONFIG_GRKERNSEC_MODHARDEN=y CONFIG_GRKERNSEC_HIDESYM=y +CONFIG_GRKERNSEC_RANDSTRUCT=y +CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y CONFIG_GRKERNSEC_KERN_LOCKOUT=y # @@ -5560,12 +5833,12 @@ CONFIG_GRKERNSEC_DMESG=y CONFIG_GRKERNSEC_HARDEN_PTRACE=y CONFIG_GRKERNSEC_PTRACE_READEXEC=y CONFIG_GRKERNSEC_SETXID=y +CONFIG_GRKERNSEC_HARDEN_IPC=y # CONFIG_GRKERNSEC_TPE is not set # # Network Protections # -CONFIG_GRKERNSEC_RANDNET=y CONFIG_GRKERNSEC_BLACKHOLE=y CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y # CONFIG_GRKERNSEC_SOCKET is not set @@ -5586,6 +5859,8 @@ CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y CONFIG_GRKERNSEC_FLOODTIME=10 CONFIG_GRKERNSEC_FLOODBURST=6 CONFIG_KEYS=y +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_BIG_KEYS is not set # CONFIG_ENCRYPTED_KEYS is not set CONFIG_KEYS_DEBUG_PROC_KEYS=y CONFIG_SECURITY_DMESG_RESTRICT=y @@ -5638,7 +5913,7 @@ CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_CRYPTD=y CONFIG_CRYPTO_AUTHENC=m CONFIG_CRYPTO_TEST=m -CONFIG_CRYPTO_ABLK_HELPER_X86=y +CONFIG_CRYPTO_ABLK_HELPER=y CONFIG_CRYPTO_GLUE_HELPER_X86=m # @@ -5674,6 +5949,7 @@ CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C_INTEL=y CONFIG_CRYPTO_CRC32=y CONFIG_CRYPTO_CRC32_PCLMUL=m +CONFIG_CRYPTO_CRCT10DIF=y CONFIG_CRYPTO_GHASH=m CONFIG_CRYPTO_MD4=m CONFIG_CRYPTO_MD5=y @@ -5721,6 +5997,8 @@ CONFIG_CRYPTO_TWOFISH_586=m CONFIG_CRYPTO_DEFLATE=m CONFIG_CRYPTO_ZLIB=m CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m # # Random Number Generation @@ -5729,11 +6007,15 @@ CONFIG_CRYPTO_ANSI_CPRNG=m CONFIG_CRYPTO_USER_API=y CONFIG_CRYPTO_USER_API_HASH=y CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_CRYPTO_HASH_INFO=y CONFIG_CRYPTO_HW=y CONFIG_CRYPTO_DEV_PADLOCK=m CONFIG_CRYPTO_DEV_PADLOCK_AES=m CONFIG_CRYPTO_DEV_PADLOCK_SHA=m CONFIG_CRYPTO_DEV_GEODE=m +CONFIG_CRYPTO_DEV_CCP=y +CONFIG_CRYPTO_DEV_CCP_DD=m +CONFIG_CRYPTO_DEV_CCP_CRYPTO=m CONFIG_ASYMMETRIC_KEY_TYPE=m CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m CONFIG_PUBLIC_KEY_ALGO_RSA=m @@ -5747,6 +6029,7 @@ CONFIG_KVM_MMIO=y CONFIG_KVM_ASYNC_PF=y CONFIG_HAVE_KVM_MSI=y CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y +CONFIG_KVM_VFIO=y CONFIG_VIRTUALIZATION=y CONFIG_KVM=m CONFIG_KVM_INTEL=m @@ -5763,10 +6046,12 @@ CONFIG_RAID6_PQ=m CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y CONFIG_GENERIC_FIND_FIRST_BIT=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IOMAP=y CONFIG_GENERIC_IO=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y CONFIG_CRC_CCITT=y CONFIG_CRC16=y CONFIG_CRC_T10DIF=y @@ -5781,10 +6066,14 @@ CONFIG_CRC7=m CONFIG_LIBCRC32C=m CONFIG_CRC8=m CONFIG_AUDIT_GENERIC=y +# CONFIG_RANDOM32_SELFTEST is not set CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y CONFIG_XZ_DEC=y CONFIG_XZ_DEC_X86=y CONFIG_XZ_DEC_POWERPC=y @@ -5799,11 +6088,13 @@ CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_LZMA=y CONFIG_DECOMPRESS_XZ=y CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_TEXTSEARCH=y CONFIG_TEXTSEARCH_KMP=m CONFIG_TEXTSEARCH_BM=m CONFIG_TEXTSEARCH_FSM=m +CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_DMA=y @@ -5819,3 +6110,7 @@ CONFIG_CORDIC=m CONFIG_MPILIB=m CONFIG_OID_REGISTRY=m CONFIG_UCS2_STRING=y +CONFIG_FONT_SUPPORT=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y diff --git a/lfs/linux b/lfs/linux index 8f8f020f4..f90fd828f 100644 --- a/lfs/linux +++ b/lfs/linux @@ -24,10 +24,11 @@ include Config -VER = 3.10.58 +VER = 3.14.22 RPI_PATCHES = linux-3.10.38-grsec-1b49b45 -GRS_PATCHES = grsecurity-2.9.1-3.10.58-ipfire1.patch.xz +#GRS_PATCHES = grsecurity-2.9.1-3.10.58-ipfire1.patch.xz +GRS_PATCHES = grsecurity-3.0-3.14.22-201410192047.patch.xz THISAPP = linux-$(VER) DL_FILE = linux-$(VER).tar.xz @@ -74,9 +75,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz $(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES) -$(DL_FILE)_MD5 = 3ff3478b6351143cef22d4b81cf48b01 +$(DL_FILE)_MD5 = cb00fadd0a720cc2d1690792e72e0134 rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = a7408e8bad57b4b2cb677dd5a0bfb7ff -$(GRS_PATCHES)_MD5 = c96901bf2eae568cce6257546182215d +$(GRS_PATCHES)_MD5 = a63b899587068885951e762ad53f5b50 install : $(TARGET) @@ -112,16 +113,13 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) ln -svf linux-$(VER) $(DIR_SRC)/linux # Linux Intermediate Queueing Device - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.30-imq.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-imq.patch # ipp2p 0.8.2-ipfire cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-ipp2p-0.8.2-ipfire.patch # Layer7-patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-layer7-filter.patch - - # pie packet scheduler - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.39-pie_packet_sch.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14-layer7-filter.patch # Grsecurity-patches ifneq "$(KCFG)" "-headers" @@ -130,26 +128,17 @@ ifneq "$(KCFG)" "-headers" cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.7-disable-compat_vdso.patch endif - # Remove ACPI Blacklist message - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6-silence-acpi-blacklist.patch - # DVB Patches - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.9-dvbsky-wot2.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-dvbsky.patch cd $(DIR_APP) && patch -Np2 < $(DIR_SRC)/src/patches/v4l-dvb_fix_tua6034_pll.patch # Wlan Patches cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-drivers-3.8.3-ath_ignore_eeprom_regdomain.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.34-iwlwifi-noibss_only_on_radar_chan.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-iwlwifi-noibss_only_on_radar_chan.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.37-rt2800usb_add_dlink_dwa137_usbid.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.39-add_libertas_uap.patch - # mmc -ifneq "$(KCFG)" "-rpi" - # this patch is also in the rpi patchset. - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.57-mmc_add_eMMC_5.x.patch -endif - # mISDN Patches cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mISDN_hfc-s_add_id.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mISDN-hfcusb-reportl1down.patch @@ -167,10 +156,6 @@ endif cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2.33_ipg-fix-driver-name.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.32.27_mcs7830-fix-driver-name.patch - # Moschip 7830 link detection - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.y-usbnet_mcs7830_rework_link_detect.patch - - ifeq "$(KCFG)" "-kirkwood" # Add dreamplug,guruplug and icy 62x0 support on ARM-kirkwood cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.10-arm_kirkwood_setups.patch diff --git a/src/patches/linux-3.14-layer7-filter.patch b/src/patches/linux-3.14-layer7-filter.patch new file mode 100644 index 000000000..ba799f73f --- /dev/null +++ b/src/patches/linux-3.14-layer7-filter.patch @@ -0,0 +1,2165 @@ +diff -Naur linux-3.14.22.org/include/linux/netfilter/xt_layer7.h linux-3.14.22/include/linux/netfilter/xt_layer7.h +--- linux-3.14.22.org/include/linux/netfilter/xt_layer7.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/include/linux/netfilter/xt_layer7.h 2014-10-24 15:33:21.281274380 +0200 +@@ -0,0 +1,14 @@ ++#ifndef _XT_LAYER7_H ++#define _XT_LAYER7_H ++ ++#define MAX_PATTERN_LEN 8192 ++#define MAX_PROTOCOL_LEN 256 ++ ++struct xt_layer7_info { ++ char protocol[MAX_PROTOCOL_LEN]; ++ char pattern[MAX_PATTERN_LEN]; ++ u_int8_t invert; ++ u_int8_t pkt; ++}; ++ ++#endif /* _XT_LAYER7_H */ +diff -Naur linux-3.14.22.org/include/net/netfilter/nf_conntrack.h linux-3.14.22/include/net/netfilter/nf_conntrack.h +--- linux-3.14.22.org/include/net/netfilter/nf_conntrack.h 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/include/net/netfilter/nf_conntrack.h 2014-10-24 15:33:21.281274380 +0200 +@@ -105,6 +105,22 @@ + struct net *ct_net; + #endif + ++#if defined(CONFIG_NETFILTER_XT_MATCH_LAYER7) || \ ++ defined(CONFIG_NETFILTER_XT_MATCH_LAYER7_MODULE) ++ struct { ++ /* ++ * e.g. "http". NULL before decision. "unknown" after decision ++ * if no match. ++ */ ++ char *app_proto; ++ /* ++ * application layer data so far. NULL after match decision. ++ */ ++ char *app_data; ++ unsigned int app_data_len; ++ } layer7; ++#endif ++ + /* Storage reserved for other modules, must be the last member */ + union nf_conntrack_proto proto; + }; +diff -Naur linux-3.14.22.org/include/uapi/linux/netfilter/Kbuild linux-3.14.22/include/uapi/linux/netfilter/Kbuild +--- linux-3.14.22.org/include/uapi/linux/netfilter/Kbuild 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/include/uapi/linux/netfilter/Kbuild 2014-10-24 15:34:39.721663344 +0200 +@@ -59,6 +59,7 @@ + header-y += xt_iprange.h + header-y += xt_ipvs.h + header-y += xt_l2tp.h ++header-y += xt_layer7.h + header-y += xt_length.h + header-y += xt_limit.h + header-y += xt_mac.h +diff -Naur linux-3.14.22.org/net/netfilter/Kconfig linux-3.14.22/net/netfilter/Kconfig +--- linux-3.14.22.org/net/netfilter/Kconfig 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/net/netfilter/Kconfig 2014-10-24 15:33:21.281274380 +0200 +@@ -1153,6 +1153,26 @@ + + To compile it as a module, choose M here. If unsure, say N. + ++config NETFILTER_XT_MATCH_LAYER7 ++ tristate '"layer7" match support' ++ depends on NETFILTER_XTABLES ++ depends on NETFILTER_ADVANCED ++ depends on NF_CONNTRACK ++ help ++ Say Y if you want to be able to classify connections (and their ++ packets) based on regular expression matching of their application ++ layer data. This is one way to classify applications such as ++ peer-to-peer filesharing systems that do not always use the same ++ port. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config NETFILTER_XT_MATCH_LAYER7_DEBUG ++ bool 'Layer 7 debugging output' ++ depends on NETFILTER_XT_MATCH_LAYER7 ++ help ++ Say Y to get lots of debugging output. ++ + config NETFILTER_XT_MATCH_LENGTH + tristate '"length" match support' + depends on NETFILTER_ADVANCED +@@ -1347,6 +1367,12 @@ + + To compile it as a module, choose M here. If unsure, say N. + ++config NETFILTER_XT_MATCH_LAYER7_DEBUG ++ bool 'Layer 7 debugging output' ++ depends on NETFILTER_XT_MATCH_LAYER7 ++ help ++ Say Y to get lots of debugging output. ++ + config NETFILTER_XT_MATCH_STATISTIC + tristate '"statistic" match support' + depends on NETFILTER_ADVANCED +diff -Naur linux-3.14.22.org/net/netfilter/Makefile linux-3.14.22/net/netfilter/Makefile +--- linux-3.14.22.org/net/netfilter/Makefile 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/net/netfilter/Makefile 2014-10-24 15:33:21.281274380 +0200 +@@ -158,6 +158,7 @@ + obj-$(CONFIG_NETFILTER_XT_MATCH_SCTP) += xt_sctp.o + obj-$(CONFIG_NETFILTER_XT_MATCH_SOCKET) += xt_socket.o + obj-$(CONFIG_NETFILTER_XT_MATCH_STATE) += xt_state.o ++obj-$(CONFIG_NETFILTER_XT_MATCH_LAYER7) += xt_layer7.o + obj-$(CONFIG_NETFILTER_XT_MATCH_STATISTIC) += xt_statistic.o + obj-$(CONFIG_NETFILTER_XT_MATCH_STRING) += xt_string.o + obj-$(CONFIG_NETFILTER_XT_MATCH_TCPMSS) += xt_tcpmss.o +diff -Naur linux-3.14.22.org/net/netfilter/nf_conntrack_core.c linux-3.14.22/net/netfilter/nf_conntrack_core.c +--- linux-3.14.22.org/net/netfilter/nf_conntrack_core.c 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/net/netfilter/nf_conntrack_core.c 2014-10-24 15:33:21.281274380 +0200 +@@ -220,6 +220,13 @@ + * too. */ + nf_ct_remove_expectations(ct); + ++#if defined(CONFIG_NETFILTER_XT_MATCH_LAYER7) || defined(CONFIG_NETFILTER_XT_MATCH_LAYER7_MODULE) ++ if(ct->layer7.app_proto) ++ kfree(ct->layer7.app_proto); ++ if(ct->layer7.app_data) ++ kfree(ct->layer7.app_data); ++#endif ++ + /* We overload first tuple to link into unconfirmed or dying list.*/ + BUG_ON(hlist_nulls_unhashed(&ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode)); + hlist_nulls_del_rcu(&ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode); +diff -Naur linux-3.14.22.org/net/netfilter/nf_conntrack_standalone.c linux-3.14.22/net/netfilter/nf_conntrack_standalone.c +--- linux-3.14.22.org/net/netfilter/nf_conntrack_standalone.c 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/net/netfilter/nf_conntrack_standalone.c 2014-10-24 15:33:21.285274399 +0200 +@@ -240,6 +240,12 @@ + if (ct_show_delta_time(s, ct)) + goto release; + ++#if defined(CONFIG_NETFILTER_XT_MATCH_LAYER7) || defined(CONFIG_NETFILTER_XT_MATCH_LAYER7_MODULE) ++ if(ct->layer7.app_proto && ++ seq_printf(s, "l7proto=%s ", ct->layer7.app_proto)) ++ return -ENOSPC; ++#endif ++ + if (seq_printf(s, "use=%u\n", atomic_read(&ct->ct_general.use))) + goto release; + +diff -Naur linux-3.14.22.org/net/netfilter/regexp/regexp.c linux-3.14.22/net/netfilter/regexp/regexp.c +--- linux-3.14.22.org/net/netfilter/regexp/regexp.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/net/netfilter/regexp/regexp.c 2014-10-24 15:33:21.285274399 +0200 +@@ -0,0 +1,1197 @@ ++/* ++ * regcomp and regexec -- regsub and regerror are elsewhere ++ * @(#)regexp.c 1.3 of 18 April 87 ++ * ++ * Copyright (c) 1986 by University of Toronto. ++ * Written by Henry Spencer. Not derived from licensed software. ++ * ++ * Permission is granted to anyone to use this software for any ++ * purpose on any computer system, and to redistribute it freely, ++ * subject to the following restrictions: ++ * ++ * 1. The author is not responsible for the consequences of use of ++ * this software, no matter how awful, even if they arise ++ * from defects in it. ++ * ++ * 2. The origin of this software must not be misrepresented, either ++ * by explicit claim or by omission. ++ * ++ * 3. Altered versions must be plainly marked as such, and must not ++ * be misrepresented as being the original software. ++ * ++ * Beware that some of this code is subtly aware of the way operator ++ * precedence is structured in regular expressions. Serious changes in ++ * regular-expression syntax might require a total rethink. ++ * ++ * This code was modified by Ethan Sommer to work within the kernel ++ * (it now uses kmalloc etc..) ++ * ++ * Modified slightly by Matthew Strait to use more modern C. ++ */ ++ ++#include "regexp.h" ++#include "regmagic.h" ++ ++/* added by ethan and matt. Lets it work in both kernel and user space. ++(So iptables can use it, for instance.) Yea, it goes both ways... */ ++#if __KERNEL__ ++ #define malloc(foo) kmalloc(foo,GFP_ATOMIC) ++#else ++ #define printk(format,args...) printf(format,##args) ++#endif ++ ++void regerror(char * s) ++{ ++ printk("<3>Regexp: %s\n", s); ++ /* NOTREACHED */ ++} ++ ++/* ++ * The "internal use only" fields in regexp.h are present to pass info from ++ * compile to execute that permits the execute phase to run lots faster on ++ * simple cases. They are: ++ * ++ * regstart char that must begin a match; '\0' if none obvious ++ * reganch is the match anchored (at beginning-of-line only)? ++ * regmust string (pointer into program) that match must include, or NULL ++ * regmlen length of regmust string ++ * ++ * Regstart and reganch permit very fast decisions on suitable starting points ++ * for a match, cutting down the work a lot. Regmust permits fast rejection ++ * of lines that cannot possibly match. The regmust tests are costly enough ++ * that regcomp() supplies a regmust only if the r.e. contains something ++ * potentially expensive (at present, the only such thing detected is * or + ++ * at the start of the r.e., which can involve a lot of backup). Regmlen is ++ * supplied because the test in regexec() needs it and regcomp() is computing ++ * it anyway. ++ */ ++ ++/* ++ * Structure for regexp "program". This is essentially a linear encoding ++ * of a nondeterministic finite-state machine (aka syntax charts or ++ * "railroad normal form" in parsing technology). Each node is an opcode ++ * plus a "next" pointer, possibly plus an operand. "Next" pointers of ++ * all nodes except BRANCH implement concatenation; a "next" pointer with ++ * a BRANCH on both ends of it is connecting two alternatives. (Here we ++ * have one of the subtle syntax dependencies: an individual BRANCH (as ++ * opposed to a collection of them) is never concatenated with anything ++ * because of operator precedence.) The operand of some types of node is ++ * a literal string; for others, it is a node leading into a sub-FSM. In ++ * particular, the operand of a BRANCH node is the first node of the branch. ++ * (NB this is *not* a tree structure: the tail of the branch connects ++ * to the thing following the set of BRANCHes.) The opcodes are: ++ */ ++ ++/* definition number opnd? meaning */ ++#define END 0 /* no End of program. */ ++#define BOL 1 /* no Match "" at beginning of line. */ ++#define EOL 2 /* no Match "" at end of line. */ ++#define ANY 3 /* no Match any one character. */ ++#define ANYOF 4 /* str Match any character in this string. */ ++#define ANYBUT 5 /* str Match any character not in this string. */ ++#define BRANCH 6 /* node Match this alternative, or the next... */ ++#define BACK 7 /* no Match "", "next" ptr points backward. */ ++#define EXACTLY 8 /* str Match this string. */ ++#define NOTHING 9 /* no Match empty string. */ ++#define STAR 10 /* node Match this (simple) thing 0 or more times. */ ++#define PLUS 11 /* node Match this (simple) thing 1 or more times. */ ++#define OPEN 20 /* no Mark this point in input as start of #n. */ ++ /* OPEN+1 is number 1, etc. */ ++#define CLOSE 30 /* no Analogous to OPEN. */ ++ ++/* ++ * Opcode notes: ++ * ++ * BRANCH The set of branches constituting a single choice are hooked ++ * together with their "next" pointers, since precedence prevents ++ * anything being concatenated to any individual branch. The ++ * "next" pointer of the last BRANCH in a choice points to the ++ * thing following the whole choice. This is also where the ++ * final "next" pointer of each individual branch points; each ++ * branch starts with the operand node of a BRANCH node. ++ * ++ * BACK Normal "next" pointers all implicitly point forward; BACK ++ * exists to make loop structures possible. ++ * ++ * STAR,PLUS '?', and complex '*' and '+', are implemented as circular ++ * BRANCH structures using BACK. Simple cases (one character ++ * per match) are implemented with STAR and PLUS for speed ++ * and to minimize recursive plunges. ++ * ++ * OPEN,CLOSE ...are numbered at compile time. ++ */ ++ ++/* ++ * A node is one char of opcode followed by two chars of "next" pointer. ++ * "Next" pointers are stored as two 8-bit pieces, high order first. The ++ * value is a positive offset from the opcode of the node containing it. ++ * An operand, if any, simply follows the node. (Note that much of the ++ * code generation knows about this implicit relationship.) ++ * ++ * Using two bytes for the "next" pointer is vast overkill for most things, ++ * but allows patterns to get big without disasters. ++ */ ++#define OP(p) (*(p)) ++#define NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377)) ++#define OPERAND(p) ((p) + 3) ++ ++/* ++ * See regmagic.h for one further detail of program structure. ++ */ ++ ++ ++/* ++ * Utility definitions. ++ */ ++#ifndef CHARBITS ++#define UCHARAT(p) ((int)*(unsigned char *)(p)) ++#else ++#define UCHARAT(p) ((int)*(p)&CHARBITS) ++#endif ++ ++#define FAIL(m) { regerror(m); return(NULL); } ++#define ISMULT(c) ((c) == '*' || (c) == '+' || (c) == '?') ++#define META "^$.[()|?+*\\" ++ ++/* ++ * Flags to be passed up and down. ++ */ ++#define HASWIDTH 01 /* Known never to match null string. */ ++#define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */ ++#define SPSTART 04 /* Starts with * or +. */ ++#define WORST 0 /* Worst case. */ ++ ++/* ++ * Global work variables for regcomp(). ++ */ ++struct match_globals { ++char *reginput; /* String-input pointer. */ ++char *regbol; /* Beginning of input, for ^ check. */ ++char **regstartp; /* Pointer to startp array. */ ++char **regendp; /* Ditto for endp. */ ++char *regparse; /* Input-scan pointer. */ ++int regnpar; /* () count. */ ++char regdummy; ++char *regcode; /* Code-emit pointer; ®dummy = don't. */ ++long regsize; /* Code size. */ ++}; ++ ++/* ++ * Forward declarations for regcomp()'s friends. ++ */ ++#ifndef STATIC ++#define STATIC static ++#endif ++STATIC char *reg(struct match_globals *g, int paren,int *flagp); ++STATIC char *regbranch(struct match_globals *g, int *flagp); ++STATIC char *regpiece(struct match_globals *g, int *flagp); ++STATIC char *regatom(struct match_globals *g, int *flagp); ++STATIC char *regnode(struct match_globals *g, char op); ++STATIC char *regnext(struct match_globals *g, char *p); ++STATIC void regc(struct match_globals *g, char b); ++STATIC void reginsert(struct match_globals *g, char op, char *opnd); ++STATIC void regtail(struct match_globals *g, char *p, char *val); ++STATIC void regoptail(struct match_globals *g, char *p, char *val); ++ ++ ++__kernel_size_t my_strcspn(const char *s1,const char *s2) ++{ ++ char *scan1; ++ char *scan2; ++ int count; ++ ++ count = 0; ++ for (scan1 = (char *)s1; *scan1 != '\0'; scan1++) { ++ for (scan2 = (char *)s2; *scan2 != '\0';) /* ++ moved down. */ ++ if (*scan1 == *scan2++) ++ return(count); ++ count++; ++ } ++ return(count); ++} ++ ++/* ++ - regcomp - compile a regular expression into internal code ++ * ++ * We can't allocate space until we know how big the compiled form will be, ++ * but we can't compile it (and thus know how big it is) until we've got a ++ * place to put the code. So we cheat: we compile it twice, once with code ++ * generation turned off and size counting turned on, and once "for real". ++ * This also means that we don't allocate space until we are sure that the ++ * thing really will compile successfully, and we never have to move the ++ * code and thus invalidate pointers into it. (Note that it has to be in ++ * one piece because free() must be able to free it all.) ++ * ++ * Beware that the optimization-preparation code in here knows about some ++ * of the structure of the compiled regexp. ++ */ ++regexp * ++regcomp(char *exp,int *patternsize) ++{ ++ register regexp *r; ++ register char *scan; ++ register char *longest; ++ register int len; ++ int flags; ++ struct match_globals g; ++ ++ /* commented out by ethan ++ extern char *malloc(); ++ */ ++ ++ if (exp == NULL) ++ FAIL("NULL argument"); ++ ++ /* First pass: determine size, legality. */ ++ g.regparse = exp; ++ g.regnpar = 1; ++ g.regsize = 0L; ++ g.regcode = &g.regdummy; ++ regc(&g, MAGIC); ++ if (reg(&g, 0, &flags) == NULL) ++ return(NULL); ++ ++ /* Small enough for pointer-storage convention? */ ++ if (g.regsize >= 32767L) /* Probably could be 65535L. */ ++ FAIL("regexp too big"); ++ ++ /* Allocate space. */ ++ *patternsize=sizeof(regexp) + (unsigned)g.regsize; ++ r = (regexp *)malloc(sizeof(regexp) + (unsigned)g.regsize); ++ if (r == NULL) ++ FAIL("out of space"); ++ ++ /* Second pass: emit code. */ ++ g.regparse = exp; ++ g.regnpar = 1; ++ g.regcode = r->program; ++ regc(&g, MAGIC); ++ if (reg(&g, 0, &flags) == NULL) ++ return(NULL); ++ ++ /* Dig out information for optimizations. */ ++ r->regstart = '\0'; /* Worst-case defaults. */ ++ r->reganch = 0; ++ r->regmust = NULL; ++ r->regmlen = 0; ++ scan = r->program+1; /* First BRANCH. */ ++ if (OP(regnext(&g, scan)) == END) { /* Only one top-level choice. */ ++ scan = OPERAND(scan); ++ ++ /* Starting-point info. */ ++ if (OP(scan) == EXACTLY) ++ r->regstart = *OPERAND(scan); ++ else if (OP(scan) == BOL) ++ r->reganch++; ++ ++ /* ++ * If there's something expensive in the r.e., find the ++ * longest literal string that must appear and make it the ++ * regmust. Resolve ties in favor of later strings, since ++ * the regstart check works with the beginning of the r.e. ++ * and avoiding duplication strengthens checking. Not a ++ * strong reason, but sufficient in the absence of others. ++ */ ++ if (flags&SPSTART) { ++ longest = NULL; ++ len = 0; ++ for (; scan != NULL; scan = regnext(&g, scan)) ++ if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len) { ++ longest = OPERAND(scan); ++ len = strlen(OPERAND(scan)); ++ } ++ r->regmust = longest; ++ r->regmlen = len; ++ } ++ } ++ ++ return(r); ++} ++ ++/* ++ - reg - regular expression, i.e. main body or parenthesized thing ++ * ++ * Caller must absorb opening parenthesis. ++ * ++ * Combining parenthesis handling with the base level of regular expression ++ * is a trifle forced, but the need to tie the tails of the branches to what ++ * follows makes it hard to avoid. ++ */ ++static char * ++reg(struct match_globals *g, int paren, int *flagp /* Parenthesized? */ ) ++{ ++ register char *ret; ++ register char *br; ++ register char *ender; ++ register int parno = 0; /* 0 makes gcc happy */ ++ int flags; ++ ++ *flagp = HASWIDTH; /* Tentatively. */ ++ ++ /* Make an OPEN node, if parenthesized. */ ++ if (paren) { ++ if (g->regnpar >= NSUBEXP) ++ FAIL("too many ()"); ++ parno = g->regnpar; ++ g->regnpar++; ++ ret = regnode(g, OPEN+parno); ++ } else ++ ret = NULL; ++ ++ /* Pick up the branches, linking them together. */ ++ br = regbranch(g, &flags); ++ if (br == NULL) ++ return(NULL); ++ if (ret != NULL) ++ regtail(g, ret, br); /* OPEN -> first. */ ++ else ++ ret = br; ++ if (!(flags&HASWIDTH)) ++ *flagp &= ~HASWIDTH; ++ *flagp |= flags&SPSTART; ++ while (*g->regparse == '|') { ++ g->regparse++; ++ br = regbranch(g, &flags); ++ if (br == NULL) ++ return(NULL); ++ regtail(g, ret, br); /* BRANCH -> BRANCH. */ ++ if (!(flags&HASWIDTH)) ++ *flagp &= ~HASWIDTH; ++ *flagp |= flags&SPSTART; ++ } ++ ++ /* Make a closing node, and hook it on the end. */ ++ ender = regnode(g, (paren) ? CLOSE+parno : END); ++ regtail(g, ret, ender); ++ ++ /* Hook the tails of the branches to the closing node. */ ++ for (br = ret; br != NULL; br = regnext(g, br)) ++ regoptail(g, br, ender); ++ ++ /* Check for proper termination. */ ++ if (paren && *g->regparse++ != ')') { ++ FAIL("unmatched ()"); ++ } else if (!paren && *g->regparse != '\0') { ++ if (*g->regparse == ')') { ++ FAIL("unmatched ()"); ++ } else ++ FAIL("junk on end"); /* "Can't happen". */ ++ /* NOTREACHED */ ++ } ++ ++ return(ret); ++} ++ ++/* ++ - regbranch - one alternative of an | operator ++ * ++ * Implements the concatenation operator. ++ */ ++static char * ++regbranch(struct match_globals *g, int *flagp) ++{ ++ register char *ret; ++ register char *chain; ++ register char *latest; ++ int flags; ++ ++ *flagp = WORST; /* Tentatively. */ ++ ++ ret = regnode(g, BRANCH); ++ chain = NULL; ++ while (*g->regparse != '\0' && *g->regparse != '|' && *g->regparse != ')') { ++ latest = regpiece(g, &flags); ++ if (latest == NULL) ++ return(NULL); ++ *flagp |= flags&HASWIDTH; ++ if (chain == NULL) /* First piece. */ ++ *flagp |= flags&SPSTART; ++ else ++ regtail(g, chain, latest); ++ chain = latest; ++ } ++ if (chain == NULL) /* Loop ran zero times. */ ++ (void) regnode(g, NOTHING); ++ ++ return(ret); ++} ++ ++/* ++ - regpiece - something followed by possible [*+?] ++ * ++ * Note that the branching code sequences used for ? and the general cases ++ * of * and + are somewhat optimized: they use the same NOTHING node as ++ * both the endmarker for their branch list and the body of the last branch. ++ * It might seem that this node could be dispensed with entirely, but the ++ * endmarker role is not redundant. ++ */ ++static char * ++regpiece(struct match_globals *g, int *flagp) ++{ ++ register char *ret; ++ register char op; ++ register char *next; ++ int flags; ++ ++ ret = regatom(g, &flags); ++ if (ret == NULL) ++ return(NULL); ++ ++ op = *g->regparse; ++ if (!ISMULT(op)) { ++ *flagp = flags; ++ return(ret); ++ } ++ ++ if (!(flags&HASWIDTH) && op != '?') ++ FAIL("*+ operand could be empty"); ++ *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH); ++ ++ if (op == '*' && (flags&SIMPLE)) ++ reginsert(g, STAR, ret); ++ else if (op == '*') { ++ /* Emit x* as (x&|), where & means "self". */ ++ reginsert(g, BRANCH, ret); /* Either x */ ++ regoptail(g, ret, regnode(g, BACK)); /* and loop */ ++ regoptail(g, ret, ret); /* back */ ++ regtail(g, ret, regnode(g, BRANCH)); /* or */ ++ regtail(g, ret, regnode(g, NOTHING)); /* null. */ ++ } else if (op == '+' && (flags&SIMPLE)) ++ reginsert(g, PLUS, ret); ++ else if (op == '+') { ++ /* Emit x+ as x(&|), where & means "self". */ ++ next = regnode(g, BRANCH); /* Either */ ++ regtail(g, ret, next); ++ regtail(g, regnode(g, BACK), ret); /* loop back */ ++ regtail(g, next, regnode(g, BRANCH)); /* or */ ++ regtail(g, ret, regnode(g, NOTHING)); /* null. */ ++ } else if (op == '?') { ++ /* Emit x? as (x|) */ ++ reginsert(g, BRANCH, ret); /* Either x */ ++ regtail(g, ret, regnode(g, BRANCH)); /* or */ ++ next = regnode(g, NOTHING); /* null. */ ++ regtail(g, ret, next); ++ regoptail(g, ret, next); ++ } ++ g->regparse++; ++ if (ISMULT(*g->regparse)) ++ FAIL("nested *?+"); ++ ++ return(ret); ++} ++ ++/* ++ - regatom - the lowest level ++ * ++ * Optimization: gobbles an entire sequence of ordinary characters so that ++ * it can turn them into a single node, which is smaller to store and ++ * faster to run. Backslashed characters are exceptions, each becoming a ++ * separate node; the code is simpler that way and it's not worth fixing. ++ */ ++static char * ++regatom(struct match_globals *g, int *flagp) ++{ ++ register char *ret; ++ int flags; ++ ++ *flagp = WORST; /* Tentatively. */ ++ ++ switch (*g->regparse++) { ++ case '^': ++ ret = regnode(g, BOL); ++ break; ++ case '$': ++ ret = regnode(g, EOL); ++ break; ++ case '.': ++ ret = regnode(g, ANY); ++ *flagp |= HASWIDTH|SIMPLE; ++ break; ++ case '[': { ++ register int class; ++ register int classend; ++ ++ if (*g->regparse == '^') { /* Complement of range. */ ++ ret = regnode(g, ANYBUT); ++ g->regparse++; ++ } else ++ ret = regnode(g, ANYOF); ++ if (*g->regparse == ']' || *g->regparse == '-') ++ regc(g, *g->regparse++); ++ while (*g->regparse != '\0' && *g->regparse != ']') { ++ if (*g->regparse == '-') { ++ g->regparse++; ++ if (*g->regparse == ']' || *g->regparse == '\0') ++ regc(g, '-'); ++ else { ++ class = UCHARAT(g->regparse-2)+1; ++ classend = UCHARAT(g->regparse); ++ if (class > classend+1) ++ FAIL("invalid [] range"); ++ for (; class <= classend; class++) ++ regc(g, class); ++ g->regparse++; ++ } ++ } else ++ regc(g, *g->regparse++); ++ } ++ regc(g, '\0'); ++ if (*g->regparse != ']') ++ FAIL("unmatched []"); ++ g->regparse++; ++ *flagp |= HASWIDTH|SIMPLE; ++ } ++ break; ++ case '(': ++ ret = reg(g, 1, &flags); ++ if (ret == NULL) ++ return(NULL); ++ *flagp |= flags&(HASWIDTH|SPSTART); ++ break; ++ case '\0': ++ case '|': ++ case ')': ++ FAIL("internal urp"); /* Supposed to be caught earlier. */ ++ break; ++ case '?': ++ case '+': ++ case '*': ++ FAIL("?+* follows nothing"); ++ break; ++ case '\\': ++ if (*g->regparse == '\0') ++ FAIL("trailing \\"); ++ ret = regnode(g, EXACTLY); ++ regc(g, *g->regparse++); ++ regc(g, '\0'); ++ *flagp |= HASWIDTH|SIMPLE; ++ break; ++ default: { ++ register int len; ++ register char ender; ++ ++ g->regparse--; ++ len = my_strcspn((const char *)g->regparse, (const char *)META); ++ if (len <= 0) ++ FAIL("internal disaster"); ++ ender = *(g->regparse+len); ++ if (len > 1 && ISMULT(ender)) ++ len--; /* Back off clear of ?+* operand. */ ++ *flagp |= HASWIDTH; ++ if (len == 1) ++ *flagp |= SIMPLE; ++ ret = regnode(g, EXACTLY); ++ while (len > 0) { ++ regc(g, *g->regparse++); ++ len--; ++ } ++ regc(g, '\0'); ++ } ++ break; ++ } ++ ++ return(ret); ++} ++ ++/* ++ - regnode - emit a node ++ */ ++static char * /* Location. */ ++regnode(struct match_globals *g, char op) ++{ ++ register char *ret; ++ register char *ptr; ++ ++ ret = g->regcode; ++ if (ret == &g->regdummy) { ++ g->regsize += 3; ++ return(ret); ++ } ++ ++ ptr = ret; ++ *ptr++ = op; ++ *ptr++ = '\0'; /* Null "next" pointer. */ ++ *ptr++ = '\0'; ++ g->regcode = ptr; ++ ++ return(ret); ++} ++ ++/* ++ - regc - emit (if appropriate) a byte of code ++ */ ++static void ++regc(struct match_globals *g, char b) ++{ ++ if (g->regcode != &g->regdummy) ++ *g->regcode++ = b; ++ else ++ g->regsize++; ++} ++ ++/* ++ - reginsert - insert an operator in front of already-emitted operand ++ * ++ * Means relocating the operand. ++ */ ++static void ++reginsert(struct match_globals *g, char op, char* opnd) ++{ ++ register char *src; ++ register char *dst; ++ register char *place; ++ ++ if (g->regcode == &g->regdummy) { ++ g->regsize += 3; ++ return; ++ } ++ ++ src = g->regcode; ++ g->regcode += 3; ++ dst = g->regcode; ++ while (src > opnd) ++ *--dst = *--src; ++ ++ place = opnd; /* Op node, where operand used to be. */ ++ *place++ = op; ++ *place++ = '\0'; ++ *place++ = '\0'; ++} ++ ++/* ++ - regtail - set the next-pointer at the end of a node chain ++ */ ++static void ++regtail(struct match_globals *g, char *p, char *val) ++{ ++ register char *scan; ++ register char *temp; ++ register int offset; ++ ++ if (p == &g->regdummy) ++ return; ++ ++ /* Find last node. */ ++ scan = p; ++ for (;;) { ++ temp = regnext(g, scan); ++ if (temp == NULL) ++ break; ++ scan = temp; ++ } ++ ++ if (OP(scan) == BACK) ++ offset = scan - val; ++ else ++ offset = val - scan; ++ *(scan+1) = (offset>>8)&0377; ++ *(scan+2) = offset&0377; ++} ++ ++/* ++ - regoptail - regtail on operand of first argument; nop if operandless ++ */ ++static void ++regoptail(struct match_globals *g, char *p, char *val) ++{ ++ /* "Operandless" and "op != BRANCH" are synonymous in practice. */ ++ if (p == NULL || p == &g->regdummy || OP(p) != BRANCH) ++ return; ++ regtail(g, OPERAND(p), val); ++} ++ ++/* ++ * regexec and friends ++ */ ++ ++ ++/* ++ * Forwards. ++ */ ++STATIC int regtry(struct match_globals *g, regexp *prog, char *string); ++STATIC int regmatch(struct match_globals *g, char *prog); ++STATIC int regrepeat(struct match_globals *g, char *p); ++ ++#ifdef DEBUG ++int regnarrate = 0; ++void regdump(); ++STATIC char *regprop(char *op); ++#endif ++ ++/* ++ - regexec - match a regexp against a string ++ */ ++int ++regexec(regexp *prog, char *string) ++{ ++ register char *s; ++ struct match_globals g; ++ ++ /* Be paranoid... */ ++ if (prog == NULL || string == NULL) { ++ printk("<3>Regexp: NULL parameter\n"); ++ return(0); ++ } ++ ++ /* Check validity of program. */ ++ if (UCHARAT(prog->program) != MAGIC) { ++ printk("<3>Regexp: corrupted program\n"); ++ return(0); ++ } ++ ++ /* If there is a "must appear" string, look for it. */ ++ if (prog->regmust != NULL) { ++ s = string; ++ while ((s = strchr(s, prog->regmust[0])) != NULL) { ++ if (strncmp(s, prog->regmust, prog->regmlen) == 0) ++ break; /* Found it. */ ++ s++; ++ } ++ if (s == NULL) /* Not present. */ ++ return(0); ++ } ++ ++ /* Mark beginning of line for ^ . */ ++ g.regbol = string; ++ ++ /* Simplest case: anchored match need be tried only once. */ ++ if (prog->reganch) ++ return(regtry(&g, prog, string)); ++ ++ /* Messy cases: unanchored match. */ ++ s = string; ++ if (prog->regstart != '\0') ++ /* We know what char it must start with. */ ++ while ((s = strchr(s, prog->regstart)) != NULL) { ++ if (regtry(&g, prog, s)) ++ return(1); ++ s++; ++ } ++ else ++ /* We don't -- general case. */ ++ do { ++ if (regtry(&g, prog, s)) ++ return(1); ++ } while (*s++ != '\0'); ++ ++ /* Failure. */ ++ return(0); ++} ++ ++/* ++ - regtry - try match at specific point ++ */ ++static int /* 0 failure, 1 success */ ++regtry(struct match_globals *g, regexp *prog, char *string) ++{ ++ register int i; ++ register char **sp; ++ register char **ep; ++ ++ g->reginput = string; ++ g->regstartp = prog->startp; ++ g->regendp = prog->endp; ++ ++ sp = prog->startp; ++ ep = prog->endp; ++ for (i = NSUBEXP; i > 0; i--) { ++ *sp++ = NULL; ++ *ep++ = NULL; ++ } ++ if (regmatch(g, prog->program + 1)) { ++ prog->startp[0] = string; ++ prog->endp[0] = g->reginput; ++ return(1); ++ } else ++ return(0); ++} ++ ++/* ++ - regmatch - main matching routine ++ * ++ * Conceptually the strategy is simple: check to see whether the current ++ * node matches, call self recursively to see whether the rest matches, ++ * and then act accordingly. In practice we make some effort to avoid ++ * recursion, in particular by going through "ordinary" nodes (that don't ++ * need to know whether the rest of the match failed) by a loop instead of ++ * by recursion. ++ */ ++static int /* 0 failure, 1 success */ ++regmatch(struct match_globals *g, char *prog) ++{ ++ register char *scan = prog; /* Current node. */ ++ char *next; /* Next node. */ ++ ++#ifdef DEBUG ++ if (scan != NULL && regnarrate) ++ fprintf(stderr, "%s(\n", regprop(scan)); ++#endif ++ while (scan != NULL) { ++#ifdef DEBUG ++ if (regnarrate) ++ fprintf(stderr, "%s...\n", regprop(scan)); ++#endif ++ next = regnext(g, scan); ++ ++ switch (OP(scan)) { ++ case BOL: ++ if (g->reginput != g->regbol) ++ return(0); ++ break; ++ case EOL: ++ if (*g->reginput != '\0') ++ return(0); ++ break; ++ case ANY: ++ if (*g->reginput == '\0') ++ return(0); ++ g->reginput++; ++ break; ++ case EXACTLY: { ++ register int len; ++ register char *opnd; ++ ++ opnd = OPERAND(scan); ++ /* Inline the first character, for speed. */ ++ if (*opnd != *g->reginput) ++ return(0); ++ len = strlen(opnd); ++ if (len > 1 && strncmp(opnd, g->reginput, len) != 0) ++ return(0); ++ g->reginput += len; ++ } ++ break; ++ case ANYOF: ++ if (*g->reginput == '\0' || strchr(OPERAND(scan), *g->reginput) == NULL) ++ return(0); ++ g->reginput++; ++ break; ++ case ANYBUT: ++ if (*g->reginput == '\0' || strchr(OPERAND(scan), *g->reginput) != NULL) ++ return(0); ++ g->reginput++; ++ break; ++ case NOTHING: ++ case BACK: ++ break; ++ case OPEN+1: ++ case OPEN+2: ++ case OPEN+3: ++ case OPEN+4: ++ case OPEN+5: ++ case OPEN+6: ++ case OPEN+7: ++ case OPEN+8: ++ case OPEN+9: { ++ register int no; ++ register char *save; ++ ++ no = OP(scan) - OPEN; ++ save = g->reginput; ++ ++ if (regmatch(g, next)) { ++ /* ++ * Don't set startp if some later ++ * invocation of the same parentheses ++ * already has. ++ */ ++ if (g->regstartp[no] == NULL) ++ g->regstartp[no] = save; ++ return(1); ++ } else ++ return(0); ++ } ++ break; ++ case CLOSE+1: ++ case CLOSE+2: ++ case CLOSE+3: ++ case CLOSE+4: ++ case CLOSE+5: ++ case CLOSE+6: ++ case CLOSE+7: ++ case CLOSE+8: ++ case CLOSE+9: ++ { ++ register int no; ++ register char *save; ++ ++ no = OP(scan) - CLOSE; ++ save = g->reginput; ++ ++ if (regmatch(g, next)) { ++ /* ++ * Don't set endp if some later ++ * invocation of the same parentheses ++ * already has. ++ */ ++ if (g->regendp[no] == NULL) ++ g->regendp[no] = save; ++ return(1); ++ } else ++ return(0); ++ } ++ break; ++ case BRANCH: { ++ register char *save; ++ ++ if (OP(next) != BRANCH) /* No choice. */ ++ next = OPERAND(scan); /* Avoid recursion. */ ++ else { ++ do { ++ save = g->reginput; ++ if (regmatch(g, OPERAND(scan))) ++ return(1); ++ g->reginput = save; ++ scan = regnext(g, scan); ++ } while (scan != NULL && OP(scan) == BRANCH); ++ return(0); ++ /* NOTREACHED */ ++ } ++ } ++ break; ++ case STAR: ++ case PLUS: { ++ register char nextch; ++ register int no; ++ register char *save; ++ register int min; ++ ++ /* ++ * Lookahead to avoid useless match attempts ++ * when we know what character comes next. ++ */ ++ nextch = '\0'; ++ if (OP(next) == EXACTLY) ++ nextch = *OPERAND(next); ++ min = (OP(scan) == STAR) ? 0 : 1; ++ save = g->reginput; ++ no = regrepeat(g, OPERAND(scan)); ++ while (no >= min) { ++ /* If it could work, try it. */ ++ if (nextch == '\0' || *g->reginput == nextch) ++ if (regmatch(g, next)) ++ return(1); ++ /* Couldn't or didn't -- back up. */ ++ no--; ++ g->reginput = save + no; ++ } ++ return(0); ++ } ++ break; ++ case END: ++ return(1); /* Success! */ ++ break; ++ default: ++ printk("<3>Regexp: memory corruption\n"); ++ return(0); ++ break; ++ } ++ ++ scan = next; ++ } ++ ++ /* ++ * We get here only if there's trouble -- normally "case END" is ++ * the terminating point. ++ */ ++ printk("<3>Regexp: corrupted pointers\n"); ++ return(0); ++} ++ ++/* ++ - regrepeat - repeatedly match something simple, report how many ++ */ ++static int ++regrepeat(struct match_globals *g, char *p) ++{ ++ register int count = 0; ++ register char *scan; ++ register char *opnd; ++ ++ scan = g->reginput; ++ opnd = OPERAND(p); ++ switch (OP(p)) { ++ case ANY: ++ count = strlen(scan); ++ scan += count; ++ break; ++ case EXACTLY: ++ while (*opnd == *scan) { ++ count++; ++ scan++; ++ } ++ break; ++ case ANYOF: ++ while (*scan != '\0' && strchr(opnd, *scan) != NULL) { ++ count++; ++ scan++; ++ } ++ break; ++ case ANYBUT: ++ while (*scan != '\0' && strchr(opnd, *scan) == NULL) { ++ count++; ++ scan++; ++ } ++ break; ++ default: /* Oh dear. Called inappropriately. */ ++ printk("<3>Regexp: internal foulup\n"); ++ count = 0; /* Best compromise. */ ++ break; ++ } ++ g->reginput = scan; ++ ++ return(count); ++} ++ ++/* ++ - regnext - dig the "next" pointer out of a node ++ */ ++static char* ++regnext(struct match_globals *g, char *p) ++{ ++ register int offset; ++ ++ if (p == &g->regdummy) ++ return(NULL); ++ ++ offset = NEXT(p); ++ if (offset == 0) ++ return(NULL); ++ ++ if (OP(p) == BACK) ++ return(p-offset); ++ else ++ return(p+offset); ++} ++ ++#ifdef DEBUG ++ ++STATIC char *regprop(); ++ ++/* ++ - regdump - dump a regexp onto stdout in vaguely comprehensible form ++ */ ++void ++regdump(regexp *r) ++{ ++ register char *s; ++ register char op = EXACTLY; /* Arbitrary non-END op. */ ++ register char *next; ++ /* extern char *strchr(); */ ++ ++ ++ s = r->program + 1; ++ while (op != END) { /* While that wasn't END last time... */ ++ op = OP(s); ++ printf("%2d%s", s-r->program, regprop(s)); /* Where, what. */ ++ next = regnext(s); ++ if (next == NULL) /* Next ptr. */ ++ printf("(0)"); ++ else ++ printf("(%d)", (s-r->program)+(next-s)); ++ s += 3; ++ if (op == ANYOF || op == ANYBUT || op == EXACTLY) { ++ /* Literal string, where present. */ ++ while (*s != '\0') { ++ putchar(*s); ++ s++; ++ } ++ s++; ++ } ++ putchar('\n'); ++ } ++ ++ /* Header fields of interest. */ ++ if (r->regstart != '\0') ++ printf("start `%c' ", r->regstart); ++ if (r->reganch) ++ printf("anchored "); ++ if (r->regmust != NULL) ++ printf("must have \"%s\"", r->regmust); ++ printf("\n"); ++} ++ ++/* ++ - regprop - printable representation of opcode ++ */ ++static char * ++regprop(char *op) ++{ ++#define BUFLEN 50 ++ register char *p; ++ static char buf[BUFLEN]; ++ ++ strcpy(buf, ":"); ++ ++ switch (OP(op)) { ++ case BOL: ++ p = "BOL"; ++ break; ++ case EOL: ++ p = "EOL"; ++ break; ++ case ANY: ++ p = "ANY"; ++ break; ++ case ANYOF: ++ p = "ANYOF"; ++ break; ++ case ANYBUT: ++ p = "ANYBUT"; ++ break; ++ case BRANCH: ++ p = "BRANCH"; ++ break; ++ case EXACTLY: ++ p = "EXACTLY"; ++ break; ++ case NOTHING: ++ p = "NOTHING"; ++ break; ++ case BACK: ++ p = "BACK"; ++ break; ++ case END: ++ p = "END"; ++ break; ++ case OPEN+1: ++ case OPEN+2: ++ case OPEN+3: ++ case OPEN+4: ++ case OPEN+5: ++ case OPEN+6: ++ case OPEN+7: ++ case OPEN+8: ++ case OPEN+9: ++ snprintf(buf+strlen(buf),BUFLEN-strlen(buf), "OPEN%d", OP(op)-OPEN); ++ p = NULL; ++ break; ++ case CLOSE+1: ++ case CLOSE+2: ++ case CLOSE+3: ++ case CLOSE+4: ++ case CLOSE+5: ++ case CLOSE+6: ++ case CLOSE+7: ++ case CLOSE+8: ++ case CLOSE+9: ++ snprintf(buf+strlen(buf),BUFLEN-strlen(buf), "CLOSE%d", OP(op)-CLOSE); ++ p = NULL; ++ break; ++ case STAR: ++ p = "STAR"; ++ break; ++ case PLUS: ++ p = "PLUS"; ++ break; ++ default: ++ printk("<3>Regexp: corrupted opcode\n"); ++ break; ++ } ++ if (p != NULL) ++ strncat(buf, p, BUFLEN-strlen(buf)); ++ return(buf); ++} ++#endif ++ ++ +diff -Naur linux-3.14.22.org/net/netfilter/regexp/regexp.h linux-3.14.22/net/netfilter/regexp/regexp.h +--- linux-3.14.22.org/net/netfilter/regexp/regexp.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/net/netfilter/regexp/regexp.h 2014-10-24 15:33:21.285274399 +0200 +@@ -0,0 +1,41 @@ ++/* ++ * Definitions etc. for regexp(3) routines. ++ * ++ * Caveat: this is V8 regexp(3) [actually, a reimplementation thereof], ++ * not the System V one. ++ */ ++ ++#ifndef REGEXP_H ++#define REGEXP_H ++ ++ ++/* ++http://www.opensource.apple.com/darwinsource/10.3/expect-1/expect/expect.h , ++which contains a version of this library, says: ++ ++ * ++ * NSUBEXP must be at least 10, and no greater than 117 or the parser ++ * will not work properly. ++ * ++ ++However, it looks rather like this library is limited to 10. If you think ++otherwise, let us know. ++*/ ++ ++#define NSUBEXP 10 ++typedef struct regexp { ++ char *startp[NSUBEXP]; ++ char *endp[NSUBEXP]; ++ char regstart; /* Internal use only. */ ++ char reganch; /* Internal use only. */ ++ char *regmust; /* Internal use only. */ ++ int regmlen; /* Internal use only. */ ++ char program[1]; /* Unwarranted chumminess with compiler. */ ++} regexp; ++ ++regexp * regcomp(char *exp, int *patternsize); ++int regexec(regexp *prog, char *string); ++void regsub(regexp *prog, char *source, char *dest); ++void regerror(char *s); ++ ++#endif +diff -Naur linux-3.14.22.org/net/netfilter/regexp/regmagic.h linux-3.14.22/net/netfilter/regexp/regmagic.h +--- linux-3.14.22.org/net/netfilter/regexp/regmagic.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/net/netfilter/regexp/regmagic.h 2014-10-24 15:33:21.285274399 +0200 +@@ -0,0 +1,5 @@ ++/* ++ * The first byte of the regexp internal "program" is actually this magic ++ * number; the start node begins in the second byte. ++ */ ++#define MAGIC 0234 +diff -Naur linux-3.14.22.org/net/netfilter/regexp/regsub.c linux-3.14.22/net/netfilter/regexp/regsub.c +--- linux-3.14.22.org/net/netfilter/regexp/regsub.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/net/netfilter/regexp/regsub.c 2014-10-24 15:33:21.285274399 +0200 +@@ -0,0 +1,95 @@ ++/* ++ * regsub ++ * @(#)regsub.c 1.3 of 2 April 86 ++ * ++ * Copyright (c) 1986 by University of Toronto. ++ * Written by Henry Spencer. Not derived from licensed software. ++ * ++ * Permission is granted to anyone to use this software for any ++ * purpose on any computer system, and to redistribute it freely, ++ * subject to the following restrictions: ++ * ++ * 1. The author is not responsible for the consequences of use of ++ * this software, no matter how awful, even if they arise ++ * from defects in it. ++ * ++ * 2. The origin of this software must not be misrepresented, either ++ * by explicit claim or by omission. ++ * ++ * 3. Altered versions must be plainly marked as such, and must not ++ * be misrepresented as being the original software. ++ * ++ * ++ * This code was modified by Ethan Sommer to work within the kernel ++ * (it now uses kmalloc etc..) ++ * ++ */ ++#include "regexp.h" ++#include "regmagic.h" ++#include ++ ++ ++#ifndef CHARBITS ++#define UCHARAT(p) ((int)*(unsigned char *)(p)) ++#else ++#define UCHARAT(p) ((int)*(p)&CHARBITS) ++#endif ++ ++#if 0 ++//void regerror(char * s) ++//{ ++// printk("regexp(3): %s", s); ++// /* NOTREACHED */ ++//} ++#endif ++ ++/* ++ - regsub - perform substitutions after a regexp match ++ */ ++void ++regsub(regexp * prog, char * source, char * dest) ++{ ++ register char *src; ++ register char *dst; ++ register char c; ++ register int no; ++ register int len; ++ ++ /* Not necessary and gcc doesn't like it -MLS */ ++ /*extern char *strncpy();*/ ++ ++ if (prog == NULL || source == NULL || dest == NULL) { ++ regerror("NULL parm to regsub"); ++ return; ++ } ++ if (UCHARAT(prog->program) != MAGIC) { ++ regerror("damaged regexp fed to regsub"); ++ return; ++ } ++ ++ src = source; ++ dst = dest; ++ while ((c = *src++) != '\0') { ++ if (c == '&') ++ no = 0; ++ else if (c == '\\' && '0' <= *src && *src <= '9') ++ no = *src++ - '0'; ++ else ++ no = -1; ++ ++ if (no < 0) { /* Ordinary character. */ ++ if (c == '\\' && (*src == '\\' || *src == '&')) ++ c = *src++; ++ *dst++ = c; ++ } else if (prog->startp[no] != NULL && prog->endp[no] != NULL) { ++ len = prog->endp[no] - prog->startp[no]; ++ (void) strncpy(dst, prog->startp[no], len); ++ dst += len; ++ if (len != 0 && *(dst-1) == '\0') { /* strncpy hit NUL. */ ++ regerror("damaged match string"); ++ return; ++ } ++ } ++ } ++ *dst++ = '\0'; ++} +diff -Naur linux-3.14.22.org/net/netfilter/xt_layer7.c linux-3.14.22/net/netfilter/xt_layer7.c +--- linux-3.14.22.org/net/netfilter/xt_layer7.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/net/netfilter/xt_layer7.c 2014-10-24 15:33:21.285274399 +0200 +@@ -0,0 +1,665 @@ ++/* ++ Kernel module to match application layer (OSI layer 7) data in connections. ++ ++ http://l7-filter.sf.net ++ ++ (C) 2003-2009 Matthew Strait and Ethan Sommer. ++ ++ 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. ++ http://www.gnu.org/licenses/gpl.txt ++ ++ Based on ipt_string.c (C) 2000 Emmanuel Roger , ++ xt_helper.c (C) 2002 Harald Welte and cls_layer7.c (C) 2003 Matthew Strait, ++ Ethan Sommer, Justin Levandoski. ++*/ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "regexp/regexp.c" ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Matthew Strait , Ethan Sommer "); ++MODULE_DESCRIPTION("iptables application layer match module"); ++MODULE_ALIAS("ipt_layer7"); ++MODULE_VERSION("2.21"); ++ ++static int maxdatalen = 2048; // this is the default ++module_param(maxdatalen, int, 0444); ++MODULE_PARM_DESC(maxdatalen, "maximum bytes of data looked at by l7-filter"); ++#ifdef CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG ++ #define DPRINTK(format,args...) printk(format,##args) ++#else ++ #define DPRINTK(format,args...) ++#endif ++ ++/* Number of packets whose data we look at. ++This can be modified through /proc/net/layer7_numpackets */ ++static int num_packets = 10; ++ ++static struct pattern_cache { ++ char * regex_string; ++ regexp * pattern; ++ struct pattern_cache * next; ++} * first_pattern_cache = NULL; ++ ++DEFINE_SPINLOCK(l7_lock); ++ ++static int total_acct_packets(struct nf_conn *ct) ++{ ++ struct nf_conn_counter *acct; ++ ++ BUG_ON(ct == NULL); ++ acct = nf_conn_acct_find(ct); ++ if (!acct) ++ return 0; ++ return (atomic64_read(&acct[IP_CT_DIR_ORIGINAL].packets) + atomic64_read(&acct[IP_CT_DIR_REPLY].packets)); ++} ++ ++#ifdef CONFIG_IP_NF_MATCH_LAYER7_DEBUG ++/* Converts an unfriendly string into a friendly one by ++replacing unprintables with periods and all whitespace with " ". */ ++static char * friendly_print(unsigned char * s) ++{ ++ char * f = kmalloc(strlen(s) + 1, GFP_ATOMIC); ++ int i; ++ ++ if(!f) { ++ if (net_ratelimit()) ++ printk(KERN_ERR "layer7: out of memory in " ++ "friendly_print, bailing.\n"); ++ return NULL; ++ } ++ ++ for(i = 0; i < strlen(s); i++){ ++ if(isprint(s[i]) && s[i] < 128) f[i] = s[i]; ++ else if(isspace(s[i])) f[i] = ' '; ++ else f[i] = '.'; ++ } ++ f[i] = '\0'; ++ return f; ++} ++ ++static char dec2hex(int i) ++{ ++ switch (i) { ++ case 0 ... 9: ++ return (i + '0'); ++ break; ++ case 10 ... 15: ++ return (i - 10 + 'a'); ++ break; ++ default: ++ if (net_ratelimit()) ++ printk("layer7: Problem in dec2hex\n"); ++ return '\0'; ++ } ++} ++ ++static char * hex_print(unsigned char * s) ++{ ++ char * g = kmalloc(strlen(s)*3 + 1, GFP_ATOMIC); ++ int i; ++ ++ if(!g) { ++ if (net_ratelimit()) ++ printk(KERN_ERR "layer7: out of memory in hex_print, " ++ "bailing.\n"); ++ return NULL; ++ } ++ ++ for(i = 0; i < strlen(s); i++) { ++ g[i*3 ] = dec2hex(s[i]/16); ++ g[i*3 + 1] = dec2hex(s[i]%16); ++ g[i*3 + 2] = ' '; ++ } ++ g[i*3] = '\0'; ++ ++ return g; ++} ++#endif // DEBUG ++ ++/* Use instead of regcomp. As we expect to be seeing the same regexps over and ++over again, it make sense to cache the results. */ ++static regexp * compile_and_cache(const char * regex_string, ++ const char * protocol) ++{ ++ struct pattern_cache * node = first_pattern_cache; ++ struct pattern_cache * last_pattern_cache = first_pattern_cache; ++ struct pattern_cache * tmp; ++ unsigned int len; ++ ++ while (node != NULL) { ++ if (!strcmp(node->regex_string, regex_string)) ++ return node->pattern; ++ ++ last_pattern_cache = node;/* points at the last non-NULL node */ ++ node = node->next; ++ } ++ ++ /* If we reach the end of the list, then we have not yet cached ++ the pattern for this regex. Let's do that now. ++ Be paranoid about running out of memory to avoid list corruption. */ ++ tmp = kmalloc(sizeof(struct pattern_cache), GFP_ATOMIC); ++ ++ if(!tmp) { ++ if (net_ratelimit()) ++ printk(KERN_ERR "layer7: out of memory in " ++ "compile_and_cache, bailing.\n"); ++ return NULL; ++ } ++ ++ tmp->regex_string = kmalloc(strlen(regex_string) + 1, GFP_ATOMIC); ++ tmp->pattern = kmalloc(sizeof(struct regexp), GFP_ATOMIC); ++ tmp->next = NULL; ++ ++ if(!tmp->regex_string || !tmp->pattern) { ++ if (net_ratelimit()) ++ printk(KERN_ERR "layer7: out of memory in " ++ "compile_and_cache, bailing.\n"); ++ kfree(tmp->regex_string); ++ kfree(tmp->pattern); ++ kfree(tmp); ++ return NULL; ++ } ++ ++ /* Ok. The new node is all ready now. */ ++ node = tmp; ++ ++ if(first_pattern_cache == NULL) /* list is empty */ ++ first_pattern_cache = node; /* make node the beginning */ ++ else ++ last_pattern_cache->next = node; /* attach node to the end */ ++ ++ /* copy the string and compile the regex */ ++ len = strlen(regex_string); ++ DPRINTK("About to compile this: \"%s\"\n", regex_string); ++ node->pattern = regcomp((char *)regex_string, &len); ++ if ( !node->pattern ) { ++ if (net_ratelimit()) ++ printk(KERN_ERR "layer7: Error compiling regexp " ++ "\"%s\" (%s)\n", ++ regex_string, protocol); ++ /* pattern is now cached as NULL, so we won't try again. */ ++ } ++ ++ strcpy(node->regex_string, regex_string); ++ return node->pattern; ++} ++ ++static int can_handle(const struct sk_buff *skb) ++{ ++ struct iphdr iphdr_tmp; ++ struct iphdr *iphdr; ++ int offset; ++ ++ if (!ip_hdr(skb)) ++ return 0; ++ ++ offset = ((uintptr_t)ip_hdr(skb)) - ((uintptr_t)skb->data); ++ ++ iphdr = skb_header_pointer(skb, offset, sizeof(*iphdr), &iphdr_tmp); ++ if (!iphdr) ++ return 0; ++ ++ if (iphdr->protocol == IPPROTO_TCP || ++ iphdr->protocol == IPPROTO_UDP || ++ iphdr->protocol == IPPROTO_ICMP) ++ return 1; ++ ++ return 0; ++} ++ ++static int app_data_offset(const struct sk_buff *skb) ++{ ++ int offset; ++ struct iphdr iphdr_tmp; ++ struct iphdr *iphdr; ++ struct tcphdr tcphdr_tmp; ++ struct tcphdr *tcphdr; ++ ++ if (!ip_hdr(skb)) ++ return -1; ++ ++ offset = ((uintptr_t)ip_hdr(skb)) - ((uintptr_t)skb->data); ++ ++ iphdr = skb_header_pointer(skb, offset, sizeof(*iphdr), &iphdr_tmp); ++ if (!iphdr) ++ return -1; ++ ++ offset += iphdr->ihl * 4; ++ ++ if (iphdr->protocol == IPPROTO_TCP) { ++ tcphdr = skb_header_pointer(skb, offset, sizeof(*tcphdr), ++ &tcphdr_tmp); ++ if (!tcphdr) ++ return -1; ++ ++ offset += tcphdr->doff * 4; ++ ++ return offset; ++ } ++ ++ if (iphdr->protocol == IPPROTO_UDP) ++ return offset + 8; ++ ++ if (iphdr->protocol == IPPROTO_ICMP) ++ return offset + 8; ++ ++ if (net_ratelimit()) ++ pr_err(KERN_ERR "layer7: tried to handle unknown protocol!\n"); ++ ++ return offset + 8; /* something reasonable */ ++} ++ ++/* handles whether there's a match when we aren't appending data anymore */ ++static int match_no_append(struct nf_conn * conntrack, ++ struct nf_conn * master_conntrack, ++ enum ip_conntrack_info ctinfo, ++ enum ip_conntrack_info master_ctinfo, ++ const struct xt_layer7_info * info) ++{ ++ /* If we're in here, throw the app data away */ ++ if(master_conntrack->layer7.app_data != NULL) { ++ ++ #ifdef CONFIG_IP_NF_MATCH_LAYER7_DEBUG ++ if(!master_conntrack->layer7.app_proto) { ++ char * f = ++ friendly_print(master_conntrack->layer7.app_data); ++ char * g = ++ hex_print(master_conntrack->layer7.app_data); ++ DPRINTK("\nl7-filter gave up after %d bytes " ++ "(%d packets):\n%s\n", ++ strlen(f), total_acct_packets(master_conntrack), f); ++ kfree(f); ++ DPRINTK("In hex: %s\n", g); ++ kfree(g); ++ } ++ #endif ++ ++ kfree(master_conntrack->layer7.app_data); ++ master_conntrack->layer7.app_data = NULL; /* don't free again */ ++ } ++ ++ if(master_conntrack->layer7.app_proto){ ++ /* Here child connections set their .app_proto (for /proc) */ ++ if(!conntrack->layer7.app_proto) { ++ conntrack->layer7.app_proto = ++ kmalloc(strlen(master_conntrack->layer7.app_proto)+1, ++ GFP_ATOMIC); ++ if(!conntrack->layer7.app_proto){ ++ if (net_ratelimit()) ++ printk(KERN_ERR "layer7: out of memory " ++ "in match_no_append, " ++ "bailing.\n"); ++ return 1; ++ } ++ strcpy(conntrack->layer7.app_proto, ++ master_conntrack->layer7.app_proto); ++ } ++ ++ return (!strcmp(master_conntrack->layer7.app_proto, ++ info->protocol)); ++ } ++ else { ++ /* If not classified, set to "unknown" to distinguish from ++ connections that are still being tested. */ ++ master_conntrack->layer7.app_proto = ++ kmalloc(strlen("unknown")+1, GFP_ATOMIC); ++ if(!master_conntrack->layer7.app_proto){ ++ if (net_ratelimit()) ++ printk(KERN_ERR "layer7: out of memory in " ++ "match_no_append, bailing.\n"); ++ return 1; ++ } ++ strcpy(master_conntrack->layer7.app_proto, "unknown"); ++ return 0; ++ } ++} ++ ++/* add the new app data to the conntrack. Return number of bytes added. */ ++static int add_datastr(char *target, int offset, char *app_data, int len) ++{ ++ int length = 0, i; ++ if (!target) return 0; ++ ++ /* Strip nulls. Make everything lower case (our regex lib doesn't ++ do case insensitivity). Add it to the end of the current data. */ ++ for(i = 0; i < maxdatalen-offset-1 && i < len; i++) { ++ if(app_data[i] != '\0') { ++ /* the kernel version of tolower mungs 'upper ascii' */ ++ target[length+offset] = ++ isascii(app_data[i])? ++ tolower(app_data[i]) : app_data[i]; ++ length++; ++ } ++ } ++ target[length+offset] = '\0'; ++ ++ return length; ++} ++ ++/* add the new app data to the buffer. Return number of bytes added. */ ++static int add_data(char *target, int offset, const struct sk_buff *skb) ++{ ++ int length, length_sum = 0; ++ int data_start = app_data_offset(skb); ++ int remaining = skb->len - data_start; ++ int to_copy; ++ uint8_t buf[512]; ++ uint8_t *data; ++ ++ while ((offset < maxdatalen - 1) && (remaining > 0)) { ++ to_copy = min_t(int, remaining, sizeof(buf)); ++ ++ data = skb_header_pointer(skb, data_start, to_copy, buf); ++ length = add_datastr(target, offset, data, to_copy); ++ ++ remaining -= to_copy; ++ data_start += to_copy; ++ offset += length; ++ length_sum += length; ++ } ++ ++ return length_sum; ++} ++ ++/* add the new app data to the conntrack. Return number of bytes added. */ ++static int add_data_conntrack(struct nf_conn *master_conntrack, ++ const struct sk_buff *skb) ++{ ++ int length; ++ ++ length = add_data(master_conntrack->layer7.app_data, ++ master_conntrack->layer7.app_data_len, skb); ++ master_conntrack->layer7.app_data_len += length; ++ ++ return length; ++} ++ ++/* taken from drivers/video/modedb.c */ ++static int my_atoi(const char *s) ++{ ++ int val = 0; ++ ++ for (;; s++) { ++ switch (*s) { ++ case '0'...'9': ++ val = 10*val+(*s-'0'); ++ break; ++ default: ++ return val; ++ } ++ } ++} ++ ++static int layer7_numpackets_proc_show(struct seq_file *s, void *p) { ++ seq_printf(s, "%d\n", num_packets); ++ ++ return 0; ++} ++ ++static int layer7_numpackets_proc_open(struct inode *inode, struct file *file) { ++ return single_open(file, layer7_numpackets_proc_show, NULL); ++} ++ ++/* Read in num_packets from userland */ ++static ssize_t layer7_numpackets_write_proc(struct file* file, const char __user *buffer, ++ size_t count, loff_t *data) { ++ char value[1024]; ++ int new_num_packets; ++ ++ if (copy_from_user(&value, buffer, sizeof(value))) ++ return -EFAULT; ++ ++ new_num_packets = my_atoi(value); ++ ++ if ((new_num_packets < 1) || (new_num_packets > 99)) { ++ printk(KERN_WARNING "layer7: numpackets must be between 1 and 99\n"); ++ return -EFAULT; ++ } ++ ++ num_packets = new_num_packets; ++ ++ return count; ++} ++ ++static bool match(const struct sk_buff *skbin, struct xt_action_param *par) ++{ ++ /* sidestep const without getting a compiler warning... */ ++ struct sk_buff *skb = (struct sk_buff *)skbin; ++ ++ const struct xt_layer7_info * info = par->matchinfo; ++ ++ enum ip_conntrack_info master_ctinfo, ctinfo; ++ struct nf_conn *master_conntrack, *conntrack; ++ unsigned char *tmp_data; ++ unsigned int pattern_result; ++ regexp * comppattern; ++ ++ /* Be paranoid/incompetent - lock the entire match function. */ ++ spin_lock_bh(&l7_lock); ++ ++ if (!can_handle(skbin)) { ++ DPRINTK("layer7: This is some protocol I can't handle.\n"); ++ spin_unlock_bh(&l7_lock); ++ return info->invert; ++ } ++ ++ /* Treat parent & all its children together as one connection, except ++ for the purpose of setting conntrack->layer7.app_proto in the actual ++ connection. This makes /proc/net/ip_conntrack more satisfying. */ ++ conntrack = nf_ct_get(skbin, &ctinfo); ++ master_conntrack = nf_ct_get(skbin, &master_ctinfo); ++ if (!conntrack || !master_conntrack) { ++ DPRINTK("layer7: couldn't get conntrack.\n"); ++ spin_unlock_bh(&l7_lock); ++ return info->invert; ++ } ++ ++ /* Try to get a master conntrack (and its master etc) for FTP, etc. */ ++ while (master_ct(master_conntrack) != NULL) ++ master_conntrack = master_ct(master_conntrack); ++ ++ /* if we've classified it or seen too many packets */ ++ if(!info->pkt && (total_acct_packets(master_conntrack) > num_packets || ++ master_conntrack->layer7.app_proto)) { ++ ++ pattern_result = match_no_append(conntrack, master_conntrack, ++ ctinfo, master_ctinfo, info); ++ ++ /* skb->cb[0] == seen. Don't do things twice if there are ++ multiple l7 rules. I'm not sure that using cb for this purpose ++ is correct, even though it says "put your private variables ++ there". But it doesn't look like it is being used for anything ++ else in the skbs that make it here. */ ++ skb->cb[0] = 1; /* marking it seen here's probably irrelevant */ ++ ++ spin_unlock_bh(&l7_lock); ++ return (pattern_result ^ info->invert); ++ } ++ ++ /* the return value gets checked later, when we're ready to use it */ ++ comppattern = compile_and_cache(info->pattern, info->protocol); ++ ++ if (info->pkt) { ++ tmp_data = kmalloc(maxdatalen, GFP_ATOMIC); ++ if(!tmp_data){ ++ if (net_ratelimit()) ++ printk(KERN_ERR "layer7: out of memory in match, bailing.\n"); ++ return info->invert; ++ } ++ ++ tmp_data[0] = '\0'; ++ add_data(tmp_data, 0, skbin); ++ pattern_result = ((comppattern && regexec(comppattern, tmp_data)) ? 1 : 0); ++ ++ kfree(tmp_data); ++ tmp_data = NULL; ++ spin_unlock_bh(&l7_lock); ++ ++ return (pattern_result ^ info->invert); ++ } ++ ++ /* On the first packet of a connection, allocate space for app data */ ++ if(total_acct_packets(master_conntrack) == 1 && !skb->cb[0] && ++ !master_conntrack->layer7.app_data){ ++ master_conntrack->layer7.app_data = ++ kmalloc(maxdatalen, GFP_ATOMIC); ++ if(!master_conntrack->layer7.app_data){ ++ if (net_ratelimit()) ++ printk(KERN_ERR "layer7: out of memory in " ++ "match, bailing.\n"); ++ spin_unlock_bh(&l7_lock); ++ return info->invert; ++ } ++ ++ master_conntrack->layer7.app_data[0] = '\0'; ++ } ++ ++ /* Can be here, but unallocated, if numpackets is increased near ++ the beginning of a connection */ ++ if(master_conntrack->layer7.app_data == NULL){ ++ spin_unlock_bh(&l7_lock); ++ return info->invert; /* unmatched */ ++ } ++ ++ if(!skb->cb[0]){ ++ int newbytes; ++ newbytes = add_data_conntrack(master_conntrack, skb); ++ ++ if(newbytes == 0) { /* didn't add any data */ ++ skb->cb[0] = 1; ++ /* Didn't match before, not going to match now */ ++ spin_unlock_bh(&l7_lock); ++ return info->invert; ++ } ++ } ++ ++ /* If looking for "unknown", then never match. "Unknown" means that ++ we've given up; we're still trying with these packets. */ ++ if(!strcmp(info->protocol, "unknown")) { ++ pattern_result = 0; ++ /* If looking for "unset", then always match. "Unset" means that we ++ haven't yet classified the connection. */ ++ } else if(!strcmp(info->protocol, "unset")) { ++ pattern_result = 2; ++ DPRINTK("layer7: matched unset: not yet classified " ++ "(%d/%d packets)\n", ++ total_acct_packets(master_conntrack), num_packets); ++ /* If the regexp failed to compile, don't bother running it */ ++ } else if(comppattern && ++ regexec(comppattern, master_conntrack->layer7.app_data)){ ++ DPRINTK("layer7: matched %s\n", info->protocol); ++ pattern_result = 1; ++ } else pattern_result = 0; ++ ++ if(pattern_result == 1) { ++ master_conntrack->layer7.app_proto = ++ kmalloc(strlen(info->protocol)+1, GFP_ATOMIC); ++ if(!master_conntrack->layer7.app_proto){ ++ if (net_ratelimit()) ++ printk(KERN_ERR "layer7: out of memory in " ++ "match, bailing.\n"); ++ spin_unlock_bh(&l7_lock); ++ return (pattern_result ^ info->invert); ++ } ++ strcpy(master_conntrack->layer7.app_proto, info->protocol); ++ } else if(pattern_result > 1) { /* cleanup from "unset" */ ++ pattern_result = 1; ++ } ++ ++ /* mark the packet seen */ ++ skb->cb[0] = 1; ++ ++ spin_unlock_bh(&l7_lock); ++ return (pattern_result ^ info->invert); ++} ++ ++// load nf_conntrack_ipv4 ++static int check(const struct xt_mtchk_param *par) ++{ ++ if (nf_ct_l3proto_try_module_get(par->match->family) < 0) { ++ printk(KERN_WARNING "can't load conntrack support for " ++ "proto=%d\n", par->match->family); ++ return -EINVAL; ++ } ++ return 0; ++} ++ ++ ++static void destroy(const struct xt_mtdtor_param *par) ++{ ++ nf_ct_l3proto_module_put(par->match->family); ++} ++ ++static struct xt_match xt_layer7_match[] __read_mostly = { ++{ ++ .name = "layer7", ++ .family = AF_INET, ++ .checkentry = check, ++ .match = match, ++ .destroy = destroy, ++ .matchsize = sizeof(struct xt_layer7_info), ++ .me = THIS_MODULE ++} ++}; ++ ++static const struct file_operations layer7_numpackets_proc_fops = { ++ .owner = THIS_MODULE, ++ .open = layer7_numpackets_proc_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++ .write = layer7_numpackets_write_proc, ++}; ++ ++static int __init xt_layer7_init(void) ++{ ++ need_conntrack(); ++ ++ // Register proc interface ++ proc_create_data("layer7_numpackets", 0644, ++ init_net.proc_net, &layer7_numpackets_proc_fops, NULL); ++ ++ if(maxdatalen < 1) { ++ printk(KERN_WARNING "layer7: maxdatalen can't be < 1, " ++ "using 1\n"); ++ maxdatalen = 1; ++ } ++ /* This is not a hard limit. It's just here to prevent people from ++ bringing their slow machines to a grinding halt. */ ++ else if(maxdatalen > 65536) { ++ printk(KERN_WARNING "layer7: maxdatalen can't be > 65536, " ++ "using 65536\n"); ++ maxdatalen = 65536; ++ } ++ return xt_register_matches(xt_layer7_match, ++ ARRAY_SIZE(xt_layer7_match)); ++} ++ ++static void __exit xt_layer7_fini(void) ++{ ++ remove_proc_entry("layer7_numpackets", init_net.proc_net); ++ xt_unregister_matches(xt_layer7_match, ARRAY_SIZE(xt_layer7_match)); ++} ++ ++module_init(xt_layer7_init); ++module_exit(xt_layer7_fini); diff --git a/src/patches/linux-3.14.22-dvbsky.patch b/src/patches/linux-3.14.22-dvbsky.patch new file mode 100644 index 000000000..00180c45f --- /dev/null +++ b/src/patches/linux-3.14.22-dvbsky.patch @@ -0,0 +1,6558 @@ +diff --git a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kconfig +index dd12a1e..969cd15 100644 +--- a/drivers/media/dvb-frontends/Kconfig ++++ b/drivers/media/dvb-frontends/Kconfig +@@ -726,6 +726,20 @@ config DVB_TDA665x + Currently supported tuners: + * Panasonic ENV57H12D5 (ET-50DT) + ++config DVB_DVBSKY_M88DS3103 ++ tristate "Montage M88DS3103 based(DVBSky)" ++ depends on DVB_CORE && I2C ++ default m if !MEDIA_SUBDRV_AUTOSELECT ++ help ++ A DVB-S/S2 tuner module. Say Y when you want to support this frontend. ++ ++config DVB_M88DC2800 ++ tristate "Montage M88DC2800 based" ++ depends on DVB_CORE && I2C ++ default m if !MEDIA_SUBDRV_AUTOSELECT ++ help ++ A DVB-C tuner module. Say Y when you want to support this frontend. ++ + config DVB_IX2505V + tristate "Sharp IX2505V silicon tuner" + depends on DVB_CORE && I2C +diff --git a/drivers/media/dvb-frontends/Makefile b/drivers/media/dvb-frontends/Makefile +index 0c75a6a..37c57f9 100644 +--- a/drivers/media/dvb-frontends/Makefile ++++ b/drivers/media/dvb-frontends/Makefile +@@ -106,3 +106,5 @@ obj-$(CONFIG_DVB_RTL2832) += rtl2832.o + obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o + obj-$(CONFIG_DVB_AF9033) += af9033.o + ++obj-$(CONFIG_DVB_DVBSKY_M88DS3103) += dvbsky_m88ds3103.o ++obj-$(CONFIG_DVB_M88DC2800) += m88dc2800.o +diff --git a/drivers/media/dvb-frontends/dvbsky_m88ds3103.c b/drivers/media/dvb-frontends/dvbsky_m88ds3103.c +new file mode 100644 +index 0000000..5ad1157 +--- /dev/null ++++ b/drivers/media/dvb-frontends/dvbsky_m88ds3103.c +@@ -0,0 +1,1723 @@ ++/* ++ Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver ++ ++ Copyright (C) 2011 Max nibble ++ Copyright (C) 2010 Montage Technology ++ Copyright (C) 2009 Konstantin Dimitrov. ++ ++ 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 ++#include ++#include ++#include ++#include ++#include ++ ++#include "dvb_frontend.h" ++#include "dvbsky_m88ds3103.h" ++#include "dvbsky_m88ds3103_priv.h" ++ ++static int debug; ++module_param(debug, int, 0644); ++MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)"); ++ ++#define dprintk(args...) \ ++ do { \ ++ if (debug) \ ++ printk(KERN_INFO "m88ds3103: " args); \ ++ } while (0) ++ ++#define _AUTO_S2_ ++ ++/*demod register operations.*/ ++static int m88ds3103_writereg(struct m88ds3103_state *state, int reg, int data) ++{ ++ u8 buf[] = { reg, data }; ++ struct i2c_msg msg = { .addr = state->config->demod_address, ++ .flags = 0, .buf = buf, .len = 2 }; ++ int err; ++ ++ if (debug > 1) ++ printk("m88ds3103: %s: write reg 0x%02x, value 0x%02x\n", ++ __func__, reg, data); ++ ++ err = i2c_transfer(state->i2c, &msg, 1); ++ if (err != 1) { ++ printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x," ++ " value == 0x%02x)\n", __func__, err, reg, data); ++ return -EREMOTEIO; ++ } ++ return 0; ++} ++ ++static int m88ds3103_readreg(struct m88ds3103_state *state, u8 reg) ++{ ++ int ret; ++ u8 b0[] = { reg }; ++ u8 b1[] = { 0 }; ++ struct i2c_msg msg[] = { ++ { .addr = state->config->demod_address, .flags = 0, ++ .buf = b0, .len = 1 }, ++ { .addr = state->config->demod_address, .flags = I2C_M_RD, ++ .buf = b1, .len = 1 } ++ }; ++ ret = i2c_transfer(state->i2c, msg, 2); ++ ++ if (ret != 2) { ++ printk(KERN_ERR "%s: reg=0x%x (error=%d)\n", ++ __func__, reg, ret); ++ return ret; ++ } ++ ++ if (debug > 1) ++ printk(KERN_INFO "m88ds3103: read reg 0x%02x, value 0x%02x\n", ++ reg, b1[0]); ++ ++ return b1[0]; ++} ++ ++/*tuner register operations.*/ ++static int m88ds3103_tuner_writereg(struct m88ds3103_state *state, int reg, int data) ++{ ++ u8 buf[] = { reg, data }; ++ struct i2c_msg msg = { .addr = 0x60, ++ .flags = 0, .buf = buf, .len = 2 }; ++ int err; ++ ++ m88ds3103_writereg(state, 0x03, 0x11); ++ err = i2c_transfer(state->i2c, &msg, 1); ++ ++ if (err != 1) { ++ printk("%s: writereg error(err == %i, reg == 0x%02x," ++ " value == 0x%02x)\n", __func__, err, reg, data); ++ return -EREMOTEIO; ++ } ++ ++ return 0; ++} ++ ++static int m88ds3103_tuner_readreg(struct m88ds3103_state *state, u8 reg) ++{ ++ int ret; ++ u8 b0[] = { reg }; ++ u8 b1[] = { 0 }; ++ struct i2c_msg msg[] = { ++ { .addr = 0x60, .flags = 0, ++ .buf = b0, .len = 1 }, ++ { .addr = 0x60, .flags = I2C_M_RD, ++ .buf = b1, .len = 1 } ++ }; ++ ++ m88ds3103_writereg(state, 0x03, (0x11 + state->config->tuner_readstops)); ++ ret = i2c_transfer(state->i2c, msg, 2); ++ ++ if (ret != 2) { ++ printk(KERN_ERR "%s: reg=0x%x(error=%d)\n", __func__, reg, ret); ++ return ret; ++ } ++ ++ return b1[0]; ++} ++ ++/* Bulk demod I2C write, for firmware download. */ ++static int m88ds3103_writeregN(struct m88ds3103_state *state, int reg, ++ const u8 *data, u16 len) ++{ ++ int ret = -EREMOTEIO; ++ struct i2c_msg msg; ++ u8 *buf; ++ ++ buf = kmalloc(len + 1, GFP_KERNEL); ++ if (buf == NULL) { ++ printk("Unable to kmalloc\n"); ++ ret = -ENOMEM; ++ goto error; ++ } ++ ++ *(buf) = reg; ++ memcpy(buf + 1, data, len); ++ ++ msg.addr = state->config->demod_address; ++ msg.flags = 0; ++ msg.buf = buf; ++ msg.len = len + 1; ++ ++ if (debug > 1) ++ printk(KERN_INFO "m88ds3103: %s: write regN 0x%02x, len = %d\n", ++ __func__, reg, len); ++ ++ ret = i2c_transfer(state->i2c, &msg, 1); ++ if (ret != 1) { ++ printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x\n", ++ __func__, ret, reg); ++ ret = -EREMOTEIO; ++ } ++ ++error: ++ kfree(buf); ++ ++ return ret; ++} ++ ++static int m88ds3103_load_firmware(struct dvb_frontend *fe) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ const struct firmware *fw; ++ int i, ret = 0; ++ ++ dprintk("%s()\n", __func__); ++ ++ if (state->skip_fw_load) ++ return 0; ++ /* Load firmware */ ++ /* request the firmware, this will block until someone uploads it */ ++ if(state->demod_id == DS3000_ID){ ++ printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__, ++ DS3000_DEFAULT_FIRMWARE); ++ ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE, ++ state->i2c->dev.parent); ++ }else if(state->demod_id == DS3103_ID){ ++ printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__, ++ DS3103_DEFAULT_FIRMWARE); ++ ret = request_firmware(&fw, DS3103_DEFAULT_FIRMWARE, ++ state->i2c->dev.parent); ++ } ++ ++ printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__); ++ if (ret) { ++ printk(KERN_ERR "%s: No firmware uploaded (timeout or file not " ++ "found?)\n", __func__); ++ return ret; ++ } ++ ++ /* Make sure we don't recurse back through here during loading */ ++ state->skip_fw_load = 1; ++ ++ dprintk("Firmware is %zu bytes (%02x %02x .. %02x %02x)\n", ++ fw->size, ++ fw->data[0], ++ fw->data[1], ++ fw->data[fw->size - 2], ++ fw->data[fw->size - 1]); ++ ++ /* stop internal mcu. */ ++ m88ds3103_writereg(state, 0xb2, 0x01); ++ /* split firmware to download.*/ ++ for(i = 0; i < FW_DOWN_LOOP; i++){ ++ ret = m88ds3103_writeregN(state, 0xb0, &(fw->data[FW_DOWN_SIZE*i]), FW_DOWN_SIZE); ++ if(ret != 1) break; ++ } ++ /* start internal mcu. */ ++ if(ret == 1) ++ m88ds3103_writereg(state, 0xb2, 0x00); ++ ++ release_firmware(fw); ++ ++ dprintk("%s: Firmware upload %s\n", __func__, ++ ret == 1 ? "complete" : "failed"); ++ ++ if(ret == 1) ret = 0; ++ ++ /* Ensure firmware is always loaded if required */ ++ state->skip_fw_load = 0; ++ ++ return ret; ++} ++ ++ ++static int m88ds3103_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ u8 data; ++ ++ dprintk("%s(%d)\n", __func__, voltage); ++ ++ dprintk("m88ds3103:pin_ctrl = (%02x)\n", state->config->pin_ctrl); ++ ++ if(state->config->set_voltage) ++ state->config->set_voltage(fe, voltage); ++ ++ data = m88ds3103_readreg(state, 0xa2); ++ ++ if(state->config->pin_ctrl & 0x80){ /*If control pin is assigned.*/ ++ data &= ~0x03; /* bit0 V/H, bit1 off/on */ ++ if(state->config->pin_ctrl & 0x02) ++ data |= 0x02; ++ ++ switch (voltage) { ++ case SEC_VOLTAGE_18: ++ if((state->config->pin_ctrl & 0x01) == 0) ++ data |= 0x01; ++ break; ++ case SEC_VOLTAGE_13: ++ if(state->config->pin_ctrl & 0x01) ++ data |= 0x01; ++ break; ++ case SEC_VOLTAGE_OFF: ++ if(state->config->pin_ctrl & 0x02) ++ data &= ~0x02; ++ else ++ data |= 0x02; ++ break; ++ } ++ } ++ ++ m88ds3103_writereg(state, 0xa2, data); ++ ++ return 0; ++} ++ ++static int m88ds3103_read_status(struct dvb_frontend *fe, fe_status_t* status) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ int lock = 0; ++ ++ *status = 0; ++ ++ switch (state->delivery_system){ ++ case SYS_DVBS: ++ lock = m88ds3103_readreg(state, 0xd1); ++ dprintk("%s: SYS_DVBS status=%x.\n", __func__, lock); ++ ++ if ((lock & 0x07) == 0x07){ ++ /*if((m88ds3103_readreg(state, 0x0d) & 0x07) == 0x07)*/ ++ *status = FE_HAS_SIGNAL | FE_HAS_CARRIER ++ | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK; ++ ++ } ++ break; ++ case SYS_DVBS2: ++ lock = m88ds3103_readreg(state, 0x0d); ++ dprintk("%s: SYS_DVBS2 status=%x.\n", __func__, lock); ++ ++ if ((lock & 0x8f) == 0x8f) ++ *status = FE_HAS_SIGNAL | FE_HAS_CARRIER ++ | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK; ++ ++ break; ++ default: ++ break; ++ } ++ ++ return 0; ++} ++ ++static int m88ds3103_read_ber(struct dvb_frontend *fe, u32* ber) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ u8 tmp1, tmp2, tmp3; ++ u32 ldpc_frame_cnt, pre_err_packags, code_rate_fac = 0; ++ ++ dprintk("%s()\n", __func__); ++ ++ switch (state->delivery_system) { ++ case SYS_DVBS: ++ m88ds3103_writereg(state, 0xf9, 0x04); ++ tmp3 = m88ds3103_readreg(state, 0xf8); ++ if ((tmp3&0x10) == 0){ ++ tmp1 = m88ds3103_readreg(state, 0xf7); ++ tmp2 = m88ds3103_readreg(state, 0xf6); ++ tmp3 |= 0x10; ++ m88ds3103_writereg(state, 0xf8, tmp3); ++ state->preBer = (tmp1<<8) | tmp2; ++ } ++ break; ++ case SYS_DVBS2: ++ tmp1 = m88ds3103_readreg(state, 0x7e) & 0x0f; ++ switch(tmp1){ ++ case 0: code_rate_fac = 16008 - 80; break; ++ case 1: code_rate_fac = 21408 - 80; break; ++ case 2: code_rate_fac = 25728 - 80; break; ++ case 3: code_rate_fac = 32208 - 80; break; ++ case 4: code_rate_fac = 38688 - 80; break; ++ case 5: code_rate_fac = 43040 - 80; break; ++ case 6: code_rate_fac = 48408 - 80; break; ++ case 7: code_rate_fac = 51648 - 80; break; ++ case 8: code_rate_fac = 53840 - 80; break; ++ case 9: code_rate_fac = 57472 - 80; break; ++ case 10: code_rate_fac = 58192 - 80; break; ++ } ++ ++ tmp1 = m88ds3103_readreg(state, 0xd7) & 0xff; ++ tmp2 = m88ds3103_readreg(state, 0xd6) & 0xff; ++ tmp3 = m88ds3103_readreg(state, 0xd5) & 0xff; ++ ldpc_frame_cnt = (tmp1 << 16) | (tmp2 << 8) | tmp3; ++ ++ tmp1 = m88ds3103_readreg(state, 0xf8) & 0xff; ++ tmp2 = m88ds3103_readreg(state, 0xf7) & 0xff; ++ pre_err_packags = tmp1<<8 | tmp2; ++ ++ if (ldpc_frame_cnt > 1000){ ++ m88ds3103_writereg(state, 0xd1, 0x01); ++ m88ds3103_writereg(state, 0xf9, 0x01); ++ m88ds3103_writereg(state, 0xf9, 0x00); ++ m88ds3103_writereg(state, 0xd1, 0x00); ++ state->preBer = pre_err_packags; ++ } ++ break; ++ default: ++ break; ++ } ++ *ber = state->preBer; ++ ++ return 0; ++} ++ ++static int m88ds3103_read_signal_strength(struct dvb_frontend *fe, ++ u16 *signal_strength) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ u16 gain; ++ u8 gain1, gain2, gain3 = 0; ++ ++ dprintk("%s()\n", __func__); ++ ++ gain1 = m88ds3103_tuner_readreg(state, 0x3d) & 0x1f; ++ dprintk("%s: gain1 = 0x%02x \n", __func__, gain1); ++ ++ if (gain1 > 15) gain1 = 15; ++ gain2 = m88ds3103_tuner_readreg(state, 0x21) & 0x1f; ++ dprintk("%s: gain2 = 0x%02x \n", __func__, gain2); ++ ++ if(state->tuner_id == TS2022_ID){ ++ gain3 = (m88ds3103_tuner_readreg(state, 0x66)>>3) & 0x07; ++ dprintk("%s: gain3 = 0x%02x \n", __func__, gain3); ++ ++ if (gain2 > 16) gain2 = 16; ++ if (gain2 < 2) gain2 = 2; ++ if (gain3 > 6) gain3 = 6; ++ }else{ ++ if (gain2 > 13) gain2 = 13; ++ gain3 = 0; ++ } ++ ++ gain = gain1*23 + gain2*35 + gain3*29; ++ *signal_strength = 60000 - gain*55; ++ ++ return 0; ++} ++ ++ ++static int m88ds3103_read_snr(struct dvb_frontend *fe, u16 *p_snr) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ u8 val, npow1, npow2, spow1, cnt; ++ u16 tmp, snr; ++ u32 npow, spow, snr_total; ++ static const u16 mes_log10[] ={ ++ 0, 3010, 4771, 6021, 6990, 7781, 8451, 9031, 9542, 10000, ++ 10414, 10792, 11139, 11461, 11761, 12041, 12304, 12553, 12788, 13010, ++ 13222, 13424, 13617, 13802, 13979, 14150, 14314, 14472, 14624, 14771, ++ 14914, 15052, 15185, 15315, 15441, 15563, 15682, 15798, 15911, 16021, ++ 16128, 16232, 16335, 16435, 16532, 16628, 16721, 16812, 16902, 16990, ++ 17076, 17160, 17243, 17324, 17404, 17482, 17559, 17634, 17709, 17782, ++ 17853, 17924, 17993, 18062, 18129, 18195, 18261, 18325, 18388, 18451, ++ 18513, 18573, 18633, 18692, 18751, 18808, 18865, 18921, 18976, 19031 ++ }; ++ static const u16 mes_loge[] ={ ++ 0, 6931, 10986, 13863, 16094, 17918, 19459, 20794, 21972, 23026, ++ 23979, 24849, 25649, 26391, 27081, 27726, 28332, 28904, 29444, 29957, ++ 30445, 30910, 31355, 31781, 32189, 32581, 32958, 33322, 33673, 34012, ++ 34340, 34657, ++ }; ++ ++ dprintk("%s()\n", __func__); ++ ++ snr = 0; ++ ++ switch (state->delivery_system){ ++ case SYS_DVBS: ++ cnt = 10; snr_total = 0; ++ while(cnt > 0){ ++ val = m88ds3103_readreg(state, 0xff); ++ snr_total += val; ++ cnt--; ++ } ++ tmp = (u16)(snr_total/80); ++ if(tmp > 0){ ++ if (tmp > 32) tmp = 32; ++ snr = (mes_loge[tmp - 1] * 100) / 45; ++ }else{ ++ snr = 0; ++ } ++ break; ++ case SYS_DVBS2: ++ cnt = 10; npow = 0; spow = 0; ++ while(cnt >0){ ++ npow1 = m88ds3103_readreg(state, 0x8c) & 0xff; ++ npow2 = m88ds3103_readreg(state, 0x8d) & 0xff; ++ npow += (((npow1 & 0x3f) + (u16)(npow2 << 6)) >> 2); ++ ++ spow1 = m88ds3103_readreg(state, 0x8e) & 0xff; ++ spow += ((spow1 * spow1) >> 1); ++ cnt--; ++ } ++ npow /= 10; spow /= 10; ++ if(spow == 0){ ++ snr = 0; ++ }else if(npow == 0){ ++ snr = 19; ++ }else{ ++ if(spow > npow){ ++ tmp = (u16)(spow / npow); ++ if (tmp > 80) tmp = 80; ++ snr = mes_log10[tmp - 1]*3; ++ }else{ ++ tmp = (u16)(npow / spow); ++ if (tmp > 80) tmp = 80; ++ snr = -(mes_log10[tmp - 1] / 1000); ++ } ++ } ++ break; ++ default: ++ break; ++ } ++ *p_snr = snr; ++ ++ return 0; ++} ++ ++ ++static int m88ds3103_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ u8 tmp1, tmp2, tmp3, data; ++ ++ dprintk("%s()\n", __func__); ++ ++ switch (state->delivery_system) { ++ case SYS_DVBS: ++ data = m88ds3103_readreg(state, 0xf8); ++ data |= 0x40; ++ m88ds3103_writereg(state, 0xf8, data); ++ tmp1 = m88ds3103_readreg(state, 0xf5); ++ tmp2 = m88ds3103_readreg(state, 0xf4); ++ *ucblocks = (tmp1 <<8) | tmp2; ++ data &= ~0x20; ++ m88ds3103_writereg(state, 0xf8, data); ++ data |= 0x20; ++ m88ds3103_writereg(state, 0xf8, data); ++ data &= ~0x40; ++ m88ds3103_writereg(state, 0xf8, data); ++ break; ++ case SYS_DVBS2: ++ tmp1 = m88ds3103_readreg(state, 0xda); ++ tmp2 = m88ds3103_readreg(state, 0xd9); ++ tmp3 = m88ds3103_readreg(state, 0xd8); ++ *ucblocks = (tmp1 <<16)|(tmp2 <<8)|tmp3; ++ data = m88ds3103_readreg(state, 0xd1); ++ data |= 0x01; ++ m88ds3103_writereg(state, 0xd1, data); ++ data &= ~0x01; ++ m88ds3103_writereg(state, 0xd1, data); ++ break; ++ default: ++ break; ++ } ++ return 0; ++} ++ ++static int m88ds3103_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ u8 data_a1, data_a2; ++ ++ dprintk("%s(%d)\n", __func__, tone); ++ if ((tone != SEC_TONE_ON) && (tone != SEC_TONE_OFF)) { ++ printk(KERN_ERR "%s: Invalid, tone=%d\n", __func__, tone); ++ return -EINVAL; ++ } ++ ++ data_a1 = m88ds3103_readreg(state, 0xa1); ++ data_a2 = m88ds3103_readreg(state, 0xa2); ++ if(state->demod_id == DS3103_ID) ++ data_a2 &= 0xdf; /* Normal mode */ ++ switch (tone) { ++ case SEC_TONE_ON: ++ dprintk("%s: SEC_TONE_ON\n", __func__); ++ data_a1 |= 0x04; ++ data_a1 &= ~0x03; ++ data_a1 &= ~0x40; ++ data_a2 &= ~0xc0; ++ break; ++ case SEC_TONE_OFF: ++ dprintk("%s: SEC_TONE_OFF\n", __func__); ++ data_a2 &= ~0xc0; ++ data_a2 |= 0x80; ++ break; ++ } ++ m88ds3103_writereg(state, 0xa2, data_a2); ++ m88ds3103_writereg(state, 0xa1, data_a1); ++ return 0; ++} ++ ++static int m88ds3103_send_diseqc_msg(struct dvb_frontend *fe, ++ struct dvb_diseqc_master_cmd *d) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ int i, ret = 0; ++ u8 tmp, time_out; ++ ++ /* Dump DiSEqC message */ ++ if (debug) { ++ printk(KERN_INFO "m88ds3103: %s(", __func__); ++ for (i = 0 ; i < d->msg_len ;) { ++ printk(KERN_INFO "0x%02x", d->msg[i]); ++ if (++i < d->msg_len) ++ printk(KERN_INFO ", "); ++ } ++ } ++ ++ tmp = m88ds3103_readreg(state, 0xa2); ++ tmp &= ~0xc0; ++ if(state->demod_id == DS3103_ID) ++ tmp &= ~0x20; ++ m88ds3103_writereg(state, 0xa2, tmp); ++ ++ for (i = 0; i < d->msg_len; i ++) ++ m88ds3103_writereg(state, (0xa3+i), d->msg[i]); ++ ++ tmp = m88ds3103_readreg(state, 0xa1); ++ tmp &= ~0x38; ++ tmp &= ~0x40; ++ tmp |= ((d->msg_len-1) << 3) | 0x07; ++ tmp &= ~0x80; ++ m88ds3103_writereg(state, 0xa1, tmp); ++ /* 1.5 * 9 * 8 = 108ms */ ++ time_out = 150; ++ while (time_out > 0){ ++ msleep(10); ++ time_out -= 10; ++ tmp = m88ds3103_readreg(state, 0xa1); ++ if ((tmp & 0x40) == 0) ++ break; ++ } ++ if (time_out == 0){ ++ tmp = m88ds3103_readreg(state, 0xa1); ++ tmp &= ~0x80; ++ tmp |= 0x40; ++ m88ds3103_writereg(state, 0xa1, tmp); ++ ret = 1; ++ } ++ tmp = m88ds3103_readreg(state, 0xa2); ++ tmp &= ~0xc0; ++ tmp |= 0x80; ++ m88ds3103_writereg(state, 0xa2, tmp); ++ return ret; ++} ++ ++ ++static int m88ds3103_diseqc_send_burst(struct dvb_frontend *fe, ++ fe_sec_mini_cmd_t burst) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ u8 val, time_out; ++ ++ dprintk("%s()\n", __func__); ++ ++ val = m88ds3103_readreg(state, 0xa2); ++ val &= ~0xc0; ++ if(state->demod_id == DS3103_ID) ++ val &= 0xdf; /* Normal mode */ ++ m88ds3103_writereg(state, 0xa2, val); ++ /* DiSEqC burst */ ++ if (burst == SEC_MINI_B) ++ m88ds3103_writereg(state, 0xa1, 0x01); ++ else ++ m88ds3103_writereg(state, 0xa1, 0x02); ++ ++ msleep(13); ++ ++ time_out = 5; ++ do{ ++ val = m88ds3103_readreg(state, 0xa1); ++ if ((val & 0x40) == 0) ++ break; ++ msleep(1); ++ time_out --; ++ } while (time_out > 0); ++ ++ val = m88ds3103_readreg(state, 0xa2); ++ val &= ~0xc0; ++ val |= 0x80; ++ m88ds3103_writereg(state, 0xa2, val); ++ ++ return 0; ++} ++ ++static void m88ds3103_release(struct dvb_frontend *fe) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ ++ dprintk("%s\n", __func__); ++ kfree(state); ++} ++ ++static int m88ds3103_check_id(struct m88ds3103_state *state) ++{ ++ int val_00, val_01; ++ ++ /*check demod id*/ ++ val_01 = m88ds3103_readreg(state, 0x01); ++ printk(KERN_INFO "DS3000 chip version: %x attached.\n", val_01); ++ ++ if(val_01 == 0xD0) ++ state->demod_id = DS3103_ID; ++ else if(val_01 == 0xC0) ++ state->demod_id = DS3000_ID; ++ else ++ state->demod_id = UNKNOW_ID; ++ ++ /*check tuner id*/ ++ val_00 = m88ds3103_tuner_readreg(state, 0x00); ++ printk(KERN_INFO "TS202x chip version[1]: %x attached.\n", val_00); ++ val_00 &= 0x03; ++ if(val_00 == 0) ++ { ++ m88ds3103_tuner_writereg(state, 0x00, 0x01); ++ msleep(3); ++ } ++ m88ds3103_tuner_writereg(state, 0x00, 0x03); ++ msleep(5); ++ ++ val_00 = m88ds3103_tuner_readreg(state, 0x00); ++ printk(KERN_INFO "TS202x chip version[2]: %x attached.\n", val_00); ++ val_00 &= 0xff; ++ if((val_00 == 0x01) || (val_00 == 0x41) || (val_00 == 0x81)) ++ state->tuner_id = TS2020_ID; ++ else if(((val_00 & 0xc0)== 0xc0) || (val_00 == 0x83)) ++ state->tuner_id = TS2022_ID; ++ else ++ state->tuner_id = UNKNOW_ID; ++ ++ return state->demod_id; ++} ++ ++static struct dvb_frontend_ops m88ds3103_ops; ++static int m88ds3103_initilaze(struct dvb_frontend *fe); ++ ++struct dvb_frontend *dvbsky_m88ds3103_attach(const struct dvbsky_m88ds3103_config *config, ++ struct i2c_adapter *i2c) ++{ ++ struct m88ds3103_state *state = NULL; ++ ++ dprintk("%s\n", __func__); ++ ++ /* allocate memory for the internal state */ ++ state = kzalloc(sizeof(struct m88ds3103_state), GFP_KERNEL); ++ if (state == NULL) { ++ printk(KERN_ERR "Unable to kmalloc\n"); ++ goto error2; ++ } ++ ++ state->config = config; ++ state->i2c = i2c; ++ state->preBer = 0xffff; ++ state->delivery_system = SYS_DVBS; /*Default to DVB-S.*/ ++ ++ /* check demod id */ ++ if(m88ds3103_check_id(state) == UNKNOW_ID){ ++ printk(KERN_ERR "Unable to find Montage chip\n"); ++ goto error3; ++ } ++ ++ memcpy(&state->frontend.ops, &m88ds3103_ops, ++ sizeof(struct dvb_frontend_ops)); ++ state->frontend.demodulator_priv = state; ++ ++ m88ds3103_initilaze(&state->frontend); ++ ++ return &state->frontend; ++ ++error3: ++ kfree(state); ++error2: ++ return NULL; ++} ++EXPORT_SYMBOL(dvbsky_m88ds3103_attach); ++ ++static int m88ds3103_set_carrier_offset(struct dvb_frontend *fe, ++ s32 carrier_offset_khz) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ s32 tmp; ++ ++ tmp = carrier_offset_khz; ++ tmp *= 65536; ++ ++ tmp = (2*tmp + MT_FE_MCLK_KHZ) / (2*MT_FE_MCLK_KHZ); ++ ++ if (tmp < 0) ++ tmp += 65536; ++ ++ m88ds3103_writereg(state, 0x5f, tmp >> 8); ++ m88ds3103_writereg(state, 0x5e, tmp & 0xff); ++ ++ return 0; ++} ++ ++static int m88ds3103_set_symrate(struct dvb_frontend *fe) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ struct dtv_frontend_properties *c = &fe->dtv_property_cache; ++ u16 value; ++ ++ value = (((c->symbol_rate / 1000) << 15) + (MT_FE_MCLK_KHZ / 4)) / (MT_FE_MCLK_KHZ / 2); ++ m88ds3103_writereg(state, 0x61, value & 0x00ff); ++ m88ds3103_writereg(state, 0x62, (value & 0xff00) >> 8); ++ ++ return 0; ++} ++ ++static int m88ds3103_set_CCI(struct dvb_frontend *fe) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ u8 tmp; ++ ++ tmp = m88ds3103_readreg(state, 0x56); ++ tmp &= ~0x01; ++ m88ds3103_writereg(state, 0x56, tmp); ++ ++ tmp = m88ds3103_readreg(state, 0x76); ++ tmp &= ~0x80; ++ m88ds3103_writereg(state, 0x76, tmp); ++ ++ return 0; ++} ++ ++static int m88ds3103_init_reg(struct m88ds3103_state *state, const u8 *p_reg_tab, u32 size) ++{ ++ u32 i; ++ ++ for(i = 0; i < size; i+=2) ++ m88ds3103_writereg(state, p_reg_tab[i], p_reg_tab[i+1]); ++ ++ return 0; ++} ++ ++static int m88ds3103_get_locked_sym_rate(struct m88ds3103_state *state, u32 *sym_rate_KSs) ++{ ++ u16 tmp; ++ u32 sym_rate_tmp; ++ u8 val_0x6d, val_0x6e; ++ ++ val_0x6d = m88ds3103_readreg(state, 0x6d); ++ val_0x6e = m88ds3103_readreg(state, 0x6e); ++ ++ tmp = (u16)((val_0x6e<<8) | val_0x6d); ++ ++ sym_rate_tmp = (u32)(tmp * MT_FE_MCLK_KHZ); ++ sym_rate_tmp = (u32)(sym_rate_tmp / (1<<16)); ++ *sym_rate_KSs = sym_rate_tmp; ++ ++ return 0; ++} ++ ++static int m88ds3103_get_channel_info(struct m88ds3103_state *state, u8 *p_mode, u8 *p_coderate) ++{ ++ u8 tmp, val_0x7E; ++ ++ if(state->delivery_system == SYS_DVBS2){ ++ val_0x7E = m88ds3103_readreg(state, 0x7e); ++ tmp = (u8)((val_0x7E&0xC0) >> 6); ++ *p_mode = tmp; ++ tmp = (u8)(val_0x7E & 0x0f); ++ *p_coderate = tmp; ++ } else { ++ *p_mode = 0; ++ tmp = m88ds3103_readreg(state, 0xe6); ++ tmp = (u8)(tmp >> 5); ++ *p_coderate = tmp; ++ } ++ ++ return 0; ++} ++ ++static int m88ds3103_set_clock_ratio(struct m88ds3103_state *state) ++{ ++ u8 val, mod_fac, tmp1, tmp2; ++ u32 input_datarate, locked_sym_rate_KSs; ++ u32 MClk_KHz = 96000; ++ u8 mod_mode, code_rate, divid_ratio = 0; ++ ++ locked_sym_rate_KSs = 0; ++ m88ds3103_get_locked_sym_rate(state, &locked_sym_rate_KSs); ++ if(locked_sym_rate_KSs == 0) ++ return 0; ++ ++ m88ds3103_get_channel_info(state, &mod_mode, &code_rate); ++ ++ if (state->delivery_system == SYS_DVBS2) ++ { ++ switch(mod_mode) { ++ case 1: mod_fac = 3; break; ++ case 2: mod_fac = 4; break; ++ case 3: mod_fac = 5; break; ++ default: mod_fac = 2; break; ++ } ++ ++ switch(code_rate) { ++ case 0: input_datarate = locked_sym_rate_KSs*mod_fac/8/4; break; ++ case 1: input_datarate = locked_sym_rate_KSs*mod_fac/8/3; break; ++ case 2: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/5; break; ++ case 3: input_datarate = locked_sym_rate_KSs*mod_fac/8/2; break; ++ case 4: input_datarate = locked_sym_rate_KSs*mod_fac*3/8/5; break; ++ case 5: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/3; break; ++ case 6: input_datarate = locked_sym_rate_KSs*mod_fac*3/8/4; break; ++ case 7: input_datarate = locked_sym_rate_KSs*mod_fac*4/8/5; break; ++ case 8: input_datarate = locked_sym_rate_KSs*mod_fac*5/8/6; break; ++ case 9: input_datarate = locked_sym_rate_KSs*mod_fac*8/8/9; break; ++ case 10: input_datarate = locked_sym_rate_KSs*mod_fac*9/8/10; break; ++ default: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/3; break; ++ } ++ ++ if(state->demod_id == DS3000_ID) ++ input_datarate = input_datarate * 115 / 100; ++ ++ if(input_datarate < 4800) {tmp1 = 15;tmp2 = 15;} //4.8MHz TS clock ++ else if(input_datarate < 4966) {tmp1 = 14;tmp2 = 15;} //4.966MHz TS clock ++ else if(input_datarate < 5143) {tmp1 = 14;tmp2 = 14;} //5.143MHz TS clock ++ else if(input_datarate < 5333) {tmp1 = 13;tmp2 = 14;} //5.333MHz TS clock ++ else if(input_datarate < 5538) {tmp1 = 13;tmp2 = 13;} //5.538MHz TS clock ++ else if(input_datarate < 5760) {tmp1 = 12;tmp2 = 13;} //5.76MHz TS clock allan 0809 ++ else if(input_datarate < 6000) {tmp1 = 12;tmp2 = 12;} //6MHz TS clock ++ else if(input_datarate < 6260) {tmp1 = 11;tmp2 = 12;} //6.26MHz TS clock ++ else if(input_datarate < 6545) {tmp1 = 11;tmp2 = 11;} //6.545MHz TS clock ++ else if(input_datarate < 6857) {tmp1 = 10;tmp2 = 11;} //6.857MHz TS clock ++ else if(input_datarate < 7200) {tmp1 = 10;tmp2 = 10;} //7.2MHz TS clock ++ else if(input_datarate < 7578) {tmp1 = 9;tmp2 = 10;} //7.578MHz TS clock ++ else if(input_datarate < 8000) {tmp1 = 9;tmp2 = 9;} //8MHz TS clock ++ else if(input_datarate < 8470) {tmp1 = 8;tmp2 = 9;} //8.47MHz TS clock ++ else if(input_datarate < 9000) {tmp1 = 8;tmp2 = 8;} //9MHz TS clock ++ else if(input_datarate < 9600) {tmp1 = 7;tmp2 = 8;} //9.6MHz TS clock ++ else if(input_datarate < 10285) {tmp1 = 7;tmp2 = 7;} //10.285MHz TS clock ++ else if(input_datarate < 12000) {tmp1 = 6;tmp2 = 6;} //12MHz TS clock ++ else if(input_datarate < 14400) {tmp1 = 5;tmp2 = 5;} //14.4MHz TS clock ++ else if(input_datarate < 18000) {tmp1 = 4;tmp2 = 4;} //18MHz TS clock ++ else {tmp1 = 3;tmp2 = 3;} //24MHz TS clock ++ ++ if(state->demod_id == DS3000_ID) { ++ val = (u8)((tmp1<<4) + tmp2); ++ m88ds3103_writereg(state, 0xfe, val); ++ } else { ++ tmp1 = m88ds3103_readreg(state, 0x22); ++ tmp2 = m88ds3103_readreg(state, 0x24); ++ ++ tmp1 >>= 6; ++ tmp1 &= 0x03; ++ tmp2 >>= 6; ++ tmp2 &= 0x03; ++ ++ if((tmp1 == 0x00) && (tmp2 == 0x01)) ++ MClk_KHz = 144000; ++ else if((tmp1 == 0x00) && (tmp2 == 0x03)) ++ MClk_KHz = 72000; ++ else if((tmp1 == 0x01) && (tmp2 == 0x01)) ++ MClk_KHz = 115200; ++ else if((tmp1 == 0x02) && (tmp2 == 0x01)) ++ MClk_KHz = 96000; ++ else if((tmp1 == 0x03) && (tmp2 == 0x00)) ++ MClk_KHz = 192000; ++ else ++ return 0; ++ ++ if(input_datarate < 5200) /*Max. 2011-12-23 11:55*/ ++ input_datarate = 5200; ++ ++ if(input_datarate != 0) ++ divid_ratio = (u8)(MClk_KHz / input_datarate); ++ else ++ divid_ratio = 0xFF; ++ ++ if(divid_ratio > 128) ++ divid_ratio = 128; ++ ++ if(divid_ratio < 2) ++ divid_ratio = 2; ++ ++ tmp1 = (u8)(divid_ratio / 2); ++ tmp2 = (u8)(divid_ratio / 2); ++ ++ if((divid_ratio % 2) != 0) ++ tmp2 += 1; ++ ++ tmp1 -= 1; ++ tmp2 -= 1; ++ ++ tmp1 &= 0x3f; ++ tmp2 &= 0x3f; ++ ++ val = m88ds3103_readreg(state, 0xfe); ++ val &= 0xF0; ++ val |= (tmp2 >> 2) & 0x0f; ++ m88ds3103_writereg(state, 0xfe, val); ++ ++ val = (u8)((tmp2 & 0x03) << 6); ++ val |= tmp1; ++ m88ds3103_writereg(state, 0xea, val); ++ } ++ } else { ++ mod_fac = 2; ++ ++ switch(code_rate) { ++ case 4: input_datarate = locked_sym_rate_KSs*mod_fac/2/8; break; ++ case 3: input_datarate = locked_sym_rate_KSs*mod_fac*2/3/8; break; ++ case 2: input_datarate = locked_sym_rate_KSs*mod_fac*3/4/8; break; ++ case 1: input_datarate = locked_sym_rate_KSs*mod_fac*5/6/8; break; ++ case 0: input_datarate = locked_sym_rate_KSs*mod_fac*7/8/8; break; ++ default: input_datarate = locked_sym_rate_KSs*mod_fac*3/4/8; break; ++ } ++ ++ if(state->demod_id == DS3000_ID) ++ input_datarate = input_datarate * 115 / 100; ++ ++ if(input_datarate < 6857) {tmp1 = 7;tmp2 = 7;} //6.857MHz TS clock ++ else if(input_datarate < 7384) {tmp1 = 6;tmp2 = 7;} //7.384MHz TS clock ++ else if(input_datarate < 8000) {tmp1 = 6;tmp2 = 6;} //8MHz TS clock ++ else if(input_datarate < 8727) {tmp1 = 5;tmp2 = 6;} //8.727MHz TS clock ++ else if(input_datarate < 9600) {tmp1 = 5;tmp2 = 5;} //9.6MHz TS clock ++ else if(input_datarate < 10666) {tmp1 = 4;tmp2 = 5;} //10.666MHz TS clock ++ else if(input_datarate < 12000) {tmp1 = 4;tmp2 = 4;} //12MHz TS clock ++ else if(input_datarate < 13714) {tmp1 = 3;tmp2 = 4;} //13.714MHz TS clock ++ else if(input_datarate < 16000) {tmp1 = 3;tmp2 = 3;} //16MHz TS clock ++ else if(input_datarate < 19200) {tmp1 = 2;tmp2 = 3;} //19.2MHz TS clock ++ else {tmp1 = 2;tmp2 = 2;} //24MHz TS clock ++ ++ if(state->demod_id == DS3000_ID) { ++ val = m88ds3103_readreg(state, 0xfe); ++ val &= 0xc0; ++ val |= ((u8)((tmp1<<3) + tmp2)); ++ m88ds3103_writereg(state, 0xfe, val); ++ } else { ++ if(input_datarate < 5200) /*Max. 2011-12-23 11:55*/ ++ input_datarate = 5200; ++ ++ if(input_datarate != 0) ++ divid_ratio = (u8)(MClk_KHz / input_datarate); ++ else ++ divid_ratio = 0xFF; ++ ++ if(divid_ratio > 128) ++ divid_ratio = 128; ++ ++ if(divid_ratio < 2) ++ divid_ratio = 2; ++ ++ tmp1 = (u8)(divid_ratio / 2); ++ tmp2 = (u8)(divid_ratio / 2); ++ ++ if((divid_ratio % 2) != 0) ++ tmp2 += 1; ++ ++ tmp1 -= 1; ++ tmp2 -= 1; ++ ++ tmp1 &= 0x3f; ++ tmp2 &= 0x3f; ++ ++ val = m88ds3103_readreg(state, 0xfe); ++ val &= 0xF0; ++ val |= (tmp2 >> 2) & 0x0f; ++ m88ds3103_writereg(state, 0xfe, val); ++ ++ val = (u8)((tmp2 & 0x03) << 6); ++ val |= tmp1; ++ m88ds3103_writereg(state, 0xea, val); ++ } ++ } ++ return 0; ++} ++ ++static int m88ds3103_demod_connect(struct dvb_frontend *fe, s32 carrier_offset_khz) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ struct dtv_frontend_properties *c = &fe->dtv_property_cache; ++ u16 value; ++ u8 val1,val2,data; ++ ++ dprintk("connect delivery system = %d\n", state->delivery_system); ++ ++ /* ds3000 global reset */ ++ m88ds3103_writereg(state, 0x07, 0x80); ++ m88ds3103_writereg(state, 0x07, 0x00); ++ /* ds3000 build-in uC reset */ ++ m88ds3103_writereg(state, 0xb2, 0x01); ++ /* ds3000 software reset */ ++ m88ds3103_writereg(state, 0x00, 0x01); ++ ++ switch (state->delivery_system) { ++ case SYS_DVBS: ++ /* initialise the demod in DVB-S mode */ ++ if(state->demod_id == DS3000_ID){ ++ m88ds3103_init_reg(state, ds3000_dvbs_init_tab, sizeof(ds3000_dvbs_init_tab)); ++ ++ value = m88ds3103_readreg(state, 0xfe); ++ value &= 0xc0; ++ value |= 0x1b; ++ m88ds3103_writereg(state, 0xfe, value); ++ ++ if(state->config->ci_mode) ++ val1 = 0x80; ++ else if(state->config->ts_mode) ++ val1 = 0x60; ++ else ++ val1 = 0x20; ++ m88ds3103_writereg(state, 0xfd, val1); ++ ++ }else if(state->demod_id == DS3103_ID){ ++ m88ds3103_init_reg(state, ds3103_dvbs_init_tab, sizeof(ds3103_dvbs_init_tab)); ++ ++ /* set ts clock */ ++ if(state->config->ci_mode == 2){ ++ val1 = 6; val2 = 6; ++ }else if(state->config->ts_mode == 0) { ++ val1 = 3; val2 = 3; ++ }else{ ++ val1 = 0; val2 = 0; ++ } ++ val1 -= 1; val2 -= 1; ++ val1 &= 0x3f; val2 &= 0x3f; ++ data = m88ds3103_readreg(state, 0xfe); ++ data &= 0xf0; ++ data |= (val2 >> 2) & 0x0f; ++ m88ds3103_writereg(state, 0xfe, data); ++ data = (val2 & 0x03) << 6; ++ data |= val1; ++ m88ds3103_writereg(state, 0xea, data); ++ ++ m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d)); ++ m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30)); ++ ++ /* set master clock */ ++ val1 = m88ds3103_readreg(state, 0x22); ++ val2 = m88ds3103_readreg(state, 0x24); ++ ++ val1 &= 0x3f; ++ val2 &= 0x3f; ++ val1 |= 0x80; ++ val2 |= 0x40; ++ ++ m88ds3103_writereg(state, 0x22, val1); ++ m88ds3103_writereg(state, 0x24, val2); ++ ++ if(state->config->ci_mode){ ++ if(state->config->ci_mode == 2) ++ val1 = 0x43; ++ else ++ val1 = 0x03; ++ } ++ else if(state->config->ts_mode) ++ val1 = 0x06; ++ else ++ val1 = 0x42; ++ m88ds3103_writereg(state, 0xfd, val1); ++ } ++ break; ++ case SYS_DVBS2: ++ /* initialise the demod in DVB-S2 mode */ ++ if(state->demod_id == DS3000_ID){ ++ m88ds3103_init_reg(state, ds3000_dvbs2_init_tab, sizeof(ds3000_dvbs2_init_tab)); ++ ++ if (c->symbol_rate >= 30000000) ++ m88ds3103_writereg(state, 0xfe, 0x54); ++ else ++ m88ds3103_writereg(state, 0xfe, 0x98); ++ ++ }else if(state->demod_id == DS3103_ID){ ++ m88ds3103_init_reg(state, ds3103_dvbs2_init_tab, sizeof(ds3103_dvbs2_init_tab)); ++ ++ /* set ts clock */ ++ if(state->config->ci_mode == 2){ ++ val1 = 6; val2 = 6; ++ }else if(state->config->ts_mode == 0){ ++ val1 = 5; val2 = 4; ++ }else{ ++ val1 = 0; val2 = 0; ++ } ++ val1 -= 1; val2 -= 1; ++ val1 &= 0x3f; val2 &= 0x3f; ++ data = m88ds3103_readreg(state, 0xfe); ++ data &= 0xf0; ++ data |= (val2 >> 2) & 0x0f; ++ m88ds3103_writereg(state, 0xfe, data); ++ data = (val2 & 0x03) << 6; ++ data |= val1; ++ m88ds3103_writereg(state, 0xea, data); ++ ++ m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d)); ++ m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30)); ++ ++ /* set master clock */ ++ val1 = m88ds3103_readreg(state, 0x22); ++ val2 = m88ds3103_readreg(state, 0x24); ++ ++ val1 &= 0x3f; ++ val2 &= 0x3f; ++ if((state->config->ci_mode == 2) || (state->config->ts_mode == 1)){ ++ val1 |= 0x80; ++ val2 |= 0x40; ++ }else{ ++ if (c->symbol_rate >= 28000000){ ++ val1 |= 0xc0; ++ }else if (c->symbol_rate >= 18000000){ ++ val2 |= 0x40; ++ }else{ ++ val1 |= 0x80; ++ val2 |= 0x40; ++ } ++ } ++ m88ds3103_writereg(state, 0x22, val1); ++ m88ds3103_writereg(state, 0x24, val2); ++ } ++ ++ if(state->config->ci_mode){ ++ if(state->config->ci_mode == 2) ++ val1 = 0x43; ++ else ++ val1 = 0x03; ++ } ++ else if(state->config->ts_mode) ++ val1 = 0x06; ++ else ++ val1 = 0x42; ++ m88ds3103_writereg(state, 0xfd, val1); ++ ++ break; ++ default: ++ return 1; ++ } ++ /* disable 27MHz clock output */ ++ m88ds3103_writereg(state, 0x29, 0x80); ++ /* enable ac coupling */ ++ m88ds3103_writereg(state, 0x25, 0x8a); ++ ++ if ((c->symbol_rate / 1000) <= 3000){ ++ m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 32 * 100 / 64 = 400*/ ++ m88ds3103_writereg(state, 0xc8, 0x20); ++ m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/ ++ m88ds3103_writereg(state, 0xc7, 0x00); ++ }else if((c->symbol_rate / 1000) <= 10000){ ++ m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 16 * 100 / 64 = 200*/ ++ m88ds3103_writereg(state, 0xc8, 0x10); ++ m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/ ++ m88ds3103_writereg(state, 0xc7, 0x00); ++ }else{ ++ m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 6 * 100 / 64 = 75*/ ++ m88ds3103_writereg(state, 0xc8, 0x06); ++ m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/ ++ m88ds3103_writereg(state, 0xc7, 0x00); ++ } ++ ++ m88ds3103_set_symrate(fe); ++ ++ m88ds3103_set_CCI(fe); ++ ++ m88ds3103_set_carrier_offset(fe, carrier_offset_khz); ++ ++ /* ds3000 out of software reset */ ++ m88ds3103_writereg(state, 0x00, 0x00); ++ /* start ds3000 build-in uC */ ++ m88ds3103_writereg(state, 0xb2, 0x00); ++ ++ return 0; ++} ++ ++static int m88ds3103_set_frontend(struct dvb_frontend *fe) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ struct dtv_frontend_properties *c = &fe->dtv_property_cache; ++ ++ int i; ++ fe_status_t status; ++ u8 lpf_mxdiv, mlpf_max, mlpf_min, nlpf, div4, capCode, changePLL; ++ s32 offset_khz, lpf_offset_KHz; ++ u16 value, ndiv, N, lpf_coeff; ++ u32 f3db, gdiv28, realFreq; ++ u8 RFgain; ++ ++ dprintk("%s() ", __func__); ++ dprintk("c frequency = %d\n", c->frequency); ++ dprintk("symbol rate = %d\n", c->symbol_rate); ++ dprintk("delivery system = %d\n", c->delivery_system); ++ ++ realFreq = c->frequency; ++ lpf_offset_KHz = 0; ++ if(c->symbol_rate < 5000000){ ++ lpf_offset_KHz = FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz; ++ realFreq += FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz; ++ } ++ ++ if (state->config->set_ts_params) ++ state->config->set_ts_params(fe, 0); ++ ++ div4 = 0; ++ RFgain = 0; ++ if(state->tuner_id == TS2022_ID){ ++ m88ds3103_tuner_writereg(state, 0x10, 0x0a); ++ m88ds3103_tuner_writereg(state, 0x11, 0x40); ++ if (realFreq < 1103000) { ++ m88ds3103_tuner_writereg(state, 0x10, 0x1b); ++ div4 = 1; ++ ndiv = (realFreq * (6 + 8) * 4)/MT_FE_CRYSTAL_KHZ; ++ }else { ++ ndiv = (realFreq * (6 + 8) * 2)/MT_FE_CRYSTAL_KHZ; ++ } ++ ndiv = ndiv + ndiv%2; ++ if(ndiv < 4095) ++ N = ndiv - 1024; ++ else if (ndiv < 6143) ++ N = ndiv + 1024; ++ else ++ N = ndiv + 3072; ++ ++ m88ds3103_tuner_writereg(state, 0x01, (N & 0x3f00) >> 8); ++ }else{ ++ m88ds3103_tuner_writereg(state, 0x10, 0x00); ++ if (realFreq < 1146000){ ++ m88ds3103_tuner_writereg(state, 0x10, 0x11); ++ div4 = 1; ++ ndiv = (realFreq * (6 + 8) * 4) / MT_FE_CRYSTAL_KHZ; ++ }else{ ++ m88ds3103_tuner_writereg(state, 0x10, 0x01); ++ ndiv = (realFreq * (6 + 8) * 2) / MT_FE_CRYSTAL_KHZ; ++ } ++ ndiv = ndiv + ndiv%2; ++ N = ndiv - 1024; ++ m88ds3103_tuner_writereg(state, 0x01, (N>>8)&0x0f); ++ } ++ /* set pll */ ++ m88ds3103_tuner_writereg(state, 0x02, N & 0x00ff); ++ m88ds3103_tuner_writereg(state, 0x03, 0x06); ++ m88ds3103_tuner_writereg(state, 0x51, 0x0f); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x10); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ ++ if(state->tuner_id == TS2022_ID){ ++ if(( realFreq >= 1650000 ) && (realFreq <= 1850000)){ ++ msleep(5); ++ value = m88ds3103_tuner_readreg(state, 0x14); ++ value &= 0x7f; ++ if(value < 64){ ++ m88ds3103_tuner_writereg(state, 0x10, 0x82); ++ m88ds3103_tuner_writereg(state, 0x11, 0x6f); ++ ++ m88ds3103_tuner_writereg(state, 0x51, 0x0f); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x10); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ } ++ } ++ msleep(5); ++ value = m88ds3103_tuner_readreg(state, 0x14); ++ value &= 0x1f; ++ ++ if(value > 19){ ++ value = m88ds3103_tuner_readreg(state, 0x10); ++ value &= 0x1d; ++ m88ds3103_tuner_writereg(state, 0x10, value); ++ } ++ }else{ ++ msleep(5); ++ value = m88ds3103_tuner_readreg(state, 0x66); ++ changePLL = (((value & 0x80) >> 7) != div4); ++ ++ if(changePLL){ ++ m88ds3103_tuner_writereg(state, 0x10, 0x11); ++ div4 = 1; ++ ndiv = (realFreq * (6 + 8) * 4)/MT_FE_CRYSTAL_KHZ; ++ ndiv = ndiv + ndiv%2; ++ N = ndiv - 1024; ++ ++ m88ds3103_tuner_writereg(state, 0x01, (N>>8) & 0x0f); ++ m88ds3103_tuner_writereg(state, 0x02, N & 0xff); ++ ++ m88ds3103_tuner_writereg(state, 0x51, 0x0f); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x10); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ } ++ } ++ /*set the RF gain*/ ++ if(state->tuner_id == TS2020_ID) ++ m88ds3103_tuner_writereg(state, 0x60, 0x79); ++ ++ m88ds3103_tuner_writereg(state, 0x51, 0x17); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x08); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ msleep(5); ++ ++ if(state->tuner_id == TS2020_ID){ ++ RFgain = m88ds3103_tuner_readreg(state, 0x3d); ++ RFgain &= 0x0f; ++ if(RFgain < 15){ ++ if(RFgain < 4) ++ RFgain = 0; ++ else ++ RFgain = RFgain -3; ++ value = ((RFgain << 3) | 0x01) & 0x79; ++ m88ds3103_tuner_writereg(state, 0x60, value); ++ m88ds3103_tuner_writereg(state, 0x51, 0x17); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x08); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ } ++ } ++ ++ /* set the LPF */ ++ if(state->tuner_id == TS2022_ID){ ++ m88ds3103_tuner_writereg(state, 0x25, 0x00); ++ m88ds3103_tuner_writereg(state, 0x27, 0x70); ++ m88ds3103_tuner_writereg(state, 0x41, 0x09); ++ m88ds3103_tuner_writereg(state, 0x08, 0x0b); ++ } ++ ++ f3db = ((c->symbol_rate / 1000) *135) / 200 + 2000; ++ f3db += lpf_offset_KHz; ++ if (f3db < 7000) ++ f3db = 7000; ++ if (f3db > 40000) ++ f3db = 40000; ++ ++ gdiv28 = (MT_FE_CRYSTAL_KHZ / 1000 * 1694 + 500) / 1000; ++ m88ds3103_tuner_writereg(state, 0x04, gdiv28 & 0xff); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1b); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x04); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ msleep(5); ++ ++ value = m88ds3103_tuner_readreg(state, 0x26); ++ capCode = value & 0x3f; ++ if(state->tuner_id == TS2022_ID){ ++ m88ds3103_tuner_writereg(state, 0x41, 0x0d); ++ ++ m88ds3103_tuner_writereg(state, 0x51, 0x1b); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x04); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ ++ msleep(2); ++ ++ value = m88ds3103_tuner_readreg(state, 0x26); ++ value &= 0x3f; ++ value = (capCode + value) / 2; ++ } ++ else ++ value = capCode; ++ ++ gdiv28 = gdiv28 * 207 / (value * 2 + 151); ++ mlpf_max = gdiv28 * 135 / 100; ++ mlpf_min = gdiv28 * 78 / 100; ++ if (mlpf_max > 63) ++ mlpf_max = 63; ++ ++ if(state->tuner_id == TS2022_ID) ++ lpf_coeff = 3200; ++ else ++ lpf_coeff = 2766; ++ ++ nlpf = (f3db * gdiv28 * 2 / lpf_coeff / (MT_FE_CRYSTAL_KHZ / 1000) + 1) / 2 ; ++ if (nlpf > 23) nlpf = 23; ++ if (nlpf < 1) nlpf = 1; ++ ++ lpf_mxdiv = (nlpf * (MT_FE_CRYSTAL_KHZ / 1000) * lpf_coeff * 2 / f3db + 1) / 2; ++ ++ if (lpf_mxdiv < mlpf_min){ ++ nlpf++; ++ lpf_mxdiv = (nlpf * (MT_FE_CRYSTAL_KHZ / 1000) * lpf_coeff * 2 / f3db + 1) / 2; ++ } ++ ++ if (lpf_mxdiv > mlpf_max) ++ lpf_mxdiv = mlpf_max; ++ ++ m88ds3103_tuner_writereg(state, 0x04, lpf_mxdiv); ++ m88ds3103_tuner_writereg(state, 0x06, nlpf); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1b); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x04); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ msleep(5); ++ ++ if(state->tuner_id == TS2022_ID){ ++ msleep(2); ++ value = m88ds3103_tuner_readreg(state, 0x26); ++ capCode = value & 0x3f; ++ ++ m88ds3103_tuner_writereg(state, 0x41, 0x09); ++ ++ m88ds3103_tuner_writereg(state, 0x51, 0x1b); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x04); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ ++ msleep(2); ++ value = m88ds3103_tuner_readreg(state, 0x26); ++ value &= 0x3f; ++ value = (capCode + value) / 2; ++ ++ value = value | 0x80; ++ m88ds3103_tuner_writereg(state, 0x25, value); ++ m88ds3103_tuner_writereg(state, 0x27, 0x30); ++ ++ m88ds3103_tuner_writereg(state, 0x08, 0x09); ++ } ++ ++ /* Set the BB gain */ ++ m88ds3103_tuner_writereg(state, 0x51, 0x1e); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x01); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ if(state->tuner_id == TS2020_ID){ ++ if(RFgain == 15){ ++ msleep(40); ++ value = m88ds3103_tuner_readreg(state, 0x21); ++ value &= 0x0f; ++ if(value < 3){ ++ m88ds3103_tuner_writereg(state, 0x60, 0x61); ++ m88ds3103_tuner_writereg(state, 0x51, 0x17); ++ m88ds3103_tuner_writereg(state, 0x51, 0x1f); ++ m88ds3103_tuner_writereg(state, 0x50, 0x08); ++ m88ds3103_tuner_writereg(state, 0x50, 0x00); ++ } ++ } ++ } ++ msleep(60); ++ ++ offset_khz = (ndiv) * MT_FE_CRYSTAL_KHZ ++ / (6 + 8) / (div4 + 1) / 2 - realFreq; ++ ++ m88ds3103_demod_connect(fe, offset_khz+lpf_offset_KHz); ++ ++ for (i = 0; i < 30 ; i++) { ++ m88ds3103_read_status(fe, &status); ++ if (status & FE_HAS_LOCK){ ++ break; ++ } ++ msleep(20); ++ } ++ ++#ifdef _AUTO_S2_ ++ if((status & FE_HAS_LOCK) == 0){ ++ state->delivery_system = (state->delivery_system == SYS_DVBS) ? SYS_DVBS2 : SYS_DVBS; ++ m88ds3103_demod_connect(fe, offset_khz); ++ ++ for (i = 0; i < 30 ; i++) { ++ m88ds3103_read_status(fe, &status); ++ if (status & FE_HAS_LOCK){ ++ break; ++ } ++ msleep(20); ++ } ++ } ++#else ++ state->delivery_system = c->delivery_system; ++#endif ++ if (status & FE_HAS_LOCK){ ++ if(state->config->ci_mode == 2) ++ m88ds3103_set_clock_ratio(state); ++ if(state->config->start_ctrl){ ++ if(state->first_lock == 0){ ++ state->config->start_ctrl(fe); ++ state->first_lock = 1; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++static int m88ds3103_tune(struct dvb_frontend *fe, ++ bool re_tune, ++ unsigned int mode_flags, ++ unsigned int *delay, ++ fe_status_t *status) ++{ ++ *delay = HZ / 5; ++ ++ dprintk("%s() ", __func__); ++ dprintk("re_tune = %d\n", re_tune); ++ ++ if (re_tune) { ++ int ret = m88ds3103_set_frontend(fe); ++ if (ret) ++ return ret; ++ } ++ ++ return m88ds3103_read_status(fe, status); ++} ++ ++static enum dvbfe_algo m88ds3103_get_algo(struct dvb_frontend *fe) ++{ ++ return DVBFE_ALGO_HW; ++} ++ ++ /* ++ * Power config will reset and load initial firmware if required ++ */ ++static int m88ds3103_initilaze(struct dvb_frontend *fe) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ int ret; ++ ++ dprintk("%s()\n", __func__); ++ /* hard reset */ ++ m88ds3103_writereg(state, 0x07, 0x80); ++ m88ds3103_writereg(state, 0x07, 0x00); ++ msleep(1); ++ ++ m88ds3103_writereg(state, 0x08, 0x01 | m88ds3103_readreg(state, 0x08)); ++ msleep(1); ++ ++ if(state->tuner_id == TS2020_ID){ ++ /* TS2020 init */ ++ m88ds3103_tuner_writereg(state, 0x42, 0x73); ++ msleep(2); ++ m88ds3103_tuner_writereg(state, 0x05, 0x01); ++ m88ds3103_tuner_writereg(state, 0x62, 0xb5); ++ m88ds3103_tuner_writereg(state, 0x07, 0x02); ++ m88ds3103_tuner_writereg(state, 0x08, 0x01); ++ } ++ else if(state->tuner_id == TS2022_ID){ ++ /* TS2022 init */ ++ m88ds3103_tuner_writereg(state, 0x62, 0x6c); ++ msleep(2); ++ m88ds3103_tuner_writereg(state, 0x42, 0x6c); ++ msleep(2); ++ m88ds3103_tuner_writereg(state, 0x7d, 0x9d); ++ m88ds3103_tuner_writereg(state, 0x7c, 0x9a); ++ m88ds3103_tuner_writereg(state, 0x7a, 0x76); ++ ++ m88ds3103_tuner_writereg(state, 0x3b, 0x01); ++ m88ds3103_tuner_writereg(state, 0x63, 0x88); ++ ++ m88ds3103_tuner_writereg(state, 0x61, 0x85); ++ m88ds3103_tuner_writereg(state, 0x22, 0x30); ++ m88ds3103_tuner_writereg(state, 0x30, 0x40); ++ m88ds3103_tuner_writereg(state, 0x20, 0x23); ++ m88ds3103_tuner_writereg(state, 0x24, 0x02); ++ m88ds3103_tuner_writereg(state, 0x12, 0xa0); ++ } ++ ++ if(state->demod_id == DS3103_ID){ ++ m88ds3103_writereg(state, 0x07, 0xe0); ++ m88ds3103_writereg(state, 0x07, 0x00); ++ msleep(1); ++ } ++ m88ds3103_writereg(state, 0xb2, 0x01); ++ ++ /* Load the firmware if required */ ++ ret = m88ds3103_load_firmware(fe); ++ if (ret != 0){ ++ printk(KERN_ERR "%s: Unable initialize firmware\n", __func__); ++ return ret; ++ } ++ if(state->demod_id == DS3103_ID){ ++ m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d)); ++ m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30)); ++ } ++ ++ return 0; ++} ++ ++/* ++ * Initialise or wake up device ++ */ ++static int m88ds3103_initfe(struct dvb_frontend *fe) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ u8 val; ++ ++ dprintk("%s()\n", __func__); ++ ++ /* 1st step to wake up demod */ ++ m88ds3103_writereg(state, 0x08, 0x01 | m88ds3103_readreg(state, 0x08)); ++ m88ds3103_writereg(state, 0x04, 0xfe & m88ds3103_readreg(state, 0x04)); ++ m88ds3103_writereg(state, 0x23, 0xef & m88ds3103_readreg(state, 0x23)); ++ ++ /* 2nd step to wake up tuner */ ++ val = m88ds3103_tuner_readreg(state, 0x00) & 0xff; ++ if((val & 0x01) == 0){ ++ m88ds3103_tuner_writereg(state, 0x00, 0x01); ++ msleep(50); ++ } ++ m88ds3103_tuner_writereg(state, 0x00, 0x03); ++ msleep(50); ++ ++ return 0; ++} ++ ++/* Put device to sleep */ ++static int m88ds3103_sleep(struct dvb_frontend *fe) ++{ ++ struct m88ds3103_state *state = fe->demodulator_priv; ++ ++ dprintk("%s()\n", __func__); ++ ++ /* 1st step to sleep tuner */ ++ m88ds3103_tuner_writereg(state, 0x00, 0x00); ++ ++ /* 2nd step to sleep demod */ ++ m88ds3103_writereg(state, 0x08, 0xfe & m88ds3103_readreg(state, 0x08)); ++ m88ds3103_writereg(state, 0x04, 0x01 | m88ds3103_readreg(state, 0x04)); ++ m88ds3103_writereg(state, 0x23, 0x10 | m88ds3103_readreg(state, 0x23)); ++ ++ ++ return 0; ++} ++ ++static struct dvb_frontend_ops m88ds3103_ops = { ++ .delsys = { SYS_DVBS, SYS_DVBS2}, ++ .info = { ++ .name = "Montage DS3103/TS2022", ++ .type = FE_QPSK, ++ .frequency_min = 950000, ++ .frequency_max = 2150000, ++ .frequency_stepsize = 1011, /* kHz for QPSK frontends */ ++ .frequency_tolerance = 5000, ++ .symbol_rate_min = 1000000, ++ .symbol_rate_max = 45000000, ++ .caps = FE_CAN_INVERSION_AUTO | ++ FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | ++ FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 | ++ FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | ++ FE_CAN_2G_MODULATION | ++ FE_CAN_QPSK | FE_CAN_RECOVER ++ }, ++ ++ .release = m88ds3103_release, ++ ++ .init = m88ds3103_initfe, ++ .sleep = m88ds3103_sleep, ++ .read_status = m88ds3103_read_status, ++ .read_ber = m88ds3103_read_ber, ++ .read_signal_strength = m88ds3103_read_signal_strength, ++ .read_snr = m88ds3103_read_snr, ++ .read_ucblocks = m88ds3103_read_ucblocks, ++ .set_tone = m88ds3103_set_tone, ++ .set_voltage = m88ds3103_set_voltage, ++ .diseqc_send_master_cmd = m88ds3103_send_diseqc_msg, ++ .diseqc_send_burst = m88ds3103_diseqc_send_burst, ++ .get_frontend_algo = m88ds3103_get_algo, ++ .tune = m88ds3103_tune, ++ .set_frontend = m88ds3103_set_frontend, ++}; ++ ++MODULE_DESCRIPTION("DVB Frontend module for Montage DS3103/TS2022 hardware"); ++MODULE_AUTHOR("Max nibble"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/media/dvb-frontends/dvbsky_m88ds3103.h b/drivers/media/dvb-frontends/dvbsky_m88ds3103.h +new file mode 100644 +index 0000000..e2358d6 +--- /dev/null ++++ b/drivers/media/dvb-frontends/dvbsky_m88ds3103.h +@@ -0,0 +1,54 @@ ++/* ++ Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver ++ ++ 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. ++ */ ++ ++#ifndef DVBSKY_M88DS3103_H ++#define DVBSKY_M88DS3103_H ++ ++#include ++#include ++ ++struct dvbsky_m88ds3103_config { ++ /* the demodulator's i2c address */ ++ u8 demod_address; ++ u8 ci_mode; ++ u8 pin_ctrl; ++ u8 ts_mode; /* 0: Parallel, 1: Serial */ ++ u8 tuner_readstops; ++ ++ /* Set device param to start dma */ ++ int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured); ++ /* Start to transfer data */ ++ int (*start_ctrl)(struct dvb_frontend *fe); ++ /* Set LNB voltage */ ++ int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage); ++}; ++ ++#if IS_ENABLED(CONFIG_DVB_DVBSKY_M88DS3103) ++extern struct dvb_frontend *dvbsky_m88ds3103_attach( ++ const struct dvbsky_m88ds3103_config *config, ++ struct i2c_adapter *i2c); ++#else ++static inline struct dvb_frontend *dvbsky_m88ds3103_attach( ++ const struct dvbsky_m88ds3103_config *config, ++ struct i2c_adapter *i2c) ++{ ++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); ++ return NULL; ++} ++#endif /* CONFIG_DVB_DVBSKY_M88DS3103 */ ++#endif /* DVBSKY_M88DS3103_H */ +diff --git a/drivers/media/dvb-frontends/dvbsky_m88ds3103_priv.h b/drivers/media/dvb-frontends/dvbsky_m88ds3103_priv.h +new file mode 100644 +index 0000000..9966931 +--- /dev/null ++++ b/drivers/media/dvb-frontends/dvbsky_m88ds3103_priv.h +@@ -0,0 +1,403 @@ ++/* ++ Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver ++ ++ 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. ++ */ ++ ++#ifndef DVBSKY_M88DS3103_PRIV_H ++#define DVBSKY_M88DS3103_PRIV_H ++ ++#define FW_DOWN_SIZE 32 ++#define FW_DOWN_LOOP (8192/FW_DOWN_SIZE) ++#define DS3103_DEFAULT_FIRMWARE "dvb-fe-ds3103.fw" ++#define DS3000_DEFAULT_FIRMWARE "dvb-fe-ds300x.fw" ++#define MT_FE_MCLK_KHZ 96000 /* in kHz */ ++#define MT_FE_CRYSTAL_KHZ 27000 /* in kHz */ ++#define FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz 3000 ++#define DS3000_ID 0x3000 ++#define DS3103_ID 0x3103 ++#define TS2020_ID 0x2020 ++#define TS2022_ID 0x2022 ++#define UNKNOW_ID 0x0000 ++ ++struct m88ds3103_state { ++ struct i2c_adapter *i2c; ++ const struct dvbsky_m88ds3103_config *config; ++ ++ struct dvb_frontend frontend; ++ ++ u32 preBer; ++ u8 skip_fw_load; ++ u8 first_lock; /* The first time of signal lock */ ++ u16 demod_id; /* demod chip type */ ++ u16 tuner_id; /* tuner chip type */ ++ fe_delivery_system_t delivery_system; ++}; ++ ++/* For M88DS3103 demod dvbs mode.*/ ++static u8 ds3103_dvbs_init_tab[] = { ++ 0x23, 0x07, ++ 0x08, 0x03, ++ 0x0c, 0x02, ++ 0x21, 0x54, ++ 0x25, 0x82, ++ 0x27, 0x31, ++ 0x30, 0x08, ++ 0x31, 0x40, ++ 0x32, 0x32, ++ 0x33, 0x35, ++ 0x35, 0xff, ++ 0x3a, 0x00, ++ 0x37, 0x10, ++ 0x38, 0x10, ++ 0x39, 0x02, ++ 0x42, 0x60, ++ 0x4a, 0x80, ++ 0x4b, 0x04, ++ 0x4d, 0x91, ++ 0x5d, 0xc8, ++ 0x50, 0x36, ++ 0x51, 0x36, ++ 0x52, 0x36, ++ 0x53, 0x36, ++ 0x63, 0x0f, ++ 0x64, 0x30, ++ 0x65, 0x40, ++ 0x68, 0x26, ++ 0x69, 0x4c, ++ 0x70, 0x20, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x40, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x60, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x80, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0xa0, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x1f, ++ 0x76, 0x38, ++ 0x77, 0xa6, ++ 0x78, 0x0c, ++ 0x79, 0x80, ++ 0x7f, 0x14, ++ 0x7c, 0x00, ++ 0xae, 0x82, ++ 0x80, 0x64, ++ 0x81, 0x66, ++ 0x82, 0x44, ++ 0x85, 0x04, ++ 0xcd, 0xf4, ++ 0x90, 0x33, ++ 0xa0, 0x44, ++ 0xc0, 0x08, ++ 0xc3, 0x10, ++ 0xc4, 0x08, ++ 0xc5, 0xf0, ++ 0xc6, 0xff, ++ 0xc7, 0x00, ++ 0xc8, 0x1a, ++ 0xc9, 0x80, ++ 0xe0, 0xf8, ++ 0xe6, 0x8b, ++ 0xd0, 0x40, ++ 0xf8, 0x20, ++ 0xfa, 0x0f, ++ 0x00, 0x00, ++ 0xbd, 0x01, ++ 0xb8, 0x00, ++}; ++/* For M88DS3103 demod dvbs2 mode.*/ ++static u8 ds3103_dvbs2_init_tab[] = { ++ 0x23, 0x07, ++ 0x08, 0x07, ++ 0x0c, 0x02, ++ 0x21, 0x54, ++ 0x25, 0x82, ++ 0x27, 0x31, ++ 0x30, 0x08, ++ 0x32, 0x32, ++ 0x33, 0x35, ++ 0x35, 0xff, ++ 0x3a, 0x00, ++ 0x37, 0x10, ++ 0x38, 0x10, ++ 0x39, 0x02, ++ 0x42, 0x60, ++ 0x4a, 0x80, ++ 0x4b, 0x04, ++ 0x4d, 0x91, ++ 0x5d, 0xc8, ++ 0x50, 0x36, ++ 0x51, 0x36, ++ 0x52, 0x36, ++ 0x53, 0x36, ++ 0x63, 0x0f, ++ 0x64, 0x10, ++ 0x65, 0x20, ++ 0x68, 0x46, ++ 0x69, 0xcd, ++ 0x70, 0x20, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x40, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x60, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x80, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0xa0, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x1f, ++ 0x76, 0x38, ++ 0x77, 0xa6, ++ 0x78, 0x0c, ++ 0x79, 0x80, ++ 0x7f, 0x14, ++ 0x85, 0x08, ++ 0xcd, 0xf4, ++ 0x90, 0x33, ++ 0x86, 0x00, ++ 0x87, 0x0f, ++ 0x89, 0x00, ++ 0x8b, 0x44, ++ 0x8c, 0x66, ++ 0x9d, 0xc1, ++ 0x8a, 0x10, ++ 0xad, 0x40, ++ 0xa0, 0x44, ++ 0xc0, 0x08, ++ 0xc1, 0x10, ++ 0xc2, 0x08, ++ 0xc3, 0x10, ++ 0xc4, 0x08, ++ 0xc5, 0xf0, ++ 0xc6, 0xff, ++ 0xc7, 0x00, ++ 0xc8, 0x1a, ++ 0xc9, 0x80, ++ 0xca, 0x23, ++ 0xcb, 0x24, ++ 0xcc, 0xf4, ++ 0xce, 0x74, ++ 0x00, 0x00, ++ 0xbd, 0x01, ++ 0xb8, 0x00, ++}; ++ ++/* For M88DS3000 demod dvbs mode.*/ ++static u8 ds3000_dvbs_init_tab[] = { ++ 0x23, 0x05, ++ 0x08, 0x03, ++ 0x0c, 0x02, ++ 0x21, 0x54, ++ 0x25, 0x82, ++ 0x27, 0x31, ++ 0x30, 0x08, ++ 0x31, 0x40, ++ 0x32, 0x32, ++ 0x33, 0x35, ++ 0x35, 0xff, ++ 0x3a, 0x00, ++ 0x37, 0x10, ++ 0x38, 0x10, ++ 0x39, 0x02, ++ 0x42, 0x60, ++ 0x4a, 0x40, ++ 0x4b, 0x04, ++ 0x4d, 0x91, ++ 0x5d, 0xc8, ++ 0x50, 0x77, ++ 0x51, 0x77, ++ 0x52, 0x36, ++ 0x53, 0x36, ++ 0x56, 0x01, ++ 0x63, 0x47, ++ 0x64, 0x30, ++ 0x65, 0x40, ++ 0x68, 0x26, ++ 0x69, 0x4c, ++ 0x70, 0x20, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x40, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x60, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x80, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0xa0, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x1f, ++ 0x76, 0x00, ++ 0x77, 0xd1, ++ 0x78, 0x0c, ++ 0x79, 0x80, ++ 0x7f, 0x04, ++ 0x7c, 0x00, ++ 0x80, 0x86, ++ 0x81, 0xa6, ++ 0x85, 0x04, ++ 0xcd, 0xf4, ++ 0x90, 0x33, ++ 0xa0, 0x44, ++ 0xc0, 0x18, ++ 0xc3, 0x10, ++ 0xc4, 0x08, ++ 0xc5, 0x80, ++ 0xc6, 0x80, ++ 0xc7, 0x0a, ++ 0xc8, 0x1a, ++ 0xc9, 0x80, ++ 0xfe, 0xb6, ++ 0xe0, 0xf8, ++ 0xe6, 0x8b, ++ 0xd0, 0x40, ++ 0xf8, 0x20, ++ 0xfa, 0x0f, ++ 0xad, 0x20, ++ 0xae, 0x07, ++ 0xb8, 0x00, ++}; ++ ++/* For M88DS3000 demod dvbs2 mode.*/ ++static u8 ds3000_dvbs2_init_tab[] = { ++ 0x23, 0x0f, ++ 0x08, 0x07, ++ 0x0c, 0x02, ++ 0x21, 0x54, ++ 0x25, 0x82, ++ 0x27, 0x31, ++ 0x30, 0x08, ++ 0x31, 0x32, ++ 0x32, 0x32, ++ 0x33, 0x35, ++ 0x35, 0xff, ++ 0x3a, 0x00, ++ 0x37, 0x10, ++ 0x38, 0x10, ++ 0x39, 0x02, ++ 0x42, 0x60, ++ 0x4a, 0x80, ++ 0x4b, 0x04, ++ 0x4d, 0x91, ++ 0x5d, 0x88, ++ 0x50, 0x36, ++ 0x51, 0x36, ++ 0x52, 0x36, ++ 0x53, 0x36, ++ 0x63, 0x60, ++ 0x64, 0x10, ++ 0x65, 0x10, ++ 0x68, 0x04, ++ 0x69, 0x29, ++ 0x70, 0x20, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x40, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x60, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x80, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0xa0, ++ 0x71, 0x70, ++ 0x72, 0x04, ++ 0x73, 0x00, ++ 0x70, 0x1f, ++ 0xa0, 0x44, ++ 0xc0, 0x08, ++ 0xc1, 0x10, ++ 0xc2, 0x08, ++ 0xc3, 0x10, ++ 0xc4, 0x08, ++ 0xc5, 0xf0, ++ 0xc6, 0xf0, ++ 0xc7, 0x0a, ++ 0xc8, 0x1a, ++ 0xc9, 0x80, ++ 0xca, 0x23, ++ 0xcb, 0x24, ++ 0xce, 0x74, ++ 0x56, 0x01, ++ 0x90, 0x03, ++ 0x76, 0x80, ++ 0x77, 0x42, ++ 0x78, 0x0a, ++ 0x79, 0x80, ++ 0xad, 0x40, ++ 0xae, 0x07, ++ 0x7f, 0xd4, ++ 0x7c, 0x00, ++ 0x80, 0xa8, ++ 0x81, 0xda, ++ 0x7c, 0x01, ++ 0x80, 0xda, ++ 0x81, 0xec, ++ 0x7c, 0x02, ++ 0x80, 0xca, ++ 0x81, 0xeb, ++ 0x7c, 0x03, ++ 0x80, 0xba, ++ 0x81, 0xdb, ++ 0x85, 0x08, ++ 0x86, 0x00, ++ 0x87, 0x02, ++ 0x89, 0x80, ++ 0x8b, 0x44, ++ 0x8c, 0xaa, ++ 0x8a, 0x10, ++ 0xba, 0x00, ++ 0xf5, 0x04, ++ 0xd2, 0x32, ++ 0xb8, 0x00, ++}; ++ ++#endif /* DVBSKY_M88DS3103_PRIV_H */ +diff --git a/drivers/media/dvb-frontends/m88dc2800.c b/drivers/media/dvb-frontends/m88dc2800.c +new file mode 100644 +index 0000000..f876a11 +--- /dev/null ++++ b/drivers/media/dvb-frontends/m88dc2800.c +@@ -0,0 +1,2124 @@ ++/* ++ M88DC2800/M88TC2800 - DVB-C demodulator and tuner from Montage ++ ++ Copyright (C) 2012 Max nibble ++ Copyright (C) 2011 Montage Technology / www.montage-tech.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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "dvb_frontend.h" ++#include "m88dc2800.h" ++ ++struct m88dc2800_state { ++ struct i2c_adapter *i2c; ++ const struct m88dc2800_config *config; ++ struct dvb_frontend frontend; ++ u32 freq; ++ u32 ber; ++ u32 sym; ++ u16 qam; ++ u8 inverted; ++ u32 xtal; ++ /* tuner state */ ++ u8 tuner_init_OK; /* Tuner initialize status */ ++ u8 tuner_dev_addr; /* Tuner device address */ ++ u32 tuner_freq; /* RF frequency to be set, unit: KHz */ ++ u16 tuner_qam; /* Reserved */ ++ u16 tuner_mode; ++ u8 tuner_bandwidth; /* Bandwidth of the channel, unit: MHz, 6/7/8 */ ++ u8 tuner_loopthrough; /* Tuner loop through switch, 0/1 */ ++ u32 tuner_crystal; /* Tuner crystal frequency, unit: KHz */ ++ u32 tuner_dac; /* Tuner DAC frequency, unit: KHz */ ++ u16 tuner_mtt; /* Tuner chip version, D1: 0x0d, E0: 0x0e, E1: 0x8e */ ++ u16 tuner_custom_cfg; ++ u32 tuner_version; /* Tuner driver version number */ ++ u32 tuner_time; ++}; ++ ++static int debug; ++module_param(debug, int, 0644); ++MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)"); ++ ++#define dprintk(args...) \ ++ do { \ ++ if (debug) \ ++ printk(KERN_INFO "m88dc2800: " args); \ ++ } while (0) ++ ++ ++static int m88dc2800_i2c_write(struct m88dc2800_state *state, u8 addr, ++ u8 * p_data, u8 len) ++{ ++ struct i2c_msg msg = { .flags = 0 }; ++ ++ msg.addr = addr; ++ msg.buf = p_data; ++ msg.len = len; ++ ++ return i2c_transfer(state->i2c, &msg, 1); ++} ++ ++static int m88dc2800_i2c_read(struct m88dc2800_state *state, u8 addr, ++ u8 * p_data, u8 len) ++{ ++ struct i2c_msg msg = { .flags = I2C_M_RD }; ++ ++ msg.addr = addr; ++ msg.buf = p_data; ++ msg.len = len; ++ ++ return i2c_transfer(state->i2c, &msg, 1); ++} ++ ++/*demod register operations.*/ ++static int WriteReg(struct m88dc2800_state *state, u8 reg, u8 data) ++{ ++ u8 buf[] = { reg, data }; ++ u8 addr = state->config->demod_address; ++ int err; ++ ++ dprintk("%s: write reg 0x%02x, value 0x%02x\n", __func__, reg, data); ++ ++ err = m88dc2800_i2c_write(state, addr, buf, 2); ++ ++ if (err != 1) { ++ printk(KERN_ERR ++ "%s: writereg error(err == %i, reg == 0x%02x," ++ " value == 0x%02x)\n", __func__, err, reg, data); ++ return -EIO; ++ } ++ return 0; ++} ++ ++static int ReadReg(struct m88dc2800_state *state, u8 reg) ++{ ++ int ret; ++ u8 b0[] = { reg }; ++ u8 b1[] = { 0 }; ++ u8 addr = state->config->demod_address; ++ ++ ret = m88dc2800_i2c_write(state, addr, b0, 1); ++ ++ if (ret != 1) { ++ printk(KERN_ERR "%s: reg=0x%x (error=%d)\n", ++ __func__, reg, ret); ++ return -EIO; ++ } ++ ++ ret = m88dc2800_i2c_read(state, addr, b1, 1); ++ ++ dprintk("%s: read reg 0x%02x, value 0x%02x\n", __func__, reg, b1[0]); ++ return b1[0]; ++} ++ ++static int _mt_fe_tn_set_reg(struct m88dc2800_state *state, u8 reg, ++ u8 data) ++{ ++ int ret; ++ u8 buf[2]; ++ u8 addr = state->tuner_dev_addr; ++ ++ buf[1] = ReadReg(state, 0x86); ++ buf[1] |= 0x80; ++ ret = WriteReg(state, 0x86, buf[1]); ++ ++ buf[0] = reg; ++ buf[1] = data; ++ ++ ret = m88dc2800_i2c_write(state, addr, buf, 2); ++ if (ret != 1) ++ return -EIO; ++ return 0; ++} ++ ++static int _mt_fe_tn_get_reg(struct m88dc2800_state *state, u8 reg, ++ u8 * p_data) ++{ ++ int ret; ++ u8 buf[2]; ++ u8 addr = state->tuner_dev_addr; ++ ++ buf[1] = ReadReg(state, 0x86); ++ buf[1] |= 0x80; ++ ret = WriteReg(state, 0x86, buf[1]); ++ ++ buf[0] = reg; ++ ret = m88dc2800_i2c_write(state, addr, buf, 1); ++ ++ msleep(1); ++ ++ buf[1] = ReadReg(state, 0x86); ++ buf[1] |= 0x80; ++ ret = WriteReg(state, 0x86, buf[1]); ++ ++ return m88dc2800_i2c_read(state, addr, p_data, 1); ++} ++ ++/* Tuner operation functions.*/ ++static int _mt_fe_tn_set_RF_front_tc2800(struct m88dc2800_state *state) ++{ ++ u32 freq_KHz = state->tuner_freq; ++ u8 a, b, c; ++ if (state->tuner_mtt == 0xD1) { /* D1 */ ++ if (freq_KHz <= 123000) { ++ if (freq_KHz <= 56000) { ++ a = 0x00; b = 0x00; c = 0x00; ++ } else if (freq_KHz <= 64000) { ++ a = 0x10; b = 0x01; c = 0x08; ++ } else if (freq_KHz <= 72000) { ++ a = 0x20; b = 0x02; c = 0x10; ++ } else if (freq_KHz <= 80000) { ++ a = 0x30; b = 0x03; c = 0x18; ++ } else if (freq_KHz <= 88000) { ++ a = 0x40; b = 0x04; c = 0x20; ++ } else if (freq_KHz <= 96000) { ++ a = 0x50; b = 0x05; c = 0x28; ++ } else if (freq_KHz <= 104000) { ++ a = 0x60; b = 0x06; c = 0x30; ++ } else { ++ a = 0x70; b = 0x07; c = 0x38; ++ } ++ _mt_fe_tn_set_reg(state, 0x58, 0x9b); ++ _mt_fe_tn_set_reg(state, 0x59, a); ++ _mt_fe_tn_set_reg(state, 0x5d, b); ++ _mt_fe_tn_set_reg(state, 0x5e, c); ++ _mt_fe_tn_set_reg(state, 0x5a, 0x75); ++ _mt_fe_tn_set_reg(state, 0x73, 0x0c); ++ } else { /* if (freq_KHz > 112000) */ ++ _mt_fe_tn_set_reg(state, 0x58, 0x7b); ++ if (freq_KHz <= 304000) { ++ if (freq_KHz <= 136000) { ++ _mt_fe_tn_set_reg(state, 0x5e, 0x40); ++ } else if (freq_KHz <= 160000) { ++ _mt_fe_tn_set_reg(state, 0x5e, 0x48); ++ } else if (freq_KHz <= 184000) { ++ _mt_fe_tn_set_reg(state, 0x5e, 0x50); ++ } else if (freq_KHz <= 208000) { ++ _mt_fe_tn_set_reg(state, 0x5e, 0x58); ++ } else if (freq_KHz <= 232000) { ++ _mt_fe_tn_set_reg(state, 0x5e, 0x60); ++ } else if (freq_KHz <= 256000) { ++ _mt_fe_tn_set_reg(state, 0x5e, 0x68); ++ } else if (freq_KHz <= 280000) { ++ _mt_fe_tn_set_reg(state, 0x5e, 0x70); ++ } else { /* if (freq_KHz <= 304000) */ ++ _mt_fe_tn_set_reg(state, 0x5e, 0x78); ++ } ++ if (freq_KHz <= 171000) { ++ _mt_fe_tn_set_reg(state, 0x73, 0x08); ++ } else if (freq_KHz <= 211000) { ++ _mt_fe_tn_set_reg(state, 0x73, 0x0a); ++ } else { ++ _mt_fe_tn_set_reg(state, 0x73, 0x0e); ++ } ++ } else { /* if (freq_KHz > 304000) */ ++ _mt_fe_tn_set_reg(state, 0x5e, 0x88); ++ if (freq_KHz <= 400000) { ++ _mt_fe_tn_set_reg(state, 0x73, 0x0c); ++ } else if (freq_KHz <= 450000) { ++ _mt_fe_tn_set_reg(state, 0x73, 0x09); ++ } else if (freq_KHz <= 550000) { ++ _mt_fe_tn_set_reg(state, 0x73, 0x0e); ++ } else if (freq_KHz <= 650000) { ++ _mt_fe_tn_set_reg(state, 0x73, 0x0d); ++ } else { /*if (freq_KHz > 650000) */ ++ _mt_fe_tn_set_reg(state, 0x73, 0x0e); ++ } ++ } ++ } ++ if (freq_KHz > 800000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x24); ++ else if (freq_KHz > 700000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x34); ++ else if (freq_KHz > 500000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x44); ++ else if (freq_KHz > 300000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x43); ++ else if (freq_KHz > 220000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x54); ++ else if (freq_KHz > 110000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x14); ++ else ++ _mt_fe_tn_set_reg(state, 0x87, 0x54); ++ if (freq_KHz > 600000) ++ _mt_fe_tn_set_reg(state, 0x6a, 0x53); ++ else if (freq_KHz > 500000) ++ _mt_fe_tn_set_reg(state, 0x6a, 0x57); ++ else ++ _mt_fe_tn_set_reg(state, 0x6a, 0x59); ++ if (freq_KHz < 200000) { ++ _mt_fe_tn_set_reg(state, 0x20, 0x5d); ++ } else if (freq_KHz < 500000) { ++ _mt_fe_tn_set_reg(state, 0x20, 0x7d); ++ } else { ++ _mt_fe_tn_set_reg(state, 0x20, 0xfd); ++ } /* end of 0xD1 */ ++ } else if (state->tuner_mtt == 0xE1) { /* E1 */ ++ if (freq_KHz <= 112000) { /* 123MHz */ ++ if (freq_KHz <= 56000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x01); ++ } else if (freq_KHz <= 64000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x09); ++ } else if (freq_KHz <= 72000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x11); ++ } else if (freq_KHz <= 80000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x19); ++ } else if (freq_KHz <= 88000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x21); ++ } else if (freq_KHz <= 96000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x29); ++ } else if (freq_KHz <= 104000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x31); ++ } else { /* if (freq_KHz <= 112000) */ ++ _mt_fe_tn_set_reg(state, 0x5c, 0x39); ++ } ++ _mt_fe_tn_set_reg(state, 0x5b, 0x30); ++ } else { /* if (freq_KHz > 112000) */ ++ if (freq_KHz <= 304000) { ++ if (freq_KHz <= 136000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x41); ++ } else if (freq_KHz <= 160000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x49); ++ } else if (freq_KHz <= 184000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x51); ++ } else if (freq_KHz <= 208000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x59); ++ } else if (freq_KHz <= 232000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x61); ++ } else if (freq_KHz <= 256000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x69); ++ } else if (freq_KHz <= 280000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x71); ++ } else { /* if (freq_KHz <= 304000) */ ++ _mt_fe_tn_set_reg(state, 0x5c, 0x79); ++ } ++ if (freq_KHz <= 150000) { ++ _mt_fe_tn_set_reg(state, 0x5b, 0x28); ++ } else if (freq_KHz <= 256000) { ++ _mt_fe_tn_set_reg(state, 0x5b, 0x29); ++ } else { ++ _mt_fe_tn_set_reg(state, 0x5b, 0x2a); ++ } ++ } else { /* if (freq_KHz > 304000) */ ++ if (freq_KHz <= 400000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x89); ++ } else if (freq_KHz <= 450000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x91); ++ } else if (freq_KHz <= 650000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0x98); ++ } else if (freq_KHz <= 850000) { ++ _mt_fe_tn_set_reg(state, 0x5c, 0xa0); ++ } else { ++ _mt_fe_tn_set_reg(state, 0x5c, 0xa8); ++ } ++ _mt_fe_tn_set_reg(state, 0x5b, 0x08); ++ } ++ } ++ } /* end of 0xE1 */ ++ return 0; ++} ++ ++static int _mt_fe_tn_cali_PLL_tc2800(struct m88dc2800_state *state, ++ u32 freq_KHz, ++ u32 cali_freq_thres_div2, ++ u32 cali_freq_thres_div3r, ++ u32 cali_freq_thres_div3) ++{ ++ s32 N, F, MUL; ++ u8 buf, tmp, tmp2; ++ s32 M; ++ const s32 crystal_KHz = state->tuner_crystal; ++ if (state->tuner_mtt == 0xD1) { ++ M = state->tuner_crystal / 4000; ++ if (freq_KHz > cali_freq_thres_div2) { ++ MUL = 4; ++ tmp = 2; ++ } else if (freq_KHz > 300000) { ++ MUL = 8; ++ tmp = 3; ++ } else if (freq_KHz > (cali_freq_thres_div2 / 2)) { ++ MUL = 8; ++ tmp = 4; ++ } else if (freq_KHz > (cali_freq_thres_div2 / 4)) { ++ MUL = 16; ++ tmp = 5; ++ } else if (freq_KHz > (cali_freq_thres_div2 / 8)) { ++ MUL = 32; ++ tmp = 6; ++ } else if (freq_KHz > (cali_freq_thres_div2 / 16)) { ++ MUL = 64; ++ tmp = 7; ++ } else { /* invalid */ ++ MUL = 0; ++ tmp = 0; ++ return 1; ++ } ++ } else if (state->tuner_mtt == 0xE1) { ++ M = state->tuner_crystal / 1000; ++ _mt_fe_tn_set_reg(state, 0x30, 0xff); ++ _mt_fe_tn_set_reg(state, 0x32, 0xe0); ++ _mt_fe_tn_set_reg(state, 0x33, 0x86); ++ _mt_fe_tn_set_reg(state, 0x37, 0x70); ++ _mt_fe_tn_set_reg(state, 0x38, 0x20); ++ _mt_fe_tn_set_reg(state, 0x39, 0x18); ++ _mt_fe_tn_set_reg(state, 0x89, 0x83); ++ if (freq_KHz > cali_freq_thres_div2) { ++ M = M / 4; ++ MUL = 4; ++ tmp = 2; ++ tmp2 = M + 16; /* 48 */ ++ } else if (freq_KHz > cali_freq_thres_div3r) { ++ M = M / 3; ++ MUL = 6; ++ tmp = 2; ++ tmp2 = M + 32; /* 32 */ ++ } else if (freq_KHz > cali_freq_thres_div3) { ++ M = M / 3; ++ MUL = 6; ++ tmp = 2; ++ tmp2 = M; /* 16 */ ++ } else if (freq_KHz > 304000) { ++ M = M / 4; ++ MUL = 8; ++ tmp = 3; ++ tmp2 = M + 16; /* 48 */ ++ } else if (freq_KHz > (cali_freq_thres_div2 / 2)) { ++ M = M / 4; ++ MUL = 8; ++ tmp = 4; ++ tmp2 = M + 16; /* 48 */ ++ } else if (freq_KHz > (cali_freq_thres_div3r / 2)) { ++ M = M / 3; ++ MUL = 12; ++ tmp = 4; ++ tmp2 = M + 32; /* 32 */ ++ } else if (freq_KHz > (cali_freq_thres_div3 / 2)) { ++ M = M / 3; ++ MUL = 12; ++ tmp = 4; ++ tmp2 = M; /* 16 */ ++ } else if (freq_KHz > (cali_freq_thres_div2 / 4)) { ++ M = M / 4; ++ MUL = 16; ++ tmp = 5; ++ tmp2 = M + 16; /* 48 */ ++ } else if (freq_KHz > (cali_freq_thres_div3r / 4)) { ++ M = M / 3; ++ MUL = 24; ++ tmp = 5; ++ tmp2 = M + 32; /* 32 */ ++ } else if (freq_KHz > (cali_freq_thres_div3 / 4)) { ++ M = M / 3; ++ MUL = 24; ++ tmp = 5; ++ tmp2 = M; /* 16 */ ++ } else if (freq_KHz > (cali_freq_thres_div2 / 8)) { ++ M = M / 4; ++ MUL = 32; ++ tmp = 6; ++ tmp2 = M + 16; /* 48 */ ++ } else if (freq_KHz > (cali_freq_thres_div3r / 8)) { ++ M = M / 3; ++ MUL = 48; ++ tmp = 6; ++ tmp2 = M + 32; /* 32 */ ++ } else if (freq_KHz > (cali_freq_thres_div3 / 8)) { ++ M = M / 3; ++ MUL = 48; ++ tmp = 6; ++ tmp2 = M; /* 16 */ ++ } else if (freq_KHz > (cali_freq_thres_div2 / 16)) { ++ M = M / 4; ++ MUL = 64; ++ tmp = 7; ++ tmp2 = M + 16; /* 48 */ ++ } else if (freq_KHz > (cali_freq_thres_div3r / 16)) { ++ M = M / 3; ++ MUL = 96; ++ tmp = 7; ++ tmp2 = M + 32; /* 32 */ ++ } else if (freq_KHz > (cali_freq_thres_div3 / 16)) { ++ M = M / 3; ++ MUL = 96; ++ tmp = 7; ++ tmp2 = M; /* 16 */ ++ } else { /* invalid */ ++ M = M / 4; ++ MUL = 0; ++ tmp = 0; ++ tmp2 = 48; ++ return 1; ++ } ++ if (freq_KHz == 291000) { ++ M = state->tuner_crystal / 1000 / 3; ++ MUL = 12; ++ tmp = 4; ++ tmp2 = M + 32; /* 32 */ ++ } ++ /* ++ if (freq_KHz == 578000) { ++ M = state->tuner_crystal / 1000 / 4; ++ MUL = 4; ++ tmp = 2; ++ tmp2 = M + 16; // 48 ++ } ++ */ ++ if (freq_KHz == 690000) { ++ M = state->tuner_crystal / 1000 / 3; ++ MUL = 4; ++ tmp = 2; ++ tmp2 = M + 16; /* 48 */ ++ } ++ _mt_fe_tn_get_reg(state, 0x33, &buf); ++ buf &= 0xc0; ++ buf += tmp2; ++ _mt_fe_tn_set_reg(state, 0x33, buf); ++ } else { ++ return 1; ++ } ++ _mt_fe_tn_get_reg(state, 0x39, &buf); ++ buf &= 0xf8; ++ buf += tmp; ++ _mt_fe_tn_set_reg(state, 0x39, buf); ++ N = (freq_KHz * MUL * M / crystal_KHz) / 2 * 2 - 256; ++ buf = (N >> 8) & 0xcf; ++ if (state->tuner_mtt == 0xE1) { ++ buf |= 0x30; ++ } ++ _mt_fe_tn_set_reg(state, 0x34, buf); ++ buf = N & 0xff; ++ _mt_fe_tn_set_reg(state, 0x35, buf); ++ F = ((freq_KHz * MUL * M / (crystal_KHz / 1000) / 2) - ++ (freq_KHz * MUL * M / crystal_KHz / 2 * 1000)) * 64 / 1000; ++ buf = F & 0xff; ++ _mt_fe_tn_set_reg(state, 0x36, buf); ++ if (F == 0) { ++ if (state->tuner_mtt == 0xD1) { ++ _mt_fe_tn_set_reg(state, 0x3d, 0xca); ++ } else if (state->tuner_mtt == 0xE1) { ++ _mt_fe_tn_set_reg(state, 0x3d, 0xfe); ++ } else { ++ return 1; ++ } ++ _mt_fe_tn_set_reg(state, 0x3e, 0x9c); ++ _mt_fe_tn_set_reg(state, 0x3f, 0x34); ++ } ++ if (F > 0) { ++ if (state->tuner_mtt == 0xD1) { ++ if ((F == 32) || (F == 16) || (F == 48)) { ++ _mt_fe_tn_set_reg(state, 0x3e, 0xa4); ++ _mt_fe_tn_set_reg(state, 0x3d, 0x4a); ++ _mt_fe_tn_set_reg(state, 0x3f, 0x36); ++ } else { ++ _mt_fe_tn_set_reg(state, 0x3e, 0xa4); ++ _mt_fe_tn_set_reg(state, 0x3d, 0x4a); ++ _mt_fe_tn_set_reg(state, 0x3f, 0x36); ++ } ++ } else if (state->tuner_mtt == 0xE1) { ++ _mt_fe_tn_set_reg(state, 0x3e, 0xa4); ++ _mt_fe_tn_set_reg(state, 0x3d, 0x7e); ++ _mt_fe_tn_set_reg(state, 0x3f, 0x36); ++ _mt_fe_tn_set_reg(state, 0x89, 0x84); ++ _mt_fe_tn_get_reg(state, 0x39, &buf); ++ buf = buf & 0x1f; ++ _mt_fe_tn_set_reg(state, 0x39, buf); ++ _mt_fe_tn_get_reg(state, 0x32, &buf); ++ buf = buf | 0x02; ++ _mt_fe_tn_set_reg(state, 0x32, buf); ++ } else { ++ return 1; ++ } ++ } ++ _mt_fe_tn_set_reg(state, 0x41, 0x00); ++ if (state->tuner_mtt == 0xD1) { ++ msleep(5); ++ } else if (state->tuner_mtt == 0xE1) { ++ msleep(2); ++ } else { ++ return 1; ++ } ++ _mt_fe_tn_set_reg(state, 0x41, 0x02); ++ _mt_fe_tn_set_reg(state, 0x30, 0x7f); ++ _mt_fe_tn_set_reg(state, 0x30, 0xff); ++ _mt_fe_tn_set_reg(state, 0x31, 0x80); ++ _mt_fe_tn_set_reg(state, 0x31, 0x00); ++ ++ return 0; ++} ++ ++static int _mt_fe_tn_set_PLL_freq_tc2800(struct m88dc2800_state *state) ++{ ++ u8 buf, buf1; ++ u32 freq_thres_div2_KHz, freq_thres_div3r_KHz, ++ freq_thres_div3_KHz; ++ const u32 freq_KHz = state->tuner_freq; ++ if (state->tuner_mtt == 0xD1) { ++ _mt_fe_tn_set_reg(state, 0x32, 0xe1); ++ _mt_fe_tn_set_reg(state, 0x33, 0xa6); ++ _mt_fe_tn_set_reg(state, 0x37, 0x7f); ++ _mt_fe_tn_set_reg(state, 0x38, 0x20); ++ _mt_fe_tn_set_reg(state, 0x39, 0x18); ++ _mt_fe_tn_set_reg(state, 0x40, 0x40); ++ freq_thres_div2_KHz = 520000; ++ _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz, ++ freq_thres_div2_KHz, 0, 0); ++ msleep(5); ++ _mt_fe_tn_get_reg(state, 0x3a, &buf); ++ buf1 = buf; ++ buf = buf & 0x03; ++ buf1 = buf1 & 0x01; ++ if ((buf1 == 0) || (buf == 3)) { ++ freq_thres_div2_KHz = 420000; ++ _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz, ++ freq_thres_div2_KHz, 0, ++ 0); ++ msleep(5); ++ _mt_fe_tn_get_reg(state, 0x3a, &buf); ++ buf = buf & 0x07; ++ if (buf == 5) { ++ freq_thres_div2_KHz = 520000; ++ _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz, ++ freq_thres_div2_KHz, ++ 0, 0); ++ msleep(5); ++ } ++ } ++ _mt_fe_tn_get_reg(state, 0x38, &buf); ++ _mt_fe_tn_set_reg(state, 0x38, buf); ++ _mt_fe_tn_get_reg(state, 0x32, &buf); ++ buf = buf | 0x10; ++ _mt_fe_tn_set_reg(state, 0x32, buf); ++ _mt_fe_tn_set_reg(state, 0x30, 0x7f); ++ _mt_fe_tn_set_reg(state, 0x30, 0xff); ++ _mt_fe_tn_get_reg(state, 0x32, &buf); ++ buf = buf & 0xdf; ++ _mt_fe_tn_set_reg(state, 0x32, buf); ++ _mt_fe_tn_set_reg(state, 0x40, 0x0); ++ _mt_fe_tn_set_reg(state, 0x30, 0x7f); ++ _mt_fe_tn_set_reg(state, 0x30, 0xff); ++ _mt_fe_tn_set_reg(state, 0x31, 0x80); ++ _mt_fe_tn_set_reg(state, 0x31, 0x00); ++ msleep(5); ++ _mt_fe_tn_get_reg(state, 0x39, &buf); ++ buf = buf >> 5; ++ if (buf < 5) { ++ _mt_fe_tn_get_reg(state, 0x39, &buf); ++ buf = buf | 0xa0; ++ buf = buf & 0xbf; ++ _mt_fe_tn_set_reg(state, 0x39, buf); ++ _mt_fe_tn_get_reg(state, 0x32, &buf); ++ buf = buf | 0x02; ++ _mt_fe_tn_set_reg(state, 0x32, buf); ++ } ++ _mt_fe_tn_get_reg(state, 0x37, &buf); ++ if (buf > 0x70) { ++ buf = 0x7f; ++ _mt_fe_tn_set_reg(state, 0x40, 0x40); ++ } ++ _mt_fe_tn_set_reg(state, 0x37, buf); ++ _mt_fe_tn_get_reg(state, 0x38, &buf); ++ if (buf < 0x0f) { ++ buf = (buf & 0x0f) << 2; ++ buf = buf + 0x0f; ++ _mt_fe_tn_set_reg(state, 0x37, buf); ++ } else if (buf < 0x1f) { ++ buf = buf + 0x0f; ++ _mt_fe_tn_set_reg(state, 0x37, buf); ++ } ++ _mt_fe_tn_get_reg(state, 0x32, &buf); ++ buf = (buf | 0x20) & 0xef; ++ _mt_fe_tn_set_reg(state, 0x32, buf); ++ _mt_fe_tn_set_reg(state, 0x41, 0x00); ++ msleep(5); ++ _mt_fe_tn_set_reg(state, 0x41, 0x02); ++ } else if (state->tuner_mtt == 0xE1) { ++ freq_thres_div2_KHz = 580000; ++ freq_thres_div3r_KHz = 500000; ++ freq_thres_div3_KHz = 440000; ++ _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz, ++ freq_thres_div2_KHz, ++ freq_thres_div3r_KHz, ++ freq_thres_div3_KHz); ++ msleep(3); ++ _mt_fe_tn_get_reg(state, 0x38, &buf); ++ _mt_fe_tn_set_reg(state, 0x38, buf); ++ _mt_fe_tn_set_reg(state, 0x30, 0x7f); ++ _mt_fe_tn_set_reg(state, 0x30, 0xff); ++ _mt_fe_tn_set_reg(state, 0x31, 0x80); ++ _mt_fe_tn_set_reg(state, 0x31, 0x00); ++ msleep(3); ++ _mt_fe_tn_get_reg(state, 0x38, &buf); ++ _mt_fe_tn_set_reg(state, 0x38, buf); ++ _mt_fe_tn_get_reg(state, 0x32, &buf); ++ buf = buf | 0x10; ++ _mt_fe_tn_set_reg(state, 0x32, buf); ++ _mt_fe_tn_set_reg(state, 0x30, 0x7f); ++ _mt_fe_tn_set_reg(state, 0x30, 0xff); ++ _mt_fe_tn_get_reg(state, 0x32, &buf); ++ buf = buf & 0xdf; ++ _mt_fe_tn_set_reg(state, 0x32, buf); ++ _mt_fe_tn_set_reg(state, 0x31, 0x80); ++ _mt_fe_tn_set_reg(state, 0x31, 0x00); ++ msleep(3); ++ _mt_fe_tn_get_reg(state, 0x37, &buf); ++ _mt_fe_tn_set_reg(state, 0x37, buf); ++ /* ++ if ((freq_KHz == 802000) || (freq_KHz == 826000)) { ++ _mt_fe_tn_set_reg(state, 0x37, 0x5e); ++ } ++ */ ++ _mt_fe_tn_get_reg(state, 0x32, &buf); ++ buf = (buf & 0xef) | 0x30; ++ _mt_fe_tn_set_reg(state, 0x32, buf); ++ _mt_fe_tn_set_reg(state, 0x41, 0x00); ++ msleep(2); ++ _mt_fe_tn_set_reg(state, 0x41, 0x02); ++ } else { ++ return 1; ++ } ++ return 0; ++} ++ ++static int _mt_fe_tn_set_BB_tc2800(struct m88dc2800_state *state) ++{ ++ return 0; ++} ++ ++ static int _mt_fe_tn_set_appendix_tc2800(struct m88dc2800_state *state) ++ ++{ ++ u8 buf; ++ const u32 freq_KHz = state->tuner_freq; ++ if (state->tuner_mtt == 0xD1) { ++ if ((freq_KHz == 123000) || (freq_KHz == 147000) || ++ (freq_KHz == 171000) || (freq_KHz == 195000)) { ++ _mt_fe_tn_set_reg(state, 0x20, 0x1b); ++ } ++ if ((freq_KHz == 371000) || (freq_KHz == 419000) || ++ (freq_KHz == 610000) || (freq_KHz == 730000) || ++ (freq_KHz == 754000) || (freq_KHz == 826000)) { ++ _mt_fe_tn_get_reg(state, 0x0d, &buf); ++ _mt_fe_tn_set_reg(state, 0x0d, (u8) (buf + 1)); ++ } ++ if ((freq_KHz == 522000) || (freq_KHz == 578000) || ++ (freq_KHz == 634000) || (freq_KHz == 690000) || ++ (freq_KHz == 834000)) { ++ _mt_fe_tn_get_reg(state, 0x0d, &buf); ++ _mt_fe_tn_set_reg(state, 0x0d, (u8) (buf - 1)); ++ } ++ } else if (state->tuner_mtt == 0xE1) { ++ _mt_fe_tn_set_reg(state, 0x20, 0xfc); ++ if (freq_KHz == 123000 || freq_KHz == 147000 || ++ freq_KHz == 171000 || freq_KHz == 195000 || ++ freq_KHz == 219000 || freq_KHz == 267000 || ++ freq_KHz == 291000 || freq_KHz == 339000 || ++ freq_KHz == 387000 || freq_KHz == 435000 || ++ freq_KHz == 482000 || freq_KHz == 530000 || ++ freq_KHz == 722000 || ++ (state->tuner_custom_cfg == 1 && freq_KHz == 315000)) { ++ _mt_fe_tn_set_reg(state, 0x20, 0x5c); ++ } ++ } ++ return 0; ++} ++ ++ static int _mt_fe_tn_set_DAC_tc2800(struct m88dc2800_state *state) ++{ ++ u8 buf, tempnumber; ++ s32 N; ++ s32 f1f2number, f1, f2, delta1, Totalnum1; ++ s32 cntT, cntin, NCOI, z0, z1, z2, tmp; ++ u32 fc, fadc, fsd, f2d; ++ u32 FreqTrue108_Hz; ++ s32 M = state->tuner_crystal / 4000; ++ /* const u8 bandwidth = state->tuner_bandwidth; */ ++ const u16 DAC_fre = 108; ++ const u32 crystal_KHz = state->tuner_crystal; ++ const u32 DACFreq_KHz = state->tuner_dac; ++ const u32 freq_KHz = state->tuner_freq; ++ ++ if (state->tuner_mtt == 0xE1) { ++ _mt_fe_tn_get_reg(state, 0x33, &buf); ++ M = buf & 0x0f; ++ if (M == 0) ++ M = 6; ++ } ++ _mt_fe_tn_get_reg(state, 0x34, &buf); ++ N = buf & 0x07; ++ _mt_fe_tn_get_reg(state, 0x35, &buf); ++ N = (N << 8) + buf; ++ buf = ((N + 256) * crystal_KHz / M / DAC_fre + 500) / 1000; ++ if (state->tuner_mtt == 0xE1) { ++ _mt_fe_tn_set_appendix_tc2800(state); ++ if (freq_KHz == 187000 || freq_KHz == 195000 || ++ freq_KHz == 131000 || freq_KHz == 211000 || ++ freq_KHz == 219000 || freq_KHz == 227000 || ++ freq_KHz == 267000 || freq_KHz == 299000 || ++ freq_KHz == 347000 || freq_KHz == 363000 || ++ freq_KHz == 395000 || freq_KHz == 403000 || ++ freq_KHz == 435000 || freq_KHz == 482000 || ++ freq_KHz == 474000 || freq_KHz == 490000 || ++ freq_KHz == 610000 || freq_KHz == 642000 || ++ freq_KHz == 666000 || freq_KHz == 722000 || ++ freq_KHz == 754000 || ++ ((freq_KHz == 379000 || freq_KHz == 467000 || ++ freq_KHz == 762000) && state->tuner_custom_cfg != 1)) { ++ buf = buf + 1; ++ } ++ if (freq_KHz == 123000 || freq_KHz == 139000 || ++ freq_KHz == 147000 || freq_KHz == 171000 || ++ freq_KHz == 179000 || freq_KHz == 203000 || ++ freq_KHz == 235000 || freq_KHz == 251000 || ++ freq_KHz == 259000 || freq_KHz == 283000 || ++ freq_KHz == 331000 || freq_KHz == 363000 || ++ freq_KHz == 371000 || freq_KHz == 387000 || ++ freq_KHz == 411000 || freq_KHz == 427000 || ++ freq_KHz == 443000 || freq_KHz == 451000 || ++ freq_KHz == 459000 || freq_KHz == 506000 || ++ freq_KHz == 514000 || freq_KHz == 538000 || ++ freq_KHz == 546000 || freq_KHz == 554000 || ++ freq_KHz == 562000 || freq_KHz == 570000 || ++ freq_KHz == 578000 || freq_KHz == 602000 || ++ freq_KHz == 626000 || freq_KHz == 658000 || ++ freq_KHz == 690000 || freq_KHz == 714000 || ++ freq_KHz == 746000 || freq_KHz == 522000 || ++ freq_KHz == 826000 || freq_KHz == 155000 || ++ freq_KHz == 530000 || ++ ((freq_KHz == 275000 || freq_KHz == 355000) && ++ state->tuner_custom_cfg != 1) || ++ ((freq_KHz == 467000 || freq_KHz == 762000 || ++ freq_KHz == 778000 || freq_KHz == 818000) && ++ state->tuner_custom_cfg == 1)) { ++ buf = buf - 1; ++ } ++ } ++ _mt_fe_tn_set_reg(state, 0x0e, buf); ++ _mt_fe_tn_set_reg(state, 0x0d, buf); ++ f1f2number = ++ (((DACFreq_KHz * M * buf) / crystal_KHz) << 16) / (N + 256) + ++ (((DACFreq_KHz * M * buf) % crystal_KHz) << 16) / ((N + 256) * ++ crystal_KHz); ++ _mt_fe_tn_set_reg(state, 0xf1, (f1f2number & 0xff00) >> 8); ++ _mt_fe_tn_set_reg(state, 0xf2, f1f2number & 0x00ff); ++ FreqTrue108_Hz = ++ (N + 256) * crystal_KHz / (M * buf) * 1000 + ++ (((N + 256) * crystal_KHz) % (M * buf)) * 1000 / (M * buf); ++ f1 = 4096; ++ fc = FreqTrue108_Hz; ++ fadc = fc / 4; ++ fsd = 27000000; ++ f2d = state->tuner_bandwidth * 1000 / 2 - 150; ++ f2 = (fsd / 250) * f2d / ((fc + 500) / 1000); ++ delta1 = ((f1 - f2) << 15) / f2; ++ Totalnum1 = ((f1 - f2) << 15) - delta1 * f2; ++ cntT = f2; ++ cntin = Totalnum1; ++ NCOI = delta1; ++ z0 = cntin; ++ z1 = cntT; ++ z2 = NCOI; ++ tempnumber = (z0 & 0xff00) >> 8; ++ _mt_fe_tn_set_reg(state, 0xc9, (u8) (tempnumber & 0x0f)); ++ tempnumber = (z0 & 0xff); ++ _mt_fe_tn_set_reg(state, 0xca, tempnumber); ++ tempnumber = (z1 & 0xff00) >> 8; ++ _mt_fe_tn_set_reg(state, 0xcb, tempnumber); ++ tempnumber = (z1 & 0xff); ++ _mt_fe_tn_set_reg(state, 0xcc, tempnumber); ++ tempnumber = (z2 & 0xff00) >> 8; ++ _mt_fe_tn_set_reg(state, 0xcd, tempnumber); ++ tempnumber = (z2 & 0xff); ++ _mt_fe_tn_set_reg(state, 0xce, tempnumber); ++ tmp = f1; ++ f1 = f2; ++ f2 = tmp / 2; ++ delta1 = ((f1 - f2) << 15) / f2; ++ Totalnum1 = ((f1 - f2) << 15) - delta1 * f2; ++ NCOI = (f1 << 15) / f2 - (1 << 15); ++ cntT = f2; ++ cntin = Totalnum1; ++ z0 = cntin; ++ z1 = cntT; ++ z2 = NCOI; ++ tempnumber = (z0 & 0xff00) >> 8; ++ _mt_fe_tn_set_reg(state, 0xd9, (u8) (tempnumber & 0x0f)); ++ tempnumber = (z0 & 0xff); ++ _mt_fe_tn_set_reg(state, 0xda, tempnumber); ++ tempnumber = (z1 & 0xff00) >> 8; ++ _mt_fe_tn_set_reg(state, 0xdb, tempnumber); ++ tempnumber = (z1 & 0xff); ++ _mt_fe_tn_set_reg(state, 0xdc, tempnumber); ++ tempnumber = (z2 & 0xff00) >> 8; ++ _mt_fe_tn_set_reg(state, 0xdd, tempnumber); ++ tempnumber = (z2 & 0xff); ++ _mt_fe_tn_set_reg(state, 0xde, tempnumber); ++ ++ return 0; ++} ++ ++static int _mt_fe_tn_preset_tc2800(struct m88dc2800_state *state) ++{ ++ if (state->tuner_mtt == 0xD1) { ++ _mt_fe_tn_set_reg(state, 0x19, 0x4a); ++ _mt_fe_tn_set_reg(state, 0x1b, 0x4b); ++ _mt_fe_tn_set_reg(state, 0x04, 0x04); ++ _mt_fe_tn_set_reg(state, 0x17, 0x0d); ++ _mt_fe_tn_set_reg(state, 0x62, 0x6c); ++ _mt_fe_tn_set_reg(state, 0x63, 0xf4); ++ _mt_fe_tn_set_reg(state, 0x1f, 0x0e); ++ _mt_fe_tn_set_reg(state, 0x6b, 0xf4); ++ _mt_fe_tn_set_reg(state, 0x14, 0x01); ++ _mt_fe_tn_set_reg(state, 0x5a, 0x75); ++ _mt_fe_tn_set_reg(state, 0x66, 0x74); ++ _mt_fe_tn_set_reg(state, 0x72, 0xe0); ++ _mt_fe_tn_set_reg(state, 0x70, 0x07); ++ _mt_fe_tn_set_reg(state, 0x15, 0x7b); ++ _mt_fe_tn_set_reg(state, 0x55, 0x71); ++ _mt_fe_tn_set_reg(state, 0x75, 0x55); ++ _mt_fe_tn_set_reg(state, 0x76, 0xac); ++ _mt_fe_tn_set_reg(state, 0x77, 0x6c); ++ _mt_fe_tn_set_reg(state, 0x78, 0x8b); ++ _mt_fe_tn_set_reg(state, 0x79, 0x42); ++ _mt_fe_tn_set_reg(state, 0x7a, 0xd2); ++ _mt_fe_tn_set_reg(state, 0x81, 0x01); ++ _mt_fe_tn_set_reg(state, 0x82, 0x00); ++ _mt_fe_tn_set_reg(state, 0x82, 0x02); ++ _mt_fe_tn_set_reg(state, 0x82, 0x04); ++ _mt_fe_tn_set_reg(state, 0x82, 0x06); ++ _mt_fe_tn_set_reg(state, 0x82, 0x08); ++ _mt_fe_tn_set_reg(state, 0x82, 0x09); ++ _mt_fe_tn_set_reg(state, 0x82, 0x29); ++ _mt_fe_tn_set_reg(state, 0x82, 0x49); ++ _mt_fe_tn_set_reg(state, 0x82, 0x58); ++ _mt_fe_tn_set_reg(state, 0x82, 0x59); ++ _mt_fe_tn_set_reg(state, 0x82, 0x98); ++ _mt_fe_tn_set_reg(state, 0x82, 0x99); ++ _mt_fe_tn_set_reg(state, 0x10, 0x05); ++ _mt_fe_tn_set_reg(state, 0x10, 0x0d); ++ _mt_fe_tn_set_reg(state, 0x11, 0x95); ++ _mt_fe_tn_set_reg(state, 0x11, 0x9d); ++ if (state->tuner_loopthrough != 0) { ++ _mt_fe_tn_set_reg(state, 0x67, 0x25); ++ } else { ++ _mt_fe_tn_set_reg(state, 0x67, 0x05); ++ } ++ } else if (state->tuner_mtt == 0xE1) { ++ _mt_fe_tn_set_reg(state, 0x1b, 0x47); ++ if (state->tuner_mode == 0) { /* DVB-C */ ++ _mt_fe_tn_set_reg(state, 0x66, 0x74); ++ _mt_fe_tn_set_reg(state, 0x62, 0x2c); ++ _mt_fe_tn_set_reg(state, 0x63, 0x54); ++ _mt_fe_tn_set_reg(state, 0x68, 0x0b); ++ _mt_fe_tn_set_reg(state, 0x14, 0x00); ++ } else { /* CTTB */ ++ _mt_fe_tn_set_reg(state, 0x66, 0x74); ++ _mt_fe_tn_set_reg(state, 0x62, 0x0c); ++ _mt_fe_tn_set_reg(state, 0x63, 0x54); ++ _mt_fe_tn_set_reg(state, 0x68, 0x0b); ++ _mt_fe_tn_set_reg(state, 0x14, 0x05); ++ } ++ _mt_fe_tn_set_reg(state, 0x6f, 0x00); ++ _mt_fe_tn_set_reg(state, 0x84, 0x04); ++ _mt_fe_tn_set_reg(state, 0x5e, 0xbe); ++ _mt_fe_tn_set_reg(state, 0x87, 0x07); ++ _mt_fe_tn_set_reg(state, 0x8a, 0x1f); ++ _mt_fe_tn_set_reg(state, 0x8b, 0x1f); ++ _mt_fe_tn_set_reg(state, 0x88, 0x30); ++ _mt_fe_tn_set_reg(state, 0x58, 0x34); ++ _mt_fe_tn_set_reg(state, 0x61, 0x8c); ++ _mt_fe_tn_set_reg(state, 0x6a, 0x42); ++ } ++ return 0; ++} ++ ++static int mt_fe_tn_wakeup_tc2800(struct m88dc2800_state *state) ++{ ++ _mt_fe_tn_set_reg(state, 0x16, 0xb1); ++ _mt_fe_tn_set_reg(state, 0x09, 0x7d); ++ return 0; ++} ++ ++ static int mt_fe_tn_sleep_tc2800(struct m88dc2800_state *state) ++{ ++ _mt_fe_tn_set_reg(state, 0x16, 0xb0); ++ _mt_fe_tn_set_reg(state, 0x09, 0x6d); ++ return 0; ++} ++ ++ static int mt_fe_tn_init_tc2800(struct m88dc2800_state *state) ++{ ++ if (state->tuner_init_OK != 1) { ++ state->tuner_dev_addr = 0x61; /* TUNER_I2C_ADDR_TC2800 */ ++ state->tuner_freq = 650000; ++ state->tuner_qam = 0; ++ state->tuner_mode = 0; // 0: DVB-C, 1: CTTB ++ state->tuner_bandwidth = 8; ++ state->tuner_loopthrough = 0; ++ state->tuner_crystal = 24000; ++ state->tuner_dac = 7200; ++ state->tuner_mtt = 0x00; ++ state->tuner_custom_cfg = 0; ++ state->tuner_version = 30022; /* Driver version number */ ++ state->tuner_time = 12092611; ++ state->tuner_init_OK = 1; ++ } ++ _mt_fe_tn_set_reg(state, 0x2b, 0x46); ++ _mt_fe_tn_set_reg(state, 0x2c, 0x75); ++ if (state->tuner_mtt == 0x00) { ++ u8 tmp = 0; ++ _mt_fe_tn_get_reg(state, 0x01, &tmp); ++ printk(KERN_INFO "m88dc2800: tuner id = 0x%02x ", tmp); ++ switch (tmp) { ++ case 0x0d: ++ state->tuner_mtt = 0xD1; ++ break; ++ case 0x8e: ++ default: ++ state->tuner_mtt = 0xE1; ++ break; ++ } ++ } ++ return 0; ++} ++ ++ static int mt_fe_tn_set_freq_tc2800(struct m88dc2800_state *state, ++ u32 freq_KHz) ++{ ++ u8 buf; ++ u8 buf1; ++ ++ mt_fe_tn_init_tc2800(state); ++ state->tuner_freq = freq_KHz; ++ _mt_fe_tn_set_reg(state, 0x21, freq_KHz > 500000 ? 0xb9 : 0x99); ++ mt_fe_tn_wakeup_tc2800(state); ++ _mt_fe_tn_set_reg(state, 0x05, 0x7f); ++ _mt_fe_tn_set_reg(state, 0x06, 0xf8); ++ _mt_fe_tn_set_RF_front_tc2800(state); ++ _mt_fe_tn_set_PLL_freq_tc2800(state); ++ _mt_fe_tn_set_DAC_tc2800(state); ++ _mt_fe_tn_set_BB_tc2800(state); ++ _mt_fe_tn_preset_tc2800(state); ++ _mt_fe_tn_set_reg(state, 0x05, 0x00); ++ _mt_fe_tn_set_reg(state, 0x06, 0x00); ++ if (state->tuner_mtt == 0xD1) { ++ _mt_fe_tn_set_reg(state, 0x00, 0x01); ++ _mt_fe_tn_set_reg(state, 0x00, 0x00); ++ msleep(5); ++ _mt_fe_tn_set_reg(state, 0x41, 0x00); ++ msleep(5); ++ _mt_fe_tn_set_reg(state, 0x41, 0x02); ++ ++ _mt_fe_tn_get_reg(state, 0x69, &buf1); ++ buf1 = buf1 & 0x0f; ++ _mt_fe_tn_get_reg(state, 0x61, &buf); ++ buf = buf & 0x0f; ++ if (buf == 0x0c) ++ _mt_fe_tn_set_reg(state, 0x6a, 0x59); ++ if (buf1 > 0x02) { ++ if (freq_KHz > 600000) ++ _mt_fe_tn_set_reg(state, 0x66, 0x44); ++ else if (freq_KHz > 500000) ++ _mt_fe_tn_set_reg(state, 0x66, 0x64); ++ else ++ _mt_fe_tn_set_reg(state, 0x66, 0x74); ++ } ++ if (buf1 < 0x03) { ++ if (freq_KHz > 800000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x64); ++ else if (freq_KHz > 600000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x54); ++ else if (freq_KHz > 500000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x54); ++ else if (freq_KHz > 300000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x43); ++ else if (freq_KHz > 220000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x54); ++ else if (freq_KHz > 110000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x14); ++ else ++ _mt_fe_tn_set_reg(state, 0x87, 0x54); ++ msleep(5); ++ } else if (buf < 0x0c) { ++ if (freq_KHz > 800000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x14); ++ else if (freq_KHz > 600000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x14); ++ else if (freq_KHz > 500000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x34); ++ else if (freq_KHz > 300000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x43); ++ else if (freq_KHz > 220000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x54); ++ else if (freq_KHz > 110000) ++ _mt_fe_tn_set_reg(state, 0x87, 0x14); ++ else ++ _mt_fe_tn_set_reg(state, 0x87, 0x54); ++ msleep(5); ++ } ++ } else if ((state->tuner_mtt == 0xE1)) { ++ _mt_fe_tn_set_reg(state, 0x00, 0x01); ++ _mt_fe_tn_set_reg(state, 0x00, 0x00); ++ msleep(20); ++ _mt_fe_tn_get_reg(state, 0x32, &buf); ++ buf = (buf & 0xef) | 0x28; ++ _mt_fe_tn_set_reg(state, 0x32, buf); ++ msleep(50); ++ _mt_fe_tn_get_reg(state, 0x38, &buf); ++ _mt_fe_tn_set_reg(state, 0x38, buf); ++ _mt_fe_tn_get_reg(state, 0x32, &buf); ++ buf = (buf & 0xf7) | 0x10; ++ _mt_fe_tn_set_reg(state, 0x32, buf); ++ msleep(10); ++ _mt_fe_tn_get_reg(state, 0x69, &buf); ++ buf = buf & 0x03; ++ _mt_fe_tn_set_reg(state, 0x2a, buf); ++ if (buf > 0) { ++ msleep(20); ++ _mt_fe_tn_get_reg(state, 0x84, &buf); ++ buf = buf & 0x1f; ++ _mt_fe_tn_set_reg(state, 0x68, 0x0a); ++ _mt_fe_tn_get_reg(state, 0x88, &buf1); ++ buf1 = buf1 & 0x1f; ++ if (buf <= buf1) ++ _mt_fe_tn_set_reg(state, 0x66, 0x44); ++ else ++ _mt_fe_tn_set_reg(state, 0x66, 0x74); ++ } else { ++ if (freq_KHz <= 600000) ++ _mt_fe_tn_set_reg(state, 0x68, 0x0c); ++ else ++ _mt_fe_tn_set_reg(state, 0x68, 0x0e); ++ _mt_fe_tn_set_reg(state, 0x30, 0xfb); ++ _mt_fe_tn_set_reg(state, 0x30, 0xff); ++ _mt_fe_tn_set_reg(state, 0x31, 0x04); ++ _mt_fe_tn_set_reg(state, 0x31, 0x00); ++ } ++ if (state->tuner_loopthrough != 0) { ++ _mt_fe_tn_get_reg(state, 0x28, &buf); ++ if (buf == 0) { ++ _mt_fe_tn_set_reg(state, 0x28, 0xff); ++ _mt_fe_tn_get_reg(state, 0x61, &buf); ++ buf = buf & 0x0f; ++ if (buf > 9) ++ _mt_fe_tn_set_reg(state, 0x67, 0x74); ++ else if (buf > 6) ++ _mt_fe_tn_set_reg(state, 0x67, 0x64); ++ else if (buf > 3) ++ _mt_fe_tn_set_reg(state, 0x67, 0x54); ++ else ++ _mt_fe_tn_set_reg(state, 0x67, 0x44); ++ } ++ } else { ++ _mt_fe_tn_set_reg(state, 0x67, 0x34); ++ } ++ } else { ++ return 1; ++ } ++ return 0; ++} ++ ++ ++/* ++static int mt_fe_tn_set_BB_filter_band_tc2800(struct m88dc2800_state *state, ++ u8 bandwidth) ++{ ++ u8 buf, tmp; ++ ++ _mt_fe_tn_get_reg(state, 0x53, &tmp); ++ ++ if (bandwidth == 6) ++ buf = 0x01 << 1; ++ else if (bandwidth == 7) ++ buf = 0x02 << 1; ++ else if (bandwidth == 8) ++ buf = 0x04 << 1; ++ else ++ buf = 0x04 << 1; ++ ++ tmp &= 0xf1; ++ tmp |= buf; ++ _mt_fe_tn_set_reg(state, 0x53, tmp); ++ state->tuner_bandwidth = bandwidth; ++ return 0; ++} ++*/ ++ ++static s32 mt_fe_tn_get_signal_strength_tc2800(struct m88dc2800_state ++ *state) ++{ ++ s32 level = -107; ++ s32 tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; ++ s32 val1, val2, val; ++ s32 result2, result3, result4, result5, result6; ++ s32 append; ++ u8 tmp; ++ s32 freq_KHz = (s32) state->tuner_freq; ++ if (state->tuner_mtt == 0xD1) { ++ _mt_fe_tn_get_reg(state, 0x61, &tmp); ++ tmp1 = tmp & 0x0f; ++ _mt_fe_tn_get_reg(state, 0x69, &tmp); ++ tmp2 = tmp & 0x0f; ++ _mt_fe_tn_get_reg(state, 0x73, &tmp); ++ tmp3 = tmp & 0x07; ++ _mt_fe_tn_get_reg(state, 0x7c, &tmp); ++ tmp4 = (tmp >> 4) & 0x0f; ++ _mt_fe_tn_get_reg(state, 0x7b, &tmp); ++ tmp5 = tmp & 0x0f; ++ _mt_fe_tn_get_reg(state, 0x7f, &tmp); ++ tmp6 = (tmp >> 5) & 0x01; ++ if (tmp1 > 6) { ++ val1 = 0; ++ if (freq_KHz <= 200000) { ++ val2 = (tmp1 - 6) * 267; ++ } else if (freq_KHz <= 600000) { ++ val2 = (tmp1 - 6) * 280; ++ } else { ++ val2 = (tmp1 - 6) * 290; ++ } ++ val = val1 + val2; ++ } else { ++ if (tmp1 == 0) { ++ val1 = -550; ++ } else { ++ val1 = 0; ++ } ++ if ((tmp1 < 4) && (freq_KHz >= 506000)) { ++ val1 = -850; ++ } ++ val2 = 0; ++ val = val1 + val2; ++ } ++ if (freq_KHz <= 95000) { ++ result2 = tmp2 * 289; ++ } else if (freq_KHz <= 155000) { ++ result2 = tmp2 * 278; ++ } else if (freq_KHz <= 245000) { ++ result2 = tmp2 * 267; ++ } else if (freq_KHz <= 305000) { ++ result2 = tmp2 * 256; ++ } else if (freq_KHz <= 335000) { ++ result2 = tmp2 * 244; ++ } else if (freq_KHz <= 425000) { ++ result2 = tmp2 * 233; ++ } else if (freq_KHz <= 575000) { ++ result2 = tmp2 * 222; ++ } else if (freq_KHz <= 665000) { ++ result2 = tmp2 * 211; ++ } else { ++ result2 = tmp2 * 200; ++ } ++ result3 = (6 - tmp3) * 100; ++ result4 = 300 * tmp4; ++ result5 = 50 * tmp5; ++ result6 = 300 * tmp6; ++ if (freq_KHz < 105000) { ++ append = -450; ++ } else if (freq_KHz <= 227000) { ++ append = -4 * (freq_KHz / 1000 - 100) + 150; ++ } else if (freq_KHz <= 305000) { ++ append = -4 * (freq_KHz / 1000 - 100); ++ } else if (freq_KHz <= 419000) { ++ append = 500 - 40 * (freq_KHz / 1000 - 300) / 17 + 130; ++ } else if (freq_KHz <= 640000) { ++ append = 500 - 40 * (freq_KHz / 1000 - 300) / 17; ++ } else { ++ append = -500; ++ } ++ level = append - (val + result2 + result3 + result4 + ++ result5 + result6); ++ level /= 100; ++ } else if (state->tuner_mtt == 0xE1) { ++ _mt_fe_tn_get_reg(state, 0x61, &tmp); ++ tmp1 = tmp & 0x0f; ++ _mt_fe_tn_get_reg(state, 0x84, &tmp); ++ tmp2 = tmp & 0x1f; ++ _mt_fe_tn_get_reg(state, 0x69, &tmp); ++ tmp3 = tmp & 0x03; ++ _mt_fe_tn_get_reg(state, 0x73, &tmp); ++ tmp4 = tmp & 0x0f; ++ _mt_fe_tn_get_reg(state, 0x7c, &tmp); ++ tmp5 = (tmp >> 4) & 0x0f; ++ _mt_fe_tn_get_reg(state, 0x7b, &tmp); ++ tmp6 = tmp & 0x0f; ++ if (freq_KHz < 151000) { ++ result2 = (1150 - freq_KHz / 100) * 163 / 33 + 4230; ++ result3 = (1150 - freq_KHz / 100) * 115 / 33 + 1850; ++ result4 = -3676 * (freq_KHz / 1000) / 100 + 6115; ++ } else if (freq_KHz < 257000) { ++ result2 = (1540 - freq_KHz / 100) * 11 / 4 + 3870; ++ result3 = (1540 - freq_KHz / 100) * 205 / 96 + 2100; ++ result4 = -21 * freq_KHz / 1000 + 5084; ++ } else if (freq_KHz < 305000) { ++ result2 = (2620 - freq_KHz / 100) * 5 / 3 + 2770; ++ result3 = (2620 - freq_KHz / 100) * 10 / 7 + 1700; ++ result4 = 650; ++ } else if (freq_KHz < 449000) { ++ result2 = (307 - freq_KHz / 1000) * 82 / 27 + 11270; ++ result3 = (3100 - freq_KHz / 100) * 5 / 3 + 10000; ++ result4 = 134 * freq_KHz / 10000 + 11875; ++ } else { ++ result2 = (307 - freq_KHz / 1000) * 82 / 27 + 11270; ++ result3 = 8400; ++ result4 = 5300; ++ } ++ if (tmp1 > 6) { ++ val1 = result2; ++ val2 = 2900; ++ val = 500; ++ } else if (tmp1 > 0) { ++ val1 = result3; ++ val2 = 2700; ++ val = 500; ++ } else { ++ val1 = result4; ++ val2 = 2700; ++ val = 400; ++ } ++ level = val1 - (val2 * tmp1 + 500 * tmp2 + 3000 * tmp3 - ++ 500 * tmp4 + 3000 * tmp5 + val * tmp6) - 1000; ++ level /= 1000; ++ } ++ return level; ++} ++ ++ ++/* m88dc2800 operation functions */ ++u8 M88DC2000GetLock(struct m88dc2800_state * state) ++{ ++ u8 u8ret = 0; ++ if (ReadReg(state, 0x80) < 0x06) { ++ if ((ReadReg(state, 0xdf) & 0x80) == 0x80 ++ &&(ReadReg(state, 0x91) & 0x23) == 0x03 ++ &&(ReadReg(state, 0x43) & 0x08) == 0x08) ++ u8ret = 1; ++ else ++ u8ret = 0; ++ } else { ++ if ((ReadReg(state, 0x85) & 0x08) == 0x08) ++ u8ret = 1; ++ else ++ u8ret = 0; ++ } ++ dprintk("%s, lock=%d\n", __func__, u8ret); ++ return u8ret; ++} ++ ++static int M88DC2000SetTsType(struct m88dc2800_state *state, u8 type) ++{ ++ u8 regC2H; ++ ++ if (type == 3) { ++ WriteReg(state, 0x84, 0x6A); ++ WriteReg(state, 0xC0, 0x43); ++ WriteReg(state, 0xE2, 0x06); ++ regC2H = ReadReg(state, 0xC2); ++ regC2H &= 0xC0; ++ regC2H |= 0x1B; ++ WriteReg(state, 0xC2, regC2H); ++ WriteReg(state, 0xC1, 0x60); /* common interface */ ++ } else if (type == 1) { ++ WriteReg(state, 0x84, 0x6A); ++ WriteReg(state, 0xC0, 0x47); /* serial format */ ++ WriteReg(state, 0xE2, 0x02); ++ regC2H = ReadReg(state, 0xC2); ++ regC2H &= 0xC7; ++ WriteReg(state, 0xC2, regC2H); ++ WriteReg(state, 0xC1, 0x00); ++ } else { ++ WriteReg(state, 0x84, 0x6C); ++ WriteReg(state, 0xC0, 0x43); /* parallel format */ ++ WriteReg(state, 0xE2, 0x06); ++ regC2H = ReadReg(state, 0xC2); ++ regC2H &= 0xC7; ++ WriteReg(state, 0xC2, regC2H); ++ WriteReg(state, 0xC1, 0x00); ++ } ++ return 0; ++} ++ ++static int M88DC2000RegInitial_TC2800(struct m88dc2800_state *state) ++{ ++ u8 RegE3H, RegE4H; ++ ++ WriteReg(state, 0x00, 0x48); ++ WriteReg(state, 0x01, 0x09); ++ WriteReg(state, 0xFB, 0x0A); ++ WriteReg(state, 0xFC, 0x0B); ++ WriteReg(state, 0x02, 0x0B); ++ WriteReg(state, 0x03, 0x18); ++ WriteReg(state, 0x05, 0x0D); ++ WriteReg(state, 0x36, 0x80); ++ WriteReg(state, 0x43, 0x40); ++ WriteReg(state, 0x55, 0x7A); ++ WriteReg(state, 0x56, 0xD9); ++ WriteReg(state, 0x57, 0xDF); ++ WriteReg(state, 0x58, 0x39); ++ WriteReg(state, 0x5A, 0x00); ++ WriteReg(state, 0x5C, 0x71); ++ WriteReg(state, 0x5D, 0x23); ++ WriteReg(state, 0x86, 0x40); ++ WriteReg(state, 0xF9, 0x08); ++ WriteReg(state, 0x61, 0x40); ++ WriteReg(state, 0x62, 0x0A); ++ WriteReg(state, 0x90, 0x06); ++ WriteReg(state, 0xDE, 0x00); ++ WriteReg(state, 0xA0, 0x03); ++ WriteReg(state, 0xDF, 0x81); ++ WriteReg(state, 0xFA, 0x40); ++ WriteReg(state, 0x37, 0x10); ++ WriteReg(state, 0xF0, 0x40); ++ WriteReg(state, 0xF2, 0x9C); ++ WriteReg(state, 0xF3, 0x40); ++ RegE3H = ReadReg(state, 0xE3); ++ RegE4H = ReadReg(state, 0xE4); ++ if (((RegE3H & 0xC0) == 0x00) && ((RegE4H & 0xC0) == 0x00)) { ++ WriteReg(state, 0x30, 0xFF); ++ WriteReg(state, 0x31, 0x00); ++ WriteReg(state, 0x32, 0x00); ++ WriteReg(state, 0x33, 0x00); ++ WriteReg(state, 0x35, 0x32); ++ WriteReg(state, 0x40, 0x00); ++ WriteReg(state, 0x41, 0x10); ++ WriteReg(state, 0xF1, 0x02); ++ WriteReg(state, 0xF4, 0x04); ++ WriteReg(state, 0xF5, 0x00); ++ WriteReg(state, 0x42, 0x14); ++ WriteReg(state, 0xE1, 0x25); ++ } else if (((RegE3H & 0xC0) == 0x80) && ((RegE4H & 0xC0) == 0x40)) { ++ WriteReg(state, 0x30, 0xFF); ++ WriteReg(state, 0x31, 0x00); ++ WriteReg(state, 0x32, 0x00); ++ WriteReg(state, 0x33, 0x00); ++ WriteReg(state, 0x35, 0x32); ++ WriteReg(state, 0x39, 0x00); ++ WriteReg(state, 0x3A, 0x00); ++ WriteReg(state, 0x40, 0x00); ++ WriteReg(state, 0x41, 0x10); ++ WriteReg(state, 0xF1, 0x00); ++ WriteReg(state, 0xF4, 0x00); ++ WriteReg(state, 0xF5, 0x40); ++ WriteReg(state, 0x42, 0x14); ++ WriteReg(state, 0xE1, 0x25); ++ } else if ((RegE3H == 0x80 || RegE3H == 0x81) ++ && (RegE4H == 0x80 || RegE4H == 0x81)) { ++ WriteReg(state, 0x30, 0xFF); ++ WriteReg(state, 0x31, 0x00); ++ WriteReg(state, 0x32, 0x00); ++ WriteReg(state, 0x33, 0x00); ++ WriteReg(state, 0x35, 0x32); ++ WriteReg(state, 0x39, 0x00); ++ WriteReg(state, 0x3A, 0x00); ++ WriteReg(state, 0xF1, 0x00); ++ WriteReg(state, 0xF4, 0x00); ++ WriteReg(state, 0xF5, 0x40); ++ WriteReg(state, 0x42, 0x24); ++ WriteReg(state, 0xE1, 0x25); ++ WriteReg(state, 0x92, 0x7F); ++ WriteReg(state, 0x93, 0x91); ++ WriteReg(state, 0x95, 0x00); ++ WriteReg(state, 0x2B, 0x33); ++ WriteReg(state, 0x2A, 0x2A); ++ WriteReg(state, 0x2E, 0x80); ++ WriteReg(state, 0x25, 0x25); ++ WriteReg(state, 0x2D, 0xFF); ++ WriteReg(state, 0x26, 0xFF); ++ WriteReg(state, 0x27, 0x00); ++ WriteReg(state, 0x24, 0x25); ++ WriteReg(state, 0xA4, 0xFF); ++ WriteReg(state, 0xA3, 0x0D); ++ } else { ++ WriteReg(state, 0x30, 0xFF); ++ WriteReg(state, 0x31, 0x00); ++ WriteReg(state, 0x32, 0x00); ++ WriteReg(state, 0x33, 0x00); ++ WriteReg(state, 0x35, 0x32); ++ WriteReg(state, 0x39, 0x00); ++ WriteReg(state, 0x3A, 0x00); ++ WriteReg(state, 0xF1, 0x00); ++ WriteReg(state, 0xF4, 0x00); ++ WriteReg(state, 0xF5, 0x40); ++ WriteReg(state, 0x42, 0x24); ++ WriteReg(state, 0xE1, 0x27); ++ WriteReg(state, 0x92, 0x7F); ++ WriteReg(state, 0x93, 0x91); ++ WriteReg(state, 0x95, 0x00); ++ WriteReg(state, 0x2B, 0x33); ++ WriteReg(state, 0x2A, 0x2A); ++ WriteReg(state, 0x2E, 0x80); ++ WriteReg(state, 0x25, 0x25); ++ WriteReg(state, 0x2D, 0xFF); ++ WriteReg(state, 0x26, 0xFF); ++ WriteReg(state, 0x27, 0x00); ++ WriteReg(state, 0x24, 0x25); ++ WriteReg(state, 0xA4, 0xFF); ++ WriteReg(state, 0xA3, 0x10); ++ } ++ WriteReg(state, 0xF6, 0x4E); ++ WriteReg(state, 0xF7, 0x20); ++ WriteReg(state, 0x89, 0x02); ++ WriteReg(state, 0x14, 0x08); ++ WriteReg(state, 0x6F, 0x0D); ++ WriteReg(state, 0x10, 0xFF); ++ WriteReg(state, 0x11, 0x00); ++ WriteReg(state, 0x12, 0x30); ++ WriteReg(state, 0x13, 0x23); ++ WriteReg(state, 0x60, 0x00); ++ WriteReg(state, 0x69, 0x00); ++ WriteReg(state, 0x6A, 0x03); ++ WriteReg(state, 0xE0, 0x75); ++ WriteReg(state, 0x8D, 0x29); ++ WriteReg(state, 0x4E, 0xD8); ++ WriteReg(state, 0x88, 0x80); ++ WriteReg(state, 0x52, 0x79); ++ WriteReg(state, 0x53, 0x03); ++ WriteReg(state, 0x59, 0x30); ++ WriteReg(state, 0x5E, 0x02); ++ WriteReg(state, 0x5F, 0x0F); ++ WriteReg(state, 0x71, 0x03); ++ WriteReg(state, 0x72, 0x12); ++ WriteReg(state, 0x73, 0x12); ++ ++ return 0; ++} ++ ++static int M88DC2000AutoTSClock_P(struct m88dc2800_state *state, u32 sym, ++ u16 qam) ++{ ++ u32 dataRate; ++ u8 clk_div, value; ++ printk(KERN_INFO ++ "m88dc2800: M88DC2000AutoTSClock_P, symrate=%d qam=%d\n", ++ sym, qam); ++ switch (qam) { ++ case 16: ++ dataRate = 4; ++ break; ++ case 32: ++ dataRate = 5; ++ break; ++ case 128: ++ dataRate = 7; ++ break; ++ case 256: ++ dataRate = 8; ++ break; ++ case 64: ++ default: ++ dataRate = 6; ++ break; ++ } ++ dataRate *= sym * 105; ++ dataRate /= 800; ++ if (dataRate <= 4115) ++ clk_div = 0x05; ++ else if (dataRate <= 4800) ++ clk_div = 0x04; ++ else if (dataRate <= 5760) ++ clk_div = 0x03; ++ else if (dataRate <= 7200) ++ clk_div = 0x02; ++ else if (dataRate <= 9600) ++ clk_div = 0x01; ++ else ++ clk_div = 0x00; ++ value = ReadReg(state, 0xC2); ++ value &= 0xc0; ++ value |= clk_div; ++ WriteReg(state, 0xC2, value); ++ return 0; ++} ++ ++static int M88DC2000AutoTSClock_C(struct m88dc2800_state *state, u32 sym, ++ u16 qam) ++{ ++ u32 dataRate; ++ u8 clk_div, value; ++ printk(KERN_INFO ++ "m88dc2800: M88DC2000AutoTSClock_C, symrate=%d qam=%d\n", ++ sym, qam); ++ switch (qam) { ++ case 16: ++ dataRate = 4; ++ break; ++ case 32: ++ dataRate = 5; ++ break; ++ case 128: ++ dataRate = 7; ++ break; ++ case 256: ++ dataRate = 8; ++ break; ++ case 64: ++ default: ++ dataRate = 6; ++ break; ++ } ++ dataRate *= sym * 105; ++ dataRate /= 800; ++ if (dataRate <= 4115) ++ clk_div = 0x3F; ++ else if (dataRate <= 4800) ++ clk_div = 0x36; ++ else if (dataRate <= 5760) ++ clk_div = 0x2D; ++ else if (dataRate <= 7200) ++ clk_div = 0x24; ++ else if (dataRate <= 9600) ++ clk_div = 0x1B; ++ else ++ clk_div = 0x12; ++ value = ReadReg(state, 0xC2); ++ value &= 0xc0; ++ value |= clk_div; ++ WriteReg(state, 0xC2, value); ++ return 0; ++} ++ ++static int M88DC2000SetTxMode(struct m88dc2800_state *state, u8 inverted, ++ u8 j83) ++{ ++ u8 value = 0; ++ if (inverted) ++ value |= 0x08; /* spectrum inverted */ ++ if (j83) ++ value |= 0x01; /* J83C */ ++ WriteReg(state, 0x83, value); ++ return 0; ++} ++ ++static int M88DC2000SoftReset(struct m88dc2800_state *state) ++{ ++ WriteReg(state, 0x80, 0x01); ++ WriteReg(state, 0x82, 0x00); ++ msleep(1); ++ WriteReg(state, 0x80, 0x00); ++ return 0; ++} ++ ++static int M88DC2000SetSym(struct m88dc2800_state *state, u32 sym, u32 xtal) ++{ ++ u8 value; ++ u8 reg6FH, reg12H; ++ u64 fValue; ++ u32 dwValue; ++ ++ printk(KERN_INFO "%s, sym=%d, xtal=%d\n", __func__, sym, xtal); ++ fValue = 4294967296 * (sym + 10); ++ do_div(fValue, xtal); ++ ++ /* fValue = 4294967296 * (sym + 10) / xtal; */ ++ dwValue = (u32) fValue; ++ printk(KERN_INFO "%s, fvalue1=%x\n", __func__, dwValue); ++ WriteReg(state, 0x58, (u8) ((dwValue >> 24) & 0xff)); ++ WriteReg(state, 0x57, (u8) ((dwValue >> 16) & 0xff)); ++ WriteReg(state, 0x56, (u8) ((dwValue >> 8) & 0xff)); ++ WriteReg(state, 0x55, (u8) ((dwValue >> 0) & 0xff)); ++ ++ /* fValue = 2048 * xtal / sym; */ ++ fValue = 2048 * xtal; ++ do_div(fValue, sym); ++ dwValue = (u32) fValue; ++ printk(KERN_INFO "%s, fvalue2=%x\n", __func__, dwValue); ++ WriteReg(state, 0x5D, (u8) ((dwValue >> 8) & 0xff)); ++ WriteReg(state, 0x5C, (u8) ((dwValue >> 0) & 0xff)); ++ value = ReadReg(state, 0x5A); ++ if (((dwValue >> 16) & 0x0001) == 0) ++ value &= 0x7F; ++ else ++ value |= 0x80; ++ WriteReg(state, 0x5A, value); ++ value = ReadReg(state, 0x89); ++ if (sym <= 1800) ++ value |= 0x01; ++ else ++ value &= 0xFE; ++ WriteReg(state, 0x89, value); ++ if (sym >= 6700) { ++ reg6FH = 0x0D; ++ reg12H = 0x30; ++ } else if (sym >= 4000) { ++ fValue = 22 * 4096 / sym; ++ reg6FH = (u8) fValue; ++ reg12H = 0x30; ++ } else if (sym >= 2000) { ++ fValue = 14 * 4096 / sym; ++ reg6FH = (u8) fValue; ++ reg12H = 0x20; ++ } else { ++ fValue = 7 * 4096 / sym; ++ reg6FH = (u8) fValue; ++ reg12H = 0x10; ++ } ++ WriteReg(state, 0x6F, reg6FH); ++ WriteReg(state, 0x12, reg12H); ++ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) ++ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { ++ if (sym < 3000) { ++ WriteReg(state, 0x6C, 0x16); ++ WriteReg(state, 0x6D, 0x10); ++ WriteReg(state, 0x6E, 0x18); ++ } else { ++ WriteReg(state, 0x6C, 0x14); ++ WriteReg(state, 0x6D, 0x0E); ++ WriteReg(state, 0x6E, 0x36); ++ } ++ } else { ++ WriteReg(state, 0x6C, 0x16); ++ WriteReg(state, 0x6D, 0x10); ++ WriteReg(state, 0x6E, 0x18); ++ } ++ return 0; ++} ++ ++static int M88DC2000SetQAM(struct m88dc2800_state *state, u16 qam) ++{ ++ u8 reg00H, reg4AH, regC2H, reg44H, reg4CH, reg4DH, reg74H, value; ++ u8 reg8BH, reg8EH; ++ printk(KERN_INFO "%s, qam=%d\n", __func__, qam); ++ regC2H = ReadReg(state, 0xC2); ++ regC2H &= 0xF8; ++ switch (qam) { ++ case 16: /* 16 QAM */ ++ reg00H = 0x08; ++ reg4AH = 0x0F; ++ regC2H |= 0x02; ++ reg44H = 0xAA; ++ reg4CH = 0x0C; ++ reg4DH = 0xF7; ++ reg74H = 0x0E; ++ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) ++ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { ++ reg8BH = 0x5A; ++ reg8EH = 0xBD; ++ } else { ++ reg8BH = 0x5B; ++ reg8EH = 0x9D; ++ } ++ WriteReg(state, 0x6E, 0x18); ++ break; ++ case 32: /* 32 QAM */ ++ reg00H = 0x18; ++ reg4AH = 0xFB; ++ regC2H |= 0x02; ++ reg44H = 0xAA; ++ reg4CH = 0x0C; ++ reg4DH = 0xF7; ++ reg74H = 0x0E; ++ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) ++ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { ++ reg8BH = 0x5A; ++ reg8EH = 0xBD; ++ } else { ++ reg8BH = 0x5B; ++ reg8EH = 0x9D; ++ } ++ WriteReg(state, 0x6E, 0x18); ++ break; ++ case 64: /* 64 QAM */ ++ reg00H = 0x48; ++ reg4AH = 0xCD; ++ regC2H |= 0x02; ++ reg44H = 0xAA; ++ reg4CH = 0x0C; ++ reg4DH = 0xF7; ++ reg74H = 0x0E; ++ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) ++ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { ++ reg8BH = 0x5A; ++ reg8EH = 0xBD; ++ } else { ++ reg8BH = 0x5B; ++ reg8EH = 0x9D; ++ } ++ break; ++ case 128: /* 128 QAM */ ++ reg00H = 0x28; ++ reg4AH = 0xFF; ++ regC2H |= 0x02; ++ reg44H = 0xA9; ++ reg4CH = 0x08; ++ reg4DH = 0xF5; ++ reg74H = 0x0E; ++ reg8BH = 0x5B; ++ reg8EH = 0x9D; ++ break; ++ case 256: /* 256 QAM */ ++ reg00H = 0x38; ++ reg4AH = 0xCD; ++ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) ++ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { ++ regC2H |= 0x02; ++ } else { ++ regC2H |= 0x01; ++ } ++ reg44H = 0xA9; ++ reg4CH = 0x08; ++ reg4DH = 0xF5; ++ reg74H = 0x0E; ++ reg8BH = 0x5B; ++ reg8EH = 0x9D; ++ break; ++ default: /* 64 QAM */ ++ reg00H = 0x48; ++ reg4AH = 0xCD; ++ regC2H |= 0x02; ++ reg44H = 0xAA; ++ reg4CH = 0x0C; ++ reg4DH = 0xF7; ++ reg74H = 0x0E; ++ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) ++ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) { ++ reg8BH = 0x5A; ++ reg8EH = 0xBD; ++ } else { ++ reg8BH = 0x5B; ++ reg8EH = 0x9D; ++ } ++ break; ++ } ++ WriteReg(state, 0x00, reg00H); ++ value = ReadReg(state, 0x88); ++ value |= 0x08; ++ WriteReg(state, 0x88, value); ++ WriteReg(state, 0x4B, 0xFF); ++ WriteReg(state, 0x4A, reg4AH); ++ value &= 0xF7; ++ WriteReg(state, 0x88, value); ++ WriteReg(state, 0xC2, regC2H); ++ WriteReg(state, 0x44, reg44H); ++ WriteReg(state, 0x4C, reg4CH); ++ WriteReg(state, 0x4D, reg4DH); ++ WriteReg(state, 0x74, reg74H); ++ WriteReg(state, 0x8B, reg8BH); ++ WriteReg(state, 0x8E, reg8EH); ++ return 0; ++} ++ ++static int M88DC2000WriteTuner_TC2800(struct m88dc2800_state *state, ++ u32 freq_KHz) ++{ ++ printk(KERN_INFO "%s, freq=%d KHz\n", __func__, freq_KHz); ++ return mt_fe_tn_set_freq_tc2800(state, freq_KHz); ++} ++ ++static int m88dc2800_init(struct dvb_frontend *fe) ++{ ++ dprintk("%s()\n", __func__); ++ return 0; ++} ++ ++static int m88dc2800_set_parameters(struct dvb_frontend *fe) ++{ ++ struct dtv_frontend_properties *c = &fe->dtv_property_cache; ++ u8 is_annex_c, is_update; ++ u16 temp_qam; ++ s32 waiting_time; ++ struct m88dc2800_state *state = fe->demodulator_priv; ++ ++ is_annex_c = c->delivery_system == SYS_DVBC_ANNEX_C ? 1 : 0; ++ ++ switch (c->modulation) { ++ case QAM_16: ++ temp_qam = 16; ++ break; ++ case QAM_32: ++ temp_qam = 32; ++ break; ++ case QAM_128: ++ temp_qam = 128; ++ break; ++ case QAM_256: ++ temp_qam = 256; ++ break; ++ default: /* QAM_64 */ ++ temp_qam = 64; ++ break; ++ } ++ ++ state->inverted = c->inversion == INVERSION_ON ? 1 : 0; ++ ++ printk(KERN_INFO ++ "m88dc2800: state, freq=%d qam=%d sym=%d inverted=%d xtal=%d\n", ++ state->freq, state->qam, state->sym, state->inverted, ++ state->xtal); ++ printk(KERN_INFO ++ "m88dc2800: set frequency to %d qam=%d symrate=%d annex-c=%d\n", ++ c->frequency, temp_qam, c->symbol_rate, is_annex_c); ++ ++ is_update = 0; ++ WriteReg(state, 0x80, 0x01); ++ if (c->frequency != state->freq) { ++ M88DC2000WriteTuner_TC2800(state, c->frequency / 1000); ++ state->freq = c->frequency; ++ } ++ if (c->symbol_rate != state->sym) { ++ M88DC2000SetSym(state, c->symbol_rate / 1000, state->xtal); ++ state->sym = c->symbol_rate; ++ is_update = 1; ++ } ++ if (temp_qam != state->qam) { ++ M88DC2000SetQAM(state, temp_qam); ++ state->qam = temp_qam; ++ is_update = 1; ++ } ++ ++ if (is_update != 0) { ++ if (state->config->ts_mode == 3) ++ M88DC2000AutoTSClock_C(state, state->sym / 1000, ++ temp_qam); ++ else ++ M88DC2000AutoTSClock_P(state, state->sym / 1000, ++ temp_qam); ++ } ++ ++ M88DC2000SetTxMode(state, state->inverted, is_annex_c); ++ M88DC2000SoftReset(state); ++ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) ++ && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) ++ waiting_time = 800; ++ else ++ waiting_time = 500; ++ while (waiting_time > 0) { ++ msleep(50); ++ waiting_time -= 50; ++ if (M88DC2000GetLock(state)) ++ return 0; ++ } ++ ++ state->inverted = (state->inverted != 0) ? 0 : 1; ++ M88DC2000SetTxMode(state, state->inverted, is_annex_c); ++ M88DC2000SoftReset(state); ++ if (((ReadReg(state, 0xE3) & 0x80) == 0x80) && ++ ((ReadReg(state, 0xE4) & 0x80) == 0x80)) ++ waiting_time = 800; ++ else ++ waiting_time = 500; ++ while (waiting_time > 0) { ++ msleep(50); ++ waiting_time -= 50; ++ if (M88DC2000GetLock(state)) ++ return 0; ++ } ++ return 0; ++} ++ ++static int m88dc2800_read_status(struct dvb_frontend *fe, ++ fe_status_t * status) ++{ ++ struct m88dc2800_state *state = fe->demodulator_priv; ++ *status = 0; ++ ++ if (M88DC2000GetLock(state)) { ++ *status = FE_HAS_SIGNAL | FE_HAS_CARRIER ++ |FE_HAS_SYNC | FE_HAS_VITERBI | FE_HAS_LOCK; ++ } ++ return 0; ++} ++ ++static int m88dc2800_read_ber(struct dvb_frontend *fe, u32 * ber) ++{ ++ struct m88dc2800_state *state = fe->demodulator_priv; ++ u16 tmp; ++ ++ if (M88DC2000GetLock(state) == 0) { ++ state->ber = 0; ++ } else if ((ReadReg(state, 0xA0) & 0x80) != 0x80) { ++ tmp = ReadReg(state, 0xA2) << 8; ++ tmp += ReadReg(state, 0xA1); ++ state->ber = tmp; ++ WriteReg(state, 0xA0, 0x05); ++ WriteReg(state, 0xA0, 0x85); ++ } ++ *ber = state->ber; ++ return 0; ++} ++ ++static int m88dc2800_read_signal_strength(struct dvb_frontend *fe, ++ u16 * strength) ++{ ++ struct m88dc2800_state *state = fe->demodulator_priv; ++ s16 tuner_strength; ++ ++ tuner_strength = mt_fe_tn_get_signal_strength_tc2800(state); ++ *strength = tuner_strength < -107 ? 0 : tuner_strength + 107; ++ ++ return 0; ++} ++ ++static int m88dc2800_read_snr(struct dvb_frontend *fe, u16 * snr) ++{ ++ static const u32 mes_log[] = { ++ 0, 3010, 4771, 6021, 6990, 7781, 8451, 9031, 9542, 10000, ++ 10414, 10792, 11139, 11461, 11761, 12041, 12304, 12553, 12788, ++ 13010, 13222, 13424, 13617, 13802, 13979, 14150, 14314, 14472, ++ 14624, 14771, 14914, 15052, 15185, 15315, 15441, 15563, 15682, ++ 15798, 15911, 16021, 16128, 16232, 16335, 16435, 16532, 16628, ++ 16721, 16812, 16902, 16990, 17076, 17160, 17243, 17324, 17404, ++ 17482, 17559, 17634, 17709, 17782, 17853, 17924, 17993, 18062, ++ 18129, 18195, 18261, 18325, 18388, 18451, 18513, 18573, 18633, ++ 18692, 18751, 18808, 18865, 18921, 18976, 19031 ++ }; ++ struct m88dc2800_state *state = fe->demodulator_priv; ++ u8 i; ++ u32 _snr, mse; ++ ++ if ((ReadReg(state, 0x91) & 0x23) != 0x03) { ++ *snr = 0; ++ return 0; ++ } ++ mse = 0; ++ for (i = 0; i < 30; i++) { ++ mse += (ReadReg(state, 0x08) << 8) + ReadReg(state, 0x07); ++ } ++ mse /= 30; ++ if (mse > 80) ++ mse = 80; ++ switch (state->qam) { ++ case 16: ++ _snr = 34080; ++ break; /* 16QAM */ ++ case 32: ++ _snr = 37600; ++ break; /* 32QAM */ ++ case 64: ++ _snr = 40310; ++ break; /* 64QAM */ ++ case 128: ++ _snr = 43720; ++ break; /* 128QAM */ ++ case 256: ++ _snr = 46390; ++ break; /* 256QAM */ ++ default: ++ _snr = 40310; ++ break; ++ } ++ _snr -= mes_log[mse - 1]; /* C - 10*log10(MSE) */ ++ _snr /= 1000; ++ if (_snr > 0xff) ++ _snr = 0xff; ++ *snr = _snr; ++ return 0; ++} ++ ++static int m88dc2800_read_ucblocks(struct dvb_frontend *fe, u32 * ucblocks) ++{ ++ struct m88dc2800_state *state = fe->demodulator_priv; ++ u8 u8Value; ++ ++ u8Value = ReadReg(state, 0xdf); ++ u8Value |= 0x02; /* Hold */ ++ WriteReg(state, 0xdf, u8Value); ++ ++ *ucblocks = ReadReg(state, 0xd5); ++ *ucblocks = (*ucblocks << 8) | ReadReg(state, 0xd4); ++ ++ u8Value &= 0xfe; /* Clear */ ++ WriteReg(state, 0xdf, u8Value); ++ u8Value &= 0xfc; /* Update */ ++ u8Value |= 0x01; ++ WriteReg(state, 0xdf, u8Value); ++ ++ return 0; ++} ++ ++static int m88dc2800_sleep(struct dvb_frontend *fe) ++{ ++ struct m88dc2800_state *state = fe->demodulator_priv; ++ ++ mt_fe_tn_sleep_tc2800(state); ++ state->freq = 0; ++ ++ return 0; ++} ++ ++static void m88dc2800_release(struct dvb_frontend *fe) ++{ ++ struct m88dc2800_state *state = fe->demodulator_priv; ++ kfree(state); ++} ++ ++static struct dvb_frontend_ops m88dc2800_ops; ++ ++struct dvb_frontend *m88dc2800_attach(const struct m88dc2800_config ++ *config, struct i2c_adapter *i2c) ++{ ++ struct m88dc2800_state *state = NULL; ++ ++ /* allocate memory for the internal state */ ++ state = kzalloc(sizeof(struct m88dc2800_state), GFP_KERNEL); ++ if (state == NULL) ++ goto error; ++ ++ /* setup the state */ ++ state->config = config; ++ state->i2c = i2c; ++ state->xtal = 28800; ++ ++ WriteReg(state, 0x80, 0x01); ++ M88DC2000RegInitial_TC2800(state); ++ M88DC2000SetTsType(state, state->config->ts_mode); ++ mt_fe_tn_init_tc2800(state); ++ ++ /* create dvb_frontend */ ++ memcpy(&state->frontend.ops, &m88dc2800_ops, ++ sizeof(struct dvb_frontend_ops)); ++ state->frontend.demodulator_priv = state; ++ return &state->frontend; ++ ++ error: ++ kfree(state); ++ return NULL; ++} ++ ++EXPORT_SYMBOL(m88dc2800_attach); ++ ++static struct dvb_frontend_ops m88dc2800_ops = { ++ .delsys = {SYS_DVBC_ANNEX_A, SYS_DVBC_ANNEX_C}, ++ .info = { ++ .name = "Montage M88DC2800 DVB-C", ++ .frequency_stepsize = 62500, ++ .frequency_min = 48000000, ++ .frequency_max = 870000000, ++ .symbol_rate_min = 870000, ++ .symbol_rate_max = 9000000, ++ .caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | ++ FE_CAN_QAM_128 | FE_CAN_QAM_256 | FE_CAN_FEC_AUTO ++ }, ++ .release = m88dc2800_release, ++ .init = m88dc2800_init, ++ .sleep = m88dc2800_sleep, ++ .set_frontend = m88dc2800_set_parameters, ++ .read_status = m88dc2800_read_status, ++ .read_ber = m88dc2800_read_ber, ++ .read_signal_strength = m88dc2800_read_signal_strength, ++ .read_snr = m88dc2800_read_snr, ++ .read_ucblocks = m88dc2800_read_ucblocks, ++}; ++ ++MODULE_DESCRIPTION("Montage DVB-C demodulator driver"); ++MODULE_AUTHOR("Max Nibble "); ++MODULE_LICENSE("GPL"); ++MODULE_VERSION("1.00"); +diff --git a/drivers/media/dvb-frontends/m88dc2800.h b/drivers/media/dvb-frontends/m88dc2800.h +new file mode 100644 +index 0000000..2184322 +--- /dev/null ++++ b/drivers/media/dvb-frontends/m88dc2800.h +@@ -0,0 +1,44 @@ ++/* ++ M88DC2800/M88TC2800 - DVB-C demodulator and tuner from Montage ++ ++ Copyright (C) 2012 Max Nibble ++ Copyright (C) 2011 Montage Technology - www.montage-tech.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. ++*/ ++ ++#ifndef M88DC2800_H ++#define M88DC2800_H ++ ++#include ++#include ++ ++struct m88dc2800_config { ++ u8 demod_address; ++ u8 ts_mode; ++}; ++ ++#if IS_ENABLED(CONFIG_DVB_M88DC2800) ++extern struct dvb_frontend* m88dc2800_attach(const struct m88dc2800_config* config, ++ struct i2c_adapter* i2c); ++#else ++static inline struct dvb_frontend* m88dc2800_attach(const struct m88dc2800_config* config, ++ struct i2c_adapter* i2c) ++{ ++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); ++ return NULL; ++} ++#endif /* CONFIG_DVB_M88DC2800 */ ++#endif /* M88DC2800_H */ +diff --git a/drivers/media/pci/cx23885/Kconfig b/drivers/media/pci/cx23885/Kconfig +index d1dcb1d..285c1ad 100644 +--- a/drivers/media/pci/cx23885/Kconfig ++++ b/drivers/media/pci/cx23885/Kconfig +@@ -23,6 +23,8 @@ config VIDEO_CX23885 + select DVB_STB6100 if MEDIA_SUBDRV_AUTOSELECT + select DVB_STV6110 if MEDIA_SUBDRV_AUTOSELECT + select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT ++ select DVB_DVBSKY_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT ++ select DVB_M88DC2800 if MEDIA_SUBDRV_AUTOSELECT + select DVB_CX24117 if MEDIA_SUBDRV_AUTOSELECT + select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT + select DVB_DS3000 if MEDIA_SUBDRV_AUTOSELECT +diff --git a/drivers/media/pci/cx23885/cimax2.c b/drivers/media/pci/cx23885/cimax2.c +index 16fa7ea..2b63f78 100644 +--- a/drivers/media/pci/cx23885/cimax2.c ++++ b/drivers/media/pci/cx23885/cimax2.c +@@ -426,7 +426,7 @@ int netup_poll_ci_slot_status(struct dvb_ca_en50221 *en50221, + return state->status; + } + +-int netup_ci_init(struct cx23885_tsport *port) ++int netup_ci_init(struct cx23885_tsport *port, bool isDVBSky) + { + struct netup_ci_state *state; + u8 cimax_init[34] = { +@@ -475,6 +475,11 @@ int netup_ci_init(struct cx23885_tsport *port) + goto err; + } + ++ if(isDVBSky) { ++ cimax_init[32] = 0x22; ++ cimax_init[33] = 0x00; ++ } ++ + port->port_priv = state; + + switch (port->nr) { +@@ -548,3 +553,19 @@ void netup_ci_exit(struct cx23885_tsport *port) + dvb_ca_en50221_release(&state->ca); + kfree(state); + } ++ ++/* CI irq handler for DVBSky board*/ ++int dvbsky_ci_slot_status(struct cx23885_dev *dev) ++{ ++ struct cx23885_tsport *port = NULL; ++ struct netup_ci_state *state = NULL; ++ ++ ci_dbg_print("%s:\n", __func__); ++ ++ port = &dev->ts1; ++ state = port->port_priv; ++ schedule_work(&state->work); ++ ci_dbg_print("%s: Wakeup CI0\n", __func__); ++ ++ return 1; ++} +diff --git a/drivers/media/pci/cx23885/cimax2.h b/drivers/media/pci/cx23885/cimax2.h +index 518744a..39f3db7 100644 +--- a/drivers/media/pci/cx23885/cimax2.h ++++ b/drivers/media/pci/cx23885/cimax2.h +@@ -41,7 +41,9 @@ extern int netup_ci_slot_ts_ctl(struct dvb_ca_en50221 *en50221, int slot); + extern int netup_ci_slot_status(struct cx23885_dev *dev, u32 pci_status); + extern int netup_poll_ci_slot_status(struct dvb_ca_en50221 *en50221, + int slot, int open); +-extern int netup_ci_init(struct cx23885_tsport *port); ++extern int netup_ci_init(struct cx23885_tsport *port, bool isDVBSky); + extern void netup_ci_exit(struct cx23885_tsport *port); + ++extern int dvbsky_ci_slot_status(struct cx23885_dev *dev); ++ + #endif +diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c +old mode 100644 +new mode 100755 +index 79f20c8..889bd4c +--- a/drivers/media/pci/cx23885/cx23885-cards.c ++++ b/drivers/media/pci/cx23885/cx23885-cards.c +@@ -613,6 +613,49 @@ struct cx23885_board cx23885_boards[] = { + .name = "TeVii S471", + .portb = CX23885_MPEG_DVB, + }, ++ [CX23885_BOARD_BST_PS8512] = { ++ .name = "Bestunar PS8512", ++ .portb = CX23885_MPEG_DVB, ++ }, ++ [CX23885_BOARD_DVBSKY_S950] = { ++ .name = "DVBSKY S950", ++ .portb = CX23885_MPEG_DVB, ++ }, ++ [CX23885_BOARD_DVBSKY_S952] = { ++ .name = "DVBSKY S952", ++ .portb = CX23885_MPEG_DVB, ++ .portc = CX23885_MPEG_DVB, ++ }, ++ [CX23885_BOARD_DVBSKY_S950_CI] = { ++ .ci_type = 3, ++ .name = "DVBSKY S950CI DVB-S2 CI", ++ .portb = CX23885_MPEG_DVB, ++ }, ++ [CX23885_BOARD_DVBSKY_C2800E_CI] = { ++ .ci_type = 3, ++ .name = "DVBSKY C2800E DVB-C CI", ++ .portb = CX23885_MPEG_DVB, ++ }, ++ [CX23885_BOARD_DVBSKY_T9580] = { ++ .name = "DVBSKY T9580", ++ .portb = CX23885_MPEG_DVB, ++ .portc = CX23885_MPEG_DVB, ++ }, ++ [CX23885_BOARD_DVBSKY_T980_CI] = { ++ .ci_type = 3, ++ .name = "DVBSKY T980CI DVB-T2/C CI", ++ .portb = CX23885_MPEG_DVB, ++ }, ++ [CX23885_BOARD_DVBSKY_T982] = { ++ .name = "DVBSKY T982", ++ .portb = CX23885_MPEG_DVB, ++ .portc = CX23885_MPEG_DVB, ++ }, ++ [CX23885_BOARD_TT_4500_CI] = { ++ .ci_type = 3, ++ .name = "TT-budget CT2-4500 CI", ++ .portb = CX23885_MPEG_DVB, ++ }, + [CX23885_BOARD_PROF_8000] = { + .name = "Prof Revolution DVB-S2 8000", + .portb = CX23885_MPEG_DVB, +@@ -874,6 +917,42 @@ struct cx23885_subid cx23885_subids[] = { + .subdevice = 0x9022, + .card = CX23885_BOARD_TEVII_S471, + }, { ++ .subvendor = 0x14f1, ++ .subdevice = 0x8512, ++ .card = CX23885_BOARD_BST_PS8512, ++ }, { ++ .subvendor = 0x4254, ++ .subdevice = 0x0950, ++ .card = CX23885_BOARD_DVBSKY_S950, ++ }, { ++ .subvendor = 0x4254, ++ .subdevice = 0x0952, ++ .card = CX23885_BOARD_DVBSKY_S952, ++ }, { ++ .subvendor = 0x4254, ++ .subdevice = 0x950C, ++ .card = CX23885_BOARD_DVBSKY_S950_CI, ++ }, { ++ .subvendor = 0x4254, ++ .subdevice = 0x2800, ++ .card = CX23885_BOARD_DVBSKY_C2800E_CI, ++ }, { ++ .subvendor = 0x4254, ++ .subdevice = 0x9580, ++ .card = CX23885_BOARD_DVBSKY_T9580, ++ }, { ++ .subvendor = 0x4254, ++ .subdevice = 0x980C, ++ .card = CX23885_BOARD_DVBSKY_T980_CI, ++ }, { ++ .subvendor = 0x4254, ++ .subdevice = 0x0982, ++ .card = CX23885_BOARD_DVBSKY_T982, ++ }, { ++ .subvendor = 0x13C2, ++ .subdevice = 0x3013, ++ .card = CX23885_BOARD_TT_4500_CI, ++ }, { + .subvendor = 0x8000, + .subdevice = 0x3034, + .card = CX23885_BOARD_PROF_8000, +@@ -1483,9 +1562,75 @@ void cx23885_gpio_setup(struct cx23885_dev *dev) + cx_set(GP0_IO, 0x00040004); + mdelay(60); + break; ++ case CX23885_BOARD_DVBSKY_S950: ++ case CX23885_BOARD_BST_PS8512: ++ cx23885_gpio_enable(dev, GPIO_2, 1); ++ cx23885_gpio_clear(dev, GPIO_2); ++ msleep(100); ++ cx23885_gpio_set(dev, GPIO_2); ++ break; ++ case CX23885_BOARD_DVBSKY_S952: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T982: ++ cx_write(MC417_CTL, 0x00000037);/* enable GPIO3-18 pins */ ++ ++ cx23885_gpio_enable(dev, GPIO_2, 1); ++ cx23885_gpio_enable(dev, GPIO_11, 1); ++ ++ cx23885_gpio_clear(dev, GPIO_2); ++ cx23885_gpio_clear(dev, GPIO_11); ++ msleep(100); ++ cx23885_gpio_set(dev, GPIO_2); ++ cx23885_gpio_set(dev, GPIO_11); ++ break; ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_TT_4500_CI: ++ cx_set(GP0_IO, 0x00060002); /* GPIO 1/2 as output */ ++ cx_clear(GP0_IO, 0x00010004); /*GPIO 0 as input*/ ++ mdelay(100);/* reset delay */ ++ cx_set(GP0_IO, 0x00060004); /* GPIO as out, reset high */ ++ cx_clear(GP0_IO, 0x00010002); ++ cx_write(MC417_CTL, 0x00000037);/* enable GPIO3-18 pins */ ++ /* GPIO-15 IN as ~ACK, rest as OUT */ ++ cx_write(MC417_OEN, 0x00001000); ++ /* ~RD, ~WR high; ADL0, ADL1 low; ~CS0, ~CS1 high */ ++ cx_write(MC417_RWD, 0x0000c300); ++ /* enable irq */ ++ cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/ ++ break; + } + } + ++static int cx23885_ir_patch(struct i2c_adapter *i2c, u8 reg, u8 mask) ++{ ++ struct i2c_msg msgs[2]; ++ u8 tx_buf[2], rx_buf[1]; ++ /* Write register address */ ++ tx_buf[0] = reg; ++ msgs[0].addr = 0x4c; ++ msgs[0].flags = 0; ++ msgs[0].len = 1; ++ msgs[0].buf = (char *) tx_buf; ++ /* Read data from register */ ++ msgs[1].addr = 0x4c; ++ msgs[1].flags = I2C_M_RD; ++ msgs[1].len = 1; ++ msgs[1].buf = (char *) rx_buf; ++ ++ i2c_transfer(i2c, msgs, 2); ++ ++ tx_buf[0] = reg; ++ tx_buf[1] = rx_buf[0] | mask; ++ msgs[0].addr = 0x4c; ++ msgs[0].flags = 0; ++ msgs[0].len = 2; ++ msgs[0].buf = (char *) tx_buf; ++ ++ return i2c_transfer(i2c, msgs, 1); ++} ++ + int cx23885_ir_init(struct cx23885_dev *dev) + { + static struct v4l2_subdev_io_pin_config ir_rxtx_pin_cfg[] = { +@@ -1573,6 +1718,26 @@ int cx23885_ir_init(struct cx23885_dev *dev) + v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config, + ir_rx_pin_cfg_count, ir_rx_pin_cfg); + break; ++ case CX23885_BOARD_BST_PS8512: ++ case CX23885_BOARD_DVBSKY_S950: ++ case CX23885_BOARD_DVBSKY_S952: ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_DVBSKY_T982: ++ case CX23885_BOARD_TT_4500_CI: ++ dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE); ++ if (dev->sd_ir == NULL) { ++ ret = -ENODEV; ++ break; ++ } ++ v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config, ++ ir_rx_pin_cfg_count, ir_rx_pin_cfg); ++ ++ cx23885_ir_patch(&(dev->i2c_bus[2].i2c_adap),0x1f,0x80); ++ cx23885_ir_patch(&(dev->i2c_bus[2].i2c_adap),0x23,0x80); ++ break; + case CX23885_BOARD_HAUPPAUGE_HVR1250: + if (!enable_885_ir) + break; +@@ -1608,13 +1773,22 @@ void cx23885_ir_fini(struct cx23885_dev *dev) + case CX23885_BOARD_MYGICA_X8507: + case CX23885_BOARD_TBS_6980: + case CX23885_BOARD_TBS_6981: ++ case CX23885_BOARD_BST_PS8512: ++ case CX23885_BOARD_DVBSKY_S950: ++ case CX23885_BOARD_DVBSKY_S952: ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_DVBSKY_T982: ++ case CX23885_BOARD_TT_4500_CI: + cx23885_irq_remove(dev, PCI_MSK_AV_CORE); + /* sd_ir is a duplicate pointer to the AV Core, just clear it */ + dev->sd_ir = NULL; + break; + } + } +- ++#if 0 + static int netup_jtag_io(void *device, int tms, int tdi, int read_tdo) + { + int data; +@@ -1639,7 +1813,7 @@ static int netup_jtag_io(void *device, int tms, int tdi, int read_tdo) + + return tdo; + } +- ++#endif + void cx23885_ir_pci_int_enable(struct cx23885_dev *dev) + { + switch (dev->board) { +@@ -1655,6 +1829,15 @@ void cx23885_ir_pci_int_enable(struct cx23885_dev *dev) + case CX23885_BOARD_MYGICA_X8507: + case CX23885_BOARD_TBS_6980: + case CX23885_BOARD_TBS_6981: ++ case CX23885_BOARD_BST_PS8512: ++ case CX23885_BOARD_DVBSKY_S950: ++ case CX23885_BOARD_DVBSKY_S952: ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_DVBSKY_T982: ++ case CX23885_BOARD_TT_4500_CI: + if (dev->sd_ir) + cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE); + break; +@@ -1752,6 +1935,12 @@ void cx23885_card_setup(struct cx23885_dev *dev) + ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ + ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; + break; ++ case CX23885_BOARD_BST_PS8512: ++ case CX23885_BOARD_DVBSKY_S950: ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_TT_4500_CI: + case CX23885_BOARD_TEVII_S470: + case CX23885_BOARD_TEVII_S471: + case CX23885_BOARD_DVBWORLD_2005: +@@ -1795,6 +1984,23 @@ void cx23885_card_setup(struct cx23885_dev *dev) + ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ + ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; + break; ++ case CX23885_BOARD_DVBSKY_S952: ++ ts1->gen_ctrl_val = 0x5; /* Parallel */ ++ ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ ++ ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; ++ ts2->gen_ctrl_val = 0xe; /* Serial bus + punctured clock */ ++ ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ ++ ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; ++ break; ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T982: ++ ts1->gen_ctrl_val = 0x5; /* Parallel */ ++ ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ ++ ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; ++ ts2->gen_ctrl_val = 0x8; /* Serial bus */ ++ ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ ++ ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; ++ break; + case CX23885_BOARD_HAUPPAUGE_HVR4400: + ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ + ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ +@@ -1860,6 +2066,15 @@ void cx23885_card_setup(struct cx23885_dev *dev) + case CX23885_BOARD_AVERMEDIA_HC81R: + case CX23885_BOARD_TBS_6980: + case CX23885_BOARD_TBS_6981: ++ case CX23885_BOARD_BST_PS8512: ++ case CX23885_BOARD_DVBSKY_S950: ++ case CX23885_BOARD_DVBSKY_S952: ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_DVBSKY_T982: ++ case CX23885_BOARD_TT_4500_CI: + dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, + &dev->i2c_bus[2].i2c_adap, + "cx25840", 0x88 >> 1, NULL); +@@ -1879,13 +2094,13 @@ void cx23885_card_setup(struct cx23885_dev *dev) + int ret; + const struct firmware *fw; + const char *filename = "dvb-netup-altera-01.fw"; +- char *action = "configure"; ++// char *action = "configure"; + static struct netup_card_info cinfo; +- struct altera_config netup_config = { +- .dev = dev, +- .action = action, +- .jtag_io = netup_jtag_io, +- }; ++// struct altera_config netup_config = { ++// .dev = dev, ++// .action = action, ++// .jtag_io = netup_jtag_io, ++// }; + + netup_initialize(dev); + +@@ -1909,8 +2124,8 @@ void cx23885_card_setup(struct cx23885_dev *dev) + printk(KERN_ERR "did not find the firmware file. (%s) " + "Please see linux/Documentation/dvb/ for more details " + "on firmware-problems.", filename); +- else +- altera_init(&netup_config, fw); ++ //else ++ // altera_init(&netup_config, fw); + + release_firmware(fw); + break; +diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c +index edcd79d..c9afeab 100644 +--- a/drivers/media/pci/cx23885/cx23885-core.c ++++ b/drivers/media/pci/cx23885/cx23885-core.c +@@ -450,9 +450,9 @@ void cx23885_wakeup(struct cx23885_tsport *port, + del_timer(&q->timeout); + else + mod_timer(&q->timeout, jiffies + BUFFER_TIMEOUT); +- if (bc != 1) ++/* if (bc != 1) + printk(KERN_WARNING "%s: %d buffers handled (should be 1)\n", +- __func__, bc); ++ __func__, bc);*/ + } + + int cx23885_sram_channel_setup(struct cx23885_dev *dev, +@@ -1909,6 +1909,10 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id) + (pci_status & PCI_MSK_GPIO0)) + handled += altera_ci_irq(dev); + ++ if (cx23885_boards[dev->board].ci_type == 3 && ++ (pci_status & PCI_MSK_GPIO0)) ++ handled += dvbsky_ci_slot_status(dev); ++ + if (ts1_status) { + if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB) + handled += cx23885_irq_ts(ts1, ts1_status); +@@ -2141,6 +2145,10 @@ static int cx23885_initdev(struct pci_dev *pci_dev, + cx23885_irq_add_enable(dev, PCI_MSK_GPIO1 | PCI_MSK_GPIO0); + break; + case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_TT_4500_CI: + cx23885_irq_add_enable(dev, PCI_MSK_GPIO0); + break; + } +diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c +index 0549205..7816112 100644 +--- a/drivers/media/pci/cx23885/cx23885-dvb.c ++++ b/drivers/media/pci/cx23885/cx23885-dvb.c +@@ -51,6 +51,8 @@ + #include "stv6110.h" + #include "lnbh24.h" + #include "cx24116.h" ++#include "dvbsky_m88ds3103.h" ++#include "m88dc2800.h" + #include "cx24117.h" + #include "cimax2.h" + #include "lgs8gxx.h" +@@ -473,6 +475,7 @@ static struct ds3000_config tevii_ds3000_config = { + static struct ts2020_config tevii_ts2020_config = { + .tuner_address = 0x60, + .clk_out_div = 1, ++ .frequency_div = 1146000, + }; + + static struct cx24116_config dvbworld_cx24116_config = { +@@ -507,6 +510,93 @@ static struct xc5000_config mygica_x8507_xc5000_config = { + .if_khz = 4000, + }; + ++/* bst control */ ++int bst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) ++{ ++ struct cx23885_tsport *port = fe->dvb->priv; ++ struct cx23885_dev *dev = port->dev; ++ ++ cx23885_gpio_enable(dev, GPIO_1, 1); ++ cx23885_gpio_enable(dev, GPIO_0, 1); ++ ++ switch (voltage) { ++ case SEC_VOLTAGE_13: ++ cx23885_gpio_set(dev, GPIO_1); ++ cx23885_gpio_clear(dev, GPIO_0); ++ break; ++ case SEC_VOLTAGE_18: ++ cx23885_gpio_set(dev, GPIO_1); ++ cx23885_gpio_set(dev, GPIO_0); ++ break; ++ case SEC_VOLTAGE_OFF: ++ cx23885_gpio_clear(dev, GPIO_1); ++ cx23885_gpio_clear(dev, GPIO_0); ++ break; ++ } ++ return 0; ++} ++ ++int dvbsky_set_voltage_sec(struct dvb_frontend *fe, fe_sec_voltage_t voltage) ++{ ++ struct cx23885_tsport *port = fe->dvb->priv; ++ struct cx23885_dev *dev = port->dev; ++ ++ cx23885_gpio_enable(dev, GPIO_12, 1); ++ cx23885_gpio_enable(dev, GPIO_13, 1); ++ ++ switch (voltage) { ++ case SEC_VOLTAGE_13: ++ cx23885_gpio_set(dev, GPIO_13); ++ cx23885_gpio_clear(dev, GPIO_12); ++ break; ++ case SEC_VOLTAGE_18: ++ cx23885_gpio_set(dev, GPIO_13); ++ cx23885_gpio_set(dev, GPIO_12); ++ break; ++ case SEC_VOLTAGE_OFF: ++ cx23885_gpio_clear(dev, GPIO_13); ++ cx23885_gpio_clear(dev, GPIO_12); ++ break; ++ } ++ return 0; ++} ++ ++/* bestunar single dvb-s2 */ ++static struct dvbsky_m88ds3103_config bst_ds3103_config = { ++ .demod_address = 0x68, ++ .ci_mode = 0, ++ .pin_ctrl = 0x82, ++ .ts_mode = 0, ++ .set_voltage = bst_set_voltage, ++}; ++/* DVBSKY dual dvb-s2 */ ++static struct dvbsky_m88ds3103_config dvbsky_ds3103_config_pri = { ++ .demod_address = 0x68, ++ .ci_mode = 0, ++ .pin_ctrl = 0x82, ++ .ts_mode = 0, ++ .set_voltage = bst_set_voltage, ++}; ++static struct dvbsky_m88ds3103_config dvbsky_ds3103_config_sec = { ++ .demod_address = 0x68, ++ .ci_mode = 0, ++ .pin_ctrl = 0x82, ++ .ts_mode = 1, ++ .set_voltage = dvbsky_set_voltage_sec, ++}; ++ ++static struct dvbsky_m88ds3103_config dvbsky_ds3103_ci_config = { ++ .demod_address = 0x68, ++ .ci_mode = 2, ++ .pin_ctrl = 0x82, ++ .ts_mode = 0, ++}; ++ ++static struct m88dc2800_config dvbsky_dc2800_config = { ++ .demod_address = 0x1c, ++ .ts_mode = 3, ++}; ++ + static struct stv090x_config prof_8000_stv090x_config = { + .device = STV0903, + .demod_mode = STV090x_SINGLE, +@@ -1311,6 +1401,92 @@ static int dvb_register(struct cx23885_tsport *port) + &tevii_ts2020_config, &i2c_bus->i2c_adap); + } + break; ++ case CX23885_BOARD_BST_PS8512: ++ case CX23885_BOARD_DVBSKY_S950: ++ i2c_bus = &dev->i2c_bus[1]; ++ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, ++ &bst_ds3103_config, ++ &i2c_bus->i2c_adap); ++ break; ++ ++ case CX23885_BOARD_DVBSKY_S952: ++ switch (port->nr) { ++ /* port B */ ++ case 1: ++ i2c_bus = &dev->i2c_bus[1]; ++ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, ++ &dvbsky_ds3103_config_pri, ++ &i2c_bus->i2c_adap); ++ break; ++ /* port C */ ++ case 2: ++ i2c_bus = &dev->i2c_bus[0]; ++ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, ++ &dvbsky_ds3103_config_sec, ++ &i2c_bus->i2c_adap); ++ break; ++ } ++ break; ++ ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ i2c_bus = &dev->i2c_bus[1]; ++ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, ++ &dvbsky_ds3103_ci_config, ++ &i2c_bus->i2c_adap); ++ break; ++ ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ i2c_bus = &dev->i2c_bus[1]; ++ fe0->dvb.frontend = dvb_attach(m88dc2800_attach, ++ &dvbsky_dc2800_config, ++ &i2c_bus->i2c_adap); ++ break; ++ ++ case CX23885_BOARD_DVBSKY_T9580: ++ switch (port->nr) { ++ /* port B */ ++ case 1: ++ i2c_bus = &dev->i2c_bus[1]; ++ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, ++ &dvbsky_ds3103_config_pri, ++ &i2c_bus->i2c_adap); ++ break; ++ /* port C */ ++// case 2: ++// i2c_bus = &dev->i2c_bus[0]; ++// fe0->dvb.frontend = dvb_attach(sit2_attach, ++// &dvbsky_sit2_config_pci_s, ++// &i2c_bus->i2c_adap); ++ break; ++ } ++ break; ++ ++// case CX23885_BOARD_DVBSKY_T980_CI: ++// case CX23885_BOARD_TT_4500_CI: ++// i2c_bus = &dev->i2c_bus[1]; ++// fe0->dvb.frontend = dvb_attach(sit2_attach, ++// &dvbsky_sit2_config_pci_p, ++// &i2c_bus->i2c_adap); ++// break; ++ ++// case CX23885_BOARD_DVBSKY_T982: ++// switch (port->nr) { ++// /* port B */ ++// case 1: ++// i2c_bus = &dev->i2c_bus[1]; ++// fe0->dvb.frontend = dvb_attach(sit2_attach, ++// &dvbsky_sit2_config_pci_p, ++// &i2c_bus->i2c_adap); ++// break; ++// /* port C */ ++// case 2: ++// i2c_bus = &dev->i2c_bus[0]; ++// fe0->dvb.frontend = dvb_attach(sit2_attach, ++// &dvbsky_sit2_config_pci_s, ++// &i2c_bus->i2c_adap); ++// break; ++// } ++// break; + case CX23885_BOARD_PROF_8000: + i2c_bus = &dev->i2c_bus[0]; + +@@ -1386,7 +1562,7 @@ static int dvb_register(struct cx23885_tsport *port) + printk(KERN_INFO "NetUP Dual DVB-S2 CI card port%d MAC=%pM\n", + port->nr, port->frontends.adapter.proposed_mac); + +- netup_ci_init(port); ++ netup_ci_init(port, false); + break; + } + case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: { +@@ -1413,6 +1589,44 @@ static int dvb_register(struct cx23885_tsport *port) + memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xa0, 6); + break; + } ++ case CX23885_BOARD_BST_PS8512: ++ case CX23885_BOARD_DVBSKY_S950: ++ case CX23885_BOARD_DVBSKY_S952: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T982:{ ++ u8 eeprom[256]; /* 24C02 i2c eeprom */ ++ ++ if(port->nr > 2) ++ break; ++ ++ dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1; ++ tveeprom_read(&dev->i2c_bus[0].i2c_client, eeprom, sizeof(eeprom)); ++ printk(KERN_INFO "DVBSKY PCIe MAC= %pM\n", eeprom + 0xc0+(port->nr-1)*8); ++ memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xc0 + ++ (port->nr-1)*8, 6); ++ break; ++ } ++ case CX23885_BOARD_DVBSKY_S950_CI: { ++ u8 eeprom[256]; /* 24C02 i2c eeprom */ ++ ++ if(port->nr > 2) ++ break; ++ ++ dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1; ++ tveeprom_read(&dev->i2c_bus[0].i2c_client, eeprom, sizeof(eeprom)); ++ printk(KERN_INFO "DVBSKY PCIe MAC= %pM\n", eeprom + 0xc0+(port->nr-1)*8); ++ memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xc0 + ++ (port->nr-1)*8, 6); ++ ++ netup_ci_init(port, true); ++ break; ++ } ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_TT_4500_CI: { ++ netup_ci_init(port, true); ++ break; ++ } + } + + return ret; +@@ -1495,6 +1709,10 @@ int cx23885_dvb_unregister(struct cx23885_tsport *port) + + switch (port->dev->board) { + case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_TT_4500_CI: + netup_ci_exit(port); + break; + case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: +diff --git a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx23885/cx23885-input.c +index 8a49e7c..1642ae8 100644 +--- a/drivers/media/pci/cx23885/cx23885-input.c ++++ b/drivers/media/pci/cx23885/cx23885-input.c +@@ -92,6 +92,15 @@ void cx23885_input_rx_work_handler(struct cx23885_dev *dev, u32 events) + case CX23885_BOARD_MYGICA_X8507: + case CX23885_BOARD_TBS_6980: + case CX23885_BOARD_TBS_6981: ++ case CX23885_BOARD_BST_PS8512: ++ case CX23885_BOARD_DVBSKY_S950: ++ case CX23885_BOARD_DVBSKY_S952: ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_DVBSKY_T982: ++ case CX23885_BOARD_TT_4500_CI: + /* + * The only boards we handle right now. However other boards + * using the CX2388x integrated IR controller should be similar +@@ -144,6 +153,15 @@ static int cx23885_input_ir_start(struct cx23885_dev *dev) + case CX23885_BOARD_HAUPPAUGE_HVR1290: + case CX23885_BOARD_HAUPPAUGE_HVR1250: + case CX23885_BOARD_MYGICA_X8507: ++ case CX23885_BOARD_BST_PS8512: ++ case CX23885_BOARD_DVBSKY_S950: ++ case CX23885_BOARD_DVBSKY_S952: ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_DVBSKY_T982: ++ case CX23885_BOARD_TT_4500_CI: + /* + * The IR controller on this board only returns pulse widths. + * Any other mode setting will fail to set up the device. +@@ -302,6 +320,26 @@ int cx23885_input_init(struct cx23885_dev *dev) + /* A guess at the remote */ + rc_map = RC_MAP_TOTAL_MEDIA_IN_HAND_02; + break; ++ case CX23885_BOARD_BST_PS8512: ++ case CX23885_BOARD_DVBSKY_S950: ++ case CX23885_BOARD_DVBSKY_S952: ++ case CX23885_BOARD_DVBSKY_S950_CI: ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ case CX23885_BOARD_DVBSKY_T982: ++ /* Integrated CX2388[58] IR controller */ ++ driver_type = RC_DRIVER_IR_RAW; ++ allowed_protos = RC_BIT_ALL; ++ /* A guess at the remote */ ++ rc_map = RC_MAP_DVBSKY; ++ break; ++ case CX23885_BOARD_TT_4500_CI: ++ /* Integrated CX2388[58] IR controller */ ++ driver_type = RC_DRIVER_IR_RAW; ++ allowed_protos = RC_BIT_ALL; ++ rc_map = RC_MAP_TT_1500; ++ break; + case CX23885_BOARD_TBS_6980: + case CX23885_BOARD_TBS_6981: + /* Integrated CX23885 IR controller */ +diff --git a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h +index 0fa4048..7a39d82 100644 +--- a/drivers/media/pci/cx23885/cx23885.h ++++ b/drivers/media/pci/cx23885/cx23885.h +@@ -97,6 +97,17 @@ + #define CX23885_BOARD_TBS_6980 41 + #define CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200 42 + ++#define CX23885_BOARD_DVBSKY_PCIE 43 ++#define CX23885_BOARD_BST_PS8512 (CX23885_BOARD_DVBSKY_PCIE+0) ++#define CX23885_BOARD_DVBSKY_S952 (CX23885_BOARD_DVBSKY_PCIE+1) ++#define CX23885_BOARD_DVBSKY_S950 (CX23885_BOARD_DVBSKY_PCIE+2) ++#define CX23885_BOARD_DVBSKY_S950_CI (CX23885_BOARD_DVBSKY_PCIE+3) ++#define CX23885_BOARD_DVBSKY_C2800E_CI (CX23885_BOARD_DVBSKY_PCIE+4) ++#define CX23885_BOARD_DVBSKY_T9580 (CX23885_BOARD_DVBSKY_PCIE+5) ++#define CX23885_BOARD_DVBSKY_T980_CI (CX23885_BOARD_DVBSKY_PCIE+6) ++#define CX23885_BOARD_DVBSKY_T982 (CX23885_BOARD_DVBSKY_PCIE+7) ++#define CX23885_BOARD_TT_4500_CI (CX23885_BOARD_DVBSKY_PCIE+8) ++ + #define GPIO_0 0x00000001 + #define GPIO_1 0x00000002 + #define GPIO_2 0x00000004 +@@ -234,7 +245,7 @@ struct cx23885_board { + */ + u32 clk_freq; + struct cx23885_input input[MAX_CX23885_INPUT]; +- int ci_type; /* for NetUP */ ++ int ci_type; /* 1 and 2 for NetUP, 3 for DVBSky. */ + /* Force bottom field first during DMA (888 workaround) */ + u32 force_bff; + }; +diff --git a/drivers/media/pci/cx88/Kconfig b/drivers/media/pci/cx88/Kconfig +index a63a9ad..7deb300 100644 +--- a/drivers/media/pci/cx88/Kconfig ++++ b/drivers/media/pci/cx88/Kconfig +@@ -57,6 +57,7 @@ config VIDEO_CX88_DVB + select DVB_ISL6421 if MEDIA_SUBDRV_AUTOSELECT + select DVB_S5H1411 if MEDIA_SUBDRV_AUTOSELECT + select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT ++ select DVB_DVBSKY_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT + select DVB_STV0299 if MEDIA_SUBDRV_AUTOSELECT + select DVB_STV0288 if MEDIA_SUBDRV_AUTOSELECT + select DVB_STB6000 if MEDIA_SUBDRV_AUTOSELECT +diff --git a/drivers/media/pci/cx88/cx88-cards.c b/drivers/media/pci/cx88/cx88-cards.c +index e18a7ac..317511d 100644 +--- a/drivers/media/pci/cx88/cx88-cards.c ++++ b/drivers/media/pci/cx88/cx88-cards.c +@@ -2314,6 +2314,18 @@ static const struct cx88_board cx88_boards[] = { + } }, + .mpeg = CX88_MPEG_DVB, + }, ++ [CX88_BOARD_BST_PS8312] = { ++ .name = "Bestunar PS8312 DVB-S/S2", ++ .tuner_type = UNSET, ++ .radio_type = UNSET, ++ .tuner_addr = ADDR_UNSET, ++ .radio_addr = ADDR_UNSET, ++ .input = { { ++ .type = CX88_VMUX_DVB, ++ .vmux = 0, ++ } }, ++ .mpeg = CX88_MPEG_DVB, ++ }, + }; + + /* ------------------------------------------------------------------ */ +@@ -2818,6 +2830,10 @@ static const struct cx88_subid cx88_subids[] = { + .subvendor = 0x1822, + .subdevice = 0x0023, + .card = CX88_BOARD_TWINHAN_VP1027_DVBS, ++ }, { ++ .subvendor = 0x14f1, ++ .subdevice = 0x8312, ++ .card = CX88_BOARD_BST_PS8312, + }, + }; + +@@ -3551,6 +3567,12 @@ static void cx88_card_setup(struct cx88_core *core) + cx_write(MO_SRST_IO, 1); + msleep(100); + break; ++ case CX88_BOARD_BST_PS8312: ++ cx_write(MO_GP1_IO, 0x808000); ++ msleep(100); ++ cx_write(MO_GP1_IO, 0x808080); ++ msleep(100); ++ break; + } /*end switch() */ + + +diff --git a/drivers/media/pci/cx88/cx88-dvb.c b/drivers/media/pci/cx88/cx88-dvb.c +index 053ed1b..955b916 100644 +--- a/drivers/media/pci/cx88/cx88-dvb.c ++++ b/drivers/media/pci/cx88/cx88-dvb.c +@@ -54,6 +54,7 @@ + #include "stv0288.h" + #include "stb6000.h" + #include "cx24116.h" ++#include "dvbsky_m88ds3103.h" + #include "stv0900.h" + #include "stb6100.h" + #include "stb6100_proc.h" +@@ -459,6 +460,56 @@ static int tevii_dvbs_set_voltage(struct dvb_frontend *fe, + return core->prev_set_voltage(fe, voltage); + return 0; + } ++/*CX88_BOARD_BST_PS8312*/ ++static int bst_dvbs_set_voltage(struct dvb_frontend *fe, ++ fe_sec_voltage_t voltage) ++{ ++ struct cx8802_dev *dev= fe->dvb->priv; ++ struct cx88_core *core = dev->core; ++ ++ cx_write(MO_GP1_IO, 0x111111); ++ switch (voltage) { ++ case SEC_VOLTAGE_13: ++ cx_write(MO_GP1_IO, 0x020200); ++ break; ++ case SEC_VOLTAGE_18: ++ cx_write(MO_GP1_IO, 0x020202); ++ break; ++ case SEC_VOLTAGE_OFF: ++ cx_write(MO_GP1_IO, 0x111100); ++ break; ++ } ++ ++ if (core->prev_set_voltage) ++ return core->prev_set_voltage(fe, voltage); ++ return 0; ++} ++ ++static int bst_dvbs_set_voltage_v2(struct dvb_frontend *fe, ++ fe_sec_voltage_t voltage) ++{ ++ struct cx8802_dev *dev= fe->dvb->priv; ++ struct cx88_core *core = dev->core; ++ ++ cx_write(MO_GP1_IO, 0x111101); ++ switch (voltage) { ++ case SEC_VOLTAGE_13: ++ cx_write(MO_GP1_IO, 0x020200); ++ break; ++ case SEC_VOLTAGE_18: ++ ++ cx_write(MO_GP1_IO, 0x020202); ++ break; ++ case SEC_VOLTAGE_OFF: ++ ++ cx_write(MO_GP1_IO, 0x111110); ++ break; ++ } ++ ++ if (core->prev_set_voltage) ++ return core->prev_set_voltage(fe, voltage); ++ return 0; ++} + + static int vp1027_set_voltage(struct dvb_frontend *fe, + fe_sec_voltage_t voltage) +@@ -706,6 +757,11 @@ static struct ts2020_config tevii_ts2020_config = { + .clk_out_div = 1, + }; + ++static struct dvbsky_m88ds3103_config dvbsky_ds3103_config = { ++ .demod_address = 0x68, ++ .set_ts_params = ds3000_set_ts_param, ++}; ++ + static const struct stv0900_config prof_7301_stv0900_config = { + .demod_address = 0x6a, + /* demod_mode = 0,*/ +@@ -1487,6 +1543,35 @@ static int dvb_register(struct cx8802_dev *dev) + tevii_dvbs_set_voltage; + } + break; ++ case CX88_BOARD_BST_PS8312: ++ fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach, ++ &dvbsky_ds3103_config, ++ &core->i2c_adap); ++ if (fe0->dvb.frontend != NULL){ ++ int ret; ++ u8 b0[] = { 0x60 }; ++ u8 b1[2] = { 0 }; ++ struct i2c_msg msg[] = { ++ { ++ .addr = 0x50, ++ .flags = 0, ++ .buf = b0, ++ .len = 1 ++ }, { ++ .addr = 0x50, ++ .flags = I2C_M_RD, ++ .buf = b1, ++ .len = 2 ++ } ++ }; ++ ret = i2c_transfer(&core->i2c_adap, msg, 2); ++ printk("PS8312: config = %02x, %02x", b1[0],b1[1]); ++ if(b1[0] == 0xaa) ++ fe0->dvb.frontend->ops.set_voltage = bst_dvbs_set_voltage_v2; ++ else ++ fe0->dvb.frontend->ops.set_voltage = bst_dvbs_set_voltage; ++ } ++ break; + case CX88_BOARD_OMICOM_SS4_PCI: + case CX88_BOARD_TBS_8920: + case CX88_BOARD_PROF_7300: +diff --git a/drivers/media/pci/cx88/cx88-input.c b/drivers/media/pci/cx88/cx88-input.c +index f29e18c..9581f4e 100644 +--- a/drivers/media/pci/cx88/cx88-input.c ++++ b/drivers/media/pci/cx88/cx88-input.c +@@ -129,7 +129,7 @@ static void cx88_ir_handle_key(struct cx88_IR *ir) + u32 gpio_key = cx_read(MO_GP0_IO); + + data = (data << 4) | ((gpio_key & 0xf0) >> 4); +- ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0) + rc_keydown(ir->dev, data, 0); + + } else if (ir->mask_keydown) { +@@ -151,6 +151,45 @@ static void cx88_ir_handle_key(struct cx88_IR *ir) + rc_keydown_notimeout(ir->dev, data, 0); + rc_keyup(ir->dev); + } ++#else ++ rc_keydown(ir->dev, RC_TYPE_UNKNOWN, data, 0); ++ ++ } else if (ir->core->boardnr == CX88_BOARD_PROLINK_PLAYTVPVR || ++ ir->core->boardnr == CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO) { ++ /* bit cleared on keydown, NEC scancode, 0xAAAACC, A = 0x866b */ ++ u16 addr; ++ u8 cmd; ++ u32 scancode; ++ ++ addr = (data >> 8) & 0xffff; ++ cmd = (data >> 0) & 0x00ff; ++ scancode = RC_SCANCODE_NECX(addr, cmd); ++ ++ if (0 == (gpio & ir->mask_keyup)) ++ rc_keydown_notimeout(ir->dev, RC_TYPE_NEC, scancode, 0); ++ else ++ rc_keyup(ir->dev); ++ ++ } else if (ir->mask_keydown) { ++ /* bit set on keydown */ ++ if (gpio & ir->mask_keydown) ++ rc_keydown_notimeout(ir->dev, RC_TYPE_UNKNOWN, data, 0); ++ else ++ rc_keyup(ir->dev); ++ ++ } else if (ir->mask_keyup) { ++ /* bit cleared on keydown */ ++ if (0 == (gpio & ir->mask_keyup)) ++ rc_keydown_notimeout(ir->dev, RC_TYPE_UNKNOWN, data, 0); ++ else ++ rc_keyup(ir->dev); ++ ++ } else { ++ /* can't distinguish keydown/up :-/ */ ++ rc_keydown_notimeout(ir->dev, RC_TYPE_UNKNOWN, data, 0); ++ rc_keyup(ir->dev); ++ } ++#endif + } + + static enum hrtimer_restart cx88_ir_work(struct hrtimer *timer) +@@ -419,6 +458,10 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) + rc_type = RC_BIT_NEC; + ir->sampling = 0xff00; /* address */ + break; ++ case CX88_BOARD_BST_PS8312: ++ ir_codes = RC_MAP_DVBSKY; ++ ir->sampling = 0xff00; /* address */ ++ break; + } + + if (!ir_codes) { +@@ -471,7 +514,6 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) + dev->driver_type = RC_DRIVER_SCANCODE; + dev->allowed_protos = rc_type; + } +- + ir->core = core; + core->ir = ir; + +@@ -538,8 +580,12 @@ void cx88_ir_irq(struct cx88_core *core) + } + ir_raw_event_handle(ir->dev); + } +- ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0) + static int get_key_pvr2000(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) ++#else ++static int get_key_pvr2000(struct IR_i2c *ir, enum rc_type *protocol, ++ u32 *scancode, u8 *toggle) ++#endif + { + int flags, code; + +@@ -562,9 +608,14 @@ static int get_key_pvr2000(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw) + + dprintk("IR Key/Flags: (0x%02x/0x%02x)\n", + code & 0xff, flags & 0xff); +- ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0) + *ir_key = code & 0xff; + *ir_raw = code; ++#else ++ *protocol = RC_TYPE_UNKNOWN; ++ *scancode = code & 0xff; ++ *toggle = 0; ++#endif + return 1; + } + +diff --git a/drivers/media/pci/cx88/cx88.h b/drivers/media/pci/cx88/cx88.h +index 28893a6..5fa5f48 100644 +--- a/drivers/media/pci/cx88/cx88.h ++++ b/drivers/media/pci/cx88/cx88.h +@@ -237,6 +237,7 @@ extern const struct sram_channel cx88_sram_channels[]; + #define CX88_BOARD_WINFAST_DTV1800H_XC4000 88 + #define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36 89 + #define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43 90 ++#define CX88_BOARD_BST_PS8312 91 + + enum cx88_itype { + CX88_VMUX_COMPOSITE1 = 1, +diff --git a/drivers/media/rc/keymaps/Makefile b/drivers/media/rc/keymaps/Makefile +index 0b8c549..abf6079 100644 +--- a/drivers/media/rc/keymaps/Makefile ++++ b/drivers/media/rc/keymaps/Makefile +@@ -28,6 +28,7 @@ obj-$(CONFIG_RC_MAP) += rc-adstech-dvb-t-pci.o \ + rc-dm1105-nec.o \ + rc-dntv-live-dvb-t.o \ + rc-dntv-live-dvbt-pro.o \ ++ rc-dvbsky.o \ + rc-em-terratec.o \ + rc-encore-enltv2.o \ + rc-encore-enltv.o \ +diff --git a/drivers/media/rc/keymaps/rc-dvbsky.c b/drivers/media/rc/keymaps/rc-dvbsky.c +new file mode 100644 +index 0000000..bfc41fb +--- /dev/null ++++ b/drivers/media/rc/keymaps/rc-dvbsky.c +@@ -0,0 +1,78 @@ ++/* rc-dvbsky.c - Keytable for Dvbsky Remote Controllers ++ * ++ * keymap imported from ir-keymaps.c ++ * ++ * ++ * Copyright (c) 2010-2012 by Nibble Max ++ * ++ * 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. ++ */ ++ ++#include ++#include ++/* ++ * This table contains the complete RC5 code, instead of just the data part ++ */ ++ ++static struct rc_map_table rc5_dvbsky[] = { ++ { 0x0000, KEY_0 }, ++ { 0x0001, KEY_1 }, ++ { 0x0002, KEY_2 }, ++ { 0x0003, KEY_3 }, ++ { 0x0004, KEY_4 }, ++ { 0x0005, KEY_5 }, ++ { 0x0006, KEY_6 }, ++ { 0x0007, KEY_7 }, ++ { 0x0008, KEY_8 }, ++ { 0x0009, KEY_9 }, ++ { 0x000a, KEY_MUTE }, ++ { 0x000d, KEY_OK }, ++ { 0x000b, KEY_STOP }, ++ { 0x000c, KEY_EXIT }, ++ { 0x000e, KEY_CAMERA }, /*Snap shot*/ ++ { 0x000f, KEY_SUBTITLE }, /*PIP*/ ++ { 0x0010, KEY_VOLUMEUP }, ++ { 0x0011, KEY_VOLUMEDOWN }, ++ { 0x0012, KEY_FAVORITES }, ++ { 0x0013, KEY_LIST }, /*Info*/ ++ { 0x0016, KEY_PAUSE }, ++ { 0x0017, KEY_PLAY }, ++ { 0x001f, KEY_RECORD }, ++ { 0x0020, KEY_CHANNELDOWN }, ++ { 0x0021, KEY_CHANNELUP }, ++ { 0x0025, KEY_POWER2 }, ++ { 0x0026, KEY_REWIND }, ++ { 0x0027, KEY_FASTFORWARD }, ++ { 0x0029, KEY_LAST }, ++ { 0x002b, KEY_MENU }, ++ { 0x002c, KEY_EPG }, ++ { 0x002d, KEY_ZOOM }, ++}; ++ ++static struct rc_map_list rc5_dvbsky_map = { ++ .map = { ++ .scan = rc5_dvbsky, ++ .size = ARRAY_SIZE(rc5_dvbsky), ++ .rc_type = RC_TYPE_RC5, ++ .name = RC_MAP_DVBSKY, ++ } ++}; ++ ++static int __init init_rc_map_rc5_dvbsky(void) ++{ ++ return rc_map_register(&rc5_dvbsky_map); ++} ++ ++static void __exit exit_rc_map_rc5_dvbsky(void) ++{ ++ rc_map_unregister(&rc5_dvbsky_map); ++} ++ ++module_init(init_rc_map_rc5_dvbsky) ++module_exit(exit_rc_map_rc5_dvbsky) ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Nibble Max "); +diff --git a/drivers/media/usb/dvb-usb-v2/Kconfig b/drivers/media/usb/dvb-usb-v2/Kconfig +index 2059d0c..5ff51aa 100644 +--- a/drivers/media/usb/dvb-usb-v2/Kconfig ++++ b/drivers/media/usb/dvb-usb-v2/Kconfig +@@ -147,3 +147,11 @@ config DVB_USB_RTL28XXU + help + Say Y here to support the Realtek RTL28xxU DVB USB receiver. + ++config DVB_USB_DVBSKY ++ tristate "DVBSky USB2.0 support" ++ depends on DVB_USB_V2 ++ select DVB_SIT2 if MEDIA_SUBDRV_AUTOSELECT ++ select DVB_DVBSKY_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT ++ help ++ Say Y here to support the USB receivers from DVBSky. ++ +diff --git a/drivers/media/usb/dvb-usb-v2/Makefile b/drivers/media/usb/dvb-usb-v2/Makefile +index 2c06714..926f12d 100644 +--- a/drivers/media/usb/dvb-usb-v2/Makefile ++++ b/drivers/media/usb/dvb-usb-v2/Makefile +@@ -40,6 +40,9 @@ obj-$(CONFIG_DVB_USB_MXL111SF) += mxl111sf-tuner.o + dvb-usb-rtl28xxu-objs := rtl28xxu.o + obj-$(CONFIG_DVB_USB_RTL28XXU) += dvb-usb-rtl28xxu.o + ++dvb-usb-dvbsky-objs := dvbsky.o ++obj-$(CONFIG_DVB_USB_DVBSKY) += dvb-usb-dvbsky.o ++ + ccflags-y += -I$(srctree)/drivers/media/dvb-core + ccflags-y += -I$(srctree)/drivers/media/dvb-frontends + ccflags-y += -I$(srctree)/drivers/media/tuners +diff --git a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2/dvbsky.c +new file mode 100644 +index 0000000..cd9c039 +--- /dev/null ++++ b/drivers/media/usb/dvb-usb-v2/dvbsky.c +@@ -0,0 +1,892 @@ ++/* ++ * Driver for DVBSky receiver ++ * ++ * Copyright (C) 2013 Max nibble ++ * ++ * CIMax code is copied and modified from: ++ * CIMax2(R) SP2 driver in conjunction with NetUp Dual DVB-S2 CI card ++ * Copyright (C) 2009 NetUP Inc. ++ * Copyright (C) 2009 Igor M. Liplianin ++ * Copyright (C) 2009 Abylay Ospan ++ * ++ * 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 "dvb_ca_en50221.h" ++#include "dvb_usb.h" ++#include "dvbsky_m88ds3103.h" ++ ++static int dvbsky_debug; ++module_param(dvbsky_debug, int, 0644); ++MODULE_PARM_DESC(dvbsky_debug, "Activates dvbsky usb debugging (default:0)"); ++ ++#define DVBSKY_MSG_DELAY 0/*2000*/ ++#define DVBSKY_CI_CTL 0x04 ++#define DVBSKY_CI_RD 1 ++#define DVBSKY_BUF_LEN 64 ++ ++#define dprintk(args...) \ ++ do { \ ++ if (dvbsky_debug) \ ++ printk(KERN_INFO "dvbsky_usb: " args); \ ++ } while (0) ++ ++DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); ++ ++struct dvbsky_state { ++ struct mutex stream_mutex; ++ u8 ibuf[DVBSKY_BUF_LEN]; ++ u8 obuf[DVBSKY_BUF_LEN]; ++ u8 has_ci; ++ u8 ci_attached; ++ struct dvb_ca_en50221 ci; ++ unsigned long next_status_checked_time; ++ u8 ci_i2c_addr; ++ u8 current_ci_flag; ++ int ci_status; ++}; ++ ++static int dvbsky_usb_generic_rw(struct dvb_usb_device *d, ++ u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) ++{ ++ int ret; ++ struct dvbsky_state *state = d_to_priv(d); ++ ++ mutex_lock(&d->usb_mutex); ++ if (wlen != 0) ++ memcpy(state->obuf, wbuf, wlen); ++ ++ ret = dvb_usbv2_generic_rw_locked(d, state->obuf, wlen, ++ state->ibuf, rlen); ++ ++ if (!ret && (rlen != 0)) ++ memcpy(rbuf, state->ibuf, rlen); ++ ++ mutex_unlock(&d->usb_mutex); ++ return ret; ++} ++ ++static int dvbsky_stream_ctrl(struct dvb_usb_device *d, u8 onoff) ++{ ++ struct dvbsky_state *state = d_to_priv(d); ++ int ret; ++ u8 obuf_pre[3] = { 0x37, 0, 0 }; ++ u8 obuf_post[3] = { 0x36, 3, 0 }; ++ dprintk("%s() -off \n", __func__); ++ mutex_lock(&state->stream_mutex); ++ ret = dvbsky_usb_generic_rw(d, obuf_pre, 3, NULL, 0); ++ if (!ret && onoff) { ++ msleep(20); ++ ret = dvbsky_usb_generic_rw(d, obuf_post, 3, NULL, 0); ++ dprintk("%s() -on \n", __func__); ++ } ++ mutex_unlock(&state->stream_mutex); ++ return ret; ++} ++ ++/* CI opertaions */ ++static int dvbsky_ci_read_i2c(struct i2c_adapter *i2c_adap, u8 addr, u8 reg, ++ u8 *buf, int len) ++{ ++ int ret; ++ struct i2c_msg msg[] = { ++ { ++ .addr = addr, ++ .flags = 0, ++ .buf = ®, ++ .len = 1 ++ }, { ++ .addr = addr, ++ .flags = I2C_M_RD, ++ .buf = buf, ++ .len = len ++ } ++ }; ++ ++ ret = i2c_transfer(i2c_adap, msg, 2); ++ ++ if (ret != 2) { ++ dprintk("%s: error, Reg = 0x%02x, Status = %d\n", __func__, reg, ret); ++ return -1; ++ } ++ return 0; ++} ++ ++static int dvbsky_ci_write_i2c(struct i2c_adapter *i2c_adap, u8 addr, u8 reg, ++ u8 *buf, int len) ++{ ++ int ret; ++ u8 buffer[64]; ++ ++ struct i2c_msg msg = { ++ .addr = addr, ++ .flags = 0, ++ .buf = &buffer[0], ++ .len = len + 1 ++ }; ++ ++ if(len + 1 > sizeof(buffer)) { ++ dprintk("%s: len overflow.\n", __func__); ++ return -1; ++ } ++ ++ buffer[0] = reg; ++ memcpy(&buffer[1], buf, len); ++ ++ ret = i2c_transfer(i2c_adap, &msg, 1); ++ ++ if (ret != 1) { ++ dprintk("%s: error, Reg=[0x%02x], Status=%d\n", __func__, reg, ret); ++ return -1; ++ } ++ return 0; ++} ++ ++static int dvbsky_ci_op_cam(struct dvb_ca_en50221 *ci, int slot, ++ u8 flag, u8 read, int addr, u8 data) ++{ ++ struct dvb_usb_device *d = ci->data; ++ struct dvbsky_state *state = d_to_priv(d); ++ u8 store; ++ int ret; ++ u8 command[4], respond[2], command_size, respond_size; ++ ++ /*dprintk("%s()\n", __func__);*/ ++ if (0 != slot) ++ return -EINVAL; ++ ++ if (state->current_ci_flag != flag) { ++ ret = dvbsky_ci_read_i2c(&d->i2c_adap, state->ci_i2c_addr, ++ 0, &store, 1); ++ if (ret != 0) ++ return ret; ++ ++ store &= ~0x0c; ++ store |= flag; ++ ++ ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, ++ 0, &store, 1); ++ if (ret != 0) ++ return ret; ++ } ++ state->current_ci_flag = flag; ++ ++ command[1] = (u8)((addr >> 8) & 0xff); /*high part of address*/ ++ command[2] = (u8)(addr & 0xff); /*low part of address*/ ++ if (read) { ++ command[0] = 0x71; ++ command_size = 3; ++ respond_size = 2; ++ } else { ++ command[0] = 0x70; ++ command[3] = data; ++ command_size = 4; ++ respond_size = 1; ++ } ++ ret = dvbsky_usb_generic_rw(d, command, command_size, respond, respond_size); ++ if(ret) ++ dev_err(&d->udev->dev, "%s: %s() " \ ++ "failed=%d\n", KBUILD_MODNAME, __func__, ret); ++ ++ return (read) ? respond[1] : 0; ++} ++ ++static int dvbsky_ci_read_attribute_mem(struct dvb_ca_en50221 *ci, ++ int slot, int addr) ++{ ++ return dvbsky_ci_op_cam(ci, slot, 0, DVBSKY_CI_RD, addr, 0); ++} ++ ++static int dvbsky_ci_write_attribute_mem(struct dvb_ca_en50221 *ci, ++ int slot, int addr, u8 data) ++{ ++ return dvbsky_ci_op_cam(ci, slot, 0, 0, addr, data); ++} ++ ++static int dvbsky_ci_read_cam_ctl(struct dvb_ca_en50221 *ci, int slot, u8 addr) ++{ ++ return dvbsky_ci_op_cam(ci, slot, DVBSKY_CI_CTL, DVBSKY_CI_RD, addr, 0); ++} ++ ++static int dvbsky_ci_write_cam_ctl(struct dvb_ca_en50221 *ci, int slot, ++ u8 addr, u8 data) ++{ ++ return dvbsky_ci_op_cam(ci, slot, DVBSKY_CI_CTL, 0, addr, data); ++} ++ ++static int dvbsky_ci_slot_reset(struct dvb_ca_en50221 *ci, int slot) ++{ ++ struct dvb_usb_device *d = ci->data; ++ struct dvbsky_state *state = d_to_priv(d); ++ u8 buf = 0x80; ++ int ret; ++ dprintk("%s() slot=%d\n", __func__, slot); ++ ++ if (0 != slot) ++ return -EINVAL; ++ ++ udelay(500); ++ ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, ++ 0, &buf, 1); ++ ++ if (ret != 0) ++ return ret; ++ ++ udelay(500); ++ ++ buf = 0x00; ++ ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, ++ 0, &buf, 1); ++ msleep(1000); ++ dprintk("%s() slot=%d complete\n", __func__, slot); ++ return 0; ++ ++} ++ ++static int dvbsky_ci_slot_shutdown(struct dvb_ca_en50221 *ci, int slot) ++{ ++ /* not implemented */ ++ dprintk("%s()\n", __func__); ++ return 0; ++} ++ ++static int dvbsky_ci_slot_ts_enable(struct dvb_ca_en50221 *ci, int slot) ++{ ++ struct dvb_usb_device *d = ci->data; ++ struct dvbsky_state *state = d_to_priv(d); ++ u8 buf; ++ int ret; ++ ++ dprintk("%s()\n", __func__); ++ if (0 != slot) ++ return -EINVAL; ++ ++ dvbsky_ci_read_i2c(&d->i2c_adap, state->ci_i2c_addr, ++ 0, &buf, 1); ++ buf |= 0x60; ++ ++ ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, ++ 0, &buf, 1); ++ return ret; ++} ++ ++static int dvbsky_ci_poll_slot_status(struct dvb_ca_en50221 *ci, int slot, ++ int open) ++{ ++ struct dvb_usb_device *d = ci->data; ++ struct dvbsky_state *state = d_to_priv(d); ++ int ret = 0; ++ u8 buf = 0; ++ /*dprintk("%s()\n", __func__);*/ ++ ++ /* CAM module INSERT/REMOVE processing. slow operation because of i2c ++ * transfers */ ++ if (time_after(jiffies, state->next_status_checked_time)) { ++ ret = dvbsky_ci_read_i2c(&d->i2c_adap, state->ci_i2c_addr, ++ 0, &buf, 1); ++ ++ /*dprintk("%s() status=%x\n", __func__, buf);*/ ++ ++ state->next_status_checked_time = jiffies ++ + msecs_to_jiffies(1000); ++ ++ if (ret != 0) ++ return 0; ++ ++ if (buf & 1) { ++ state->ci_status = DVB_CA_EN50221_POLL_CAM_PRESENT | ++ DVB_CA_EN50221_POLL_CAM_READY; ++ } ++ else ++ state->ci_status = 0; ++ } ++ /*dprintk("%s() ret=%x\n", __func__, state->ci_status);*/ ++ return state->ci_status; ++} ++ ++static int dvbsky_ci_init(struct dvb_usb_device *d) ++{ ++ struct dvbsky_state *state = d_to_priv(d); ++ int ret; ++ u8 cimax_init[34] = { ++ 0x00, /* module A control*/ ++ 0x00, /* auto select mask high A */ ++ 0x00, /* auto select mask low A */ ++ 0x00, /* auto select pattern high A */ ++ 0x00, /* auto select pattern low A */ ++ 0x44, /* memory access time A */ ++ 0x00, /* invert input A */ ++ 0x00, /* RFU */ ++ 0x00, /* RFU */ ++ 0x00, /* module B control*/ ++ 0x00, /* auto select mask high B */ ++ 0x00, /* auto select mask low B */ ++ 0x00, /* auto select pattern high B */ ++ 0x00, /* auto select pattern low B */ ++ 0x44, /* memory access time B */ ++ 0x00, /* invert input B */ ++ 0x00, /* RFU */ ++ 0x00, /* RFU */ ++ 0x00, /* auto select mask high Ext */ ++ 0x00, /* auto select mask low Ext */ ++ 0x00, /* auto select pattern high Ext */ ++ 0x00, /* auto select pattern low Ext */ ++ 0x00, /* RFU */ ++ 0x02, /* destination - module A */ ++ 0x01, /* power on (use it like store place) */ ++ 0x00, /* RFU */ ++ 0x00, /* int status read only */ ++ 0x00, /* Max: Disable the interrupt in USB solution.*/ ++ 0x05, /* EXTINT=active-high, INT=push-pull */ ++ 0x00, /* USCG1 */ ++ 0x04, /* ack active low */ ++ 0x00, /* LOCK = 0 */ ++ 0x22, /* serial mode, rising in, rising out, MSB first*/ ++ 0x00 /* synchronization */ ++ }; ++ dprintk("%s()\n", __func__); ++ state->current_ci_flag = 0xff; ++ state->ci_status = 0; ++ state->next_status_checked_time = jiffies + msecs_to_jiffies(1000); ++ state->ci_i2c_addr = 0x40; ++ ++ state->ci.owner = THIS_MODULE; ++ state->ci.read_attribute_mem = dvbsky_ci_read_attribute_mem; ++ state->ci.write_attribute_mem = dvbsky_ci_write_attribute_mem; ++ state->ci.read_cam_control = dvbsky_ci_read_cam_ctl; ++ state->ci.write_cam_control = dvbsky_ci_write_cam_ctl; ++ state->ci.slot_reset = dvbsky_ci_slot_reset; ++ state->ci.slot_shutdown = dvbsky_ci_slot_shutdown; ++ state->ci.slot_ts_enable = dvbsky_ci_slot_ts_enable; ++ state->ci.poll_slot_status = dvbsky_ci_poll_slot_status; ++ state->ci.data = d; ++ ++ ret = dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, ++ 0, &cimax_init[0], 34); ++ /* lock registers */ ++ ret |= dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, ++ 0x1f, &cimax_init[0x18], 1); ++ /* power on slots */ ++ ret |= dvbsky_ci_write_i2c(&d->i2c_adap, state->ci_i2c_addr, ++ 0x18, &cimax_init[0x18], 1); ++ if (0 != ret) ++ return ret; ++ ++ ret = dvb_ca_en50221_init(&d->adapter[0].dvb_adap, &state->ci, 0, 1); ++ if (ret) ++ return ret; ++ state->ci_attached = 1; ++ dprintk("%s() complete.\n", __func__); ++ return 0; ++} ++ ++static void dvbsky_ci_release(struct dvb_usb_device *d) ++{ ++ struct dvbsky_state *state = d_to_priv(d); ++ ++ /* detach CI */ ++ if (state->ci_attached) ++ dvb_ca_en50221_release(&state->ci); ++ ++ return; ++} ++ ++static int dvbsky_streaming_ctrl(struct dvb_frontend *fe, int onoff) ++{ ++ struct dvb_usb_device *d = fe_to_d(fe); ++ /*dprintk("%s() %d\n", __func__, onoff);*/ ++ return dvbsky_stream_ctrl(d, (onoff == 0) ? 0 : 1); ++} ++ ++/* GPIO */ ++static int dvbsky_gpio_ctrl(struct dvb_usb_device *d, u8 gport, u8 value) ++{ ++ int ret; ++ u8 obuf[64], ibuf[64]; ++ obuf[0] = 0x0e; ++ obuf[1] = gport; ++ obuf[2] = value; ++ ret = dvbsky_usb_generic_rw(d, obuf, 3, ibuf, 1); ++ if(ret) ++ dev_err(&d->udev->dev, "%s: %s() " \ ++ "failed=%d\n", KBUILD_MODNAME, __func__, ret); ++ return ret; ++} ++ ++/* I2C */ ++static int dvbsky_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], ++ int num) ++{ ++ struct dvb_usb_device *d = i2c_get_adapdata(adap); ++ int ret = 0; ++ u8 ibuf[64], obuf[64]; ++ ++ if (mutex_lock_interruptible(&d->i2c_mutex) < 0) ++ return -EAGAIN; ++ ++ if (num > 2) { ++ printk(KERN_ERR "dvbsky_usb: too many i2c messages[%d] than 2.", num); ++ ret = -EOPNOTSUPP; ++ goto i2c_error; ++ } ++ ++ if(num == 1) { ++ if (msg[0].len > 60) { ++ printk(KERN_ERR "dvbsky_usb: too many i2c bytes[%d] than 60.", msg[0].len); ++ ret = -EOPNOTSUPP; ++ goto i2c_error; ++ } ++ if (msg[0].flags & I2C_M_RD) { ++ /* single read */ ++ obuf[0] = 0x09; ++ obuf[1] = 0; ++ obuf[2] = msg[0].len; ++ obuf[3] = msg[0].addr; ++ ret = dvbsky_usb_generic_rw(d, obuf, 4, ibuf, msg[0].len + 1); ++ if(ret) ++ dev_err(&d->udev->dev, "%s: %s() " \ ++ "failed=%d\n", KBUILD_MODNAME, __func__, ret); ++ /*dprintk("%s(): read status = %d\n", __func__, ibuf[0]);*/ ++ if (!ret) ++ memcpy(msg[0].buf, &ibuf[1], msg[0].len); ++ } else { ++ /* write */ ++ obuf[0] = 0x08; ++ obuf[1] = msg[0].addr; ++ obuf[2] = msg[0].len; ++ memcpy(&obuf[3], msg[0].buf, msg[0].len); ++ ret = dvbsky_usb_generic_rw(d, obuf, msg[0].len + 3, ibuf, 1); ++ if(ret) ++ dev_err(&d->udev->dev, "%s: %s() " \ ++ "failed=%d\n", KBUILD_MODNAME, __func__, ret); ++ /*dprintk("%s(): write status = %d\n", __func__, ibuf[0]);*/ ++ } ++ } else { ++ if ((msg[0].len > 60) || (msg[1].len > 60)) { ++ printk(KERN_ERR "dvbsky_usb: too many i2c bytes[w-%d][r-%d] than 60.", msg[0].len, msg[1].len); ++ ret = -EOPNOTSUPP; ++ goto i2c_error; ++ } ++ /* write then read */ ++ obuf[0] = 0x09; ++ obuf[1] = msg[0].len; ++ obuf[2] = msg[1].len; ++ obuf[3] = msg[0].addr; ++ memcpy(&obuf[4], msg[0].buf, msg[0].len); ++ ret = dvbsky_usb_generic_rw(d, obuf, msg[0].len + 4, ibuf, msg[1].len + 1); ++ if(ret) ++ dev_err(&d->udev->dev, "%s: %s() " \ ++ "failed=%d\n", KBUILD_MODNAME, __func__, ret); ++ /*dprintk("%s(): write then read status = %d\n", __func__, ibuf[0]);*/ ++ if (!ret) ++ memcpy(msg[1].buf, &ibuf[1], msg[1].len); ++ } ++i2c_error: ++ mutex_unlock(&d->i2c_mutex); ++ return (ret) ? ret : num; ++} ++ ++static u32 dvbsky_i2c_func(struct i2c_adapter *adapter) ++{ ++ return I2C_FUNC_I2C; ++} ++ ++static struct i2c_algorithm dvbsky_i2c_algo = { ++ .master_xfer = dvbsky_i2c_xfer, ++ .functionality = dvbsky_i2c_func, ++}; ++ ++#if IS_ENABLED(CONFIG_RC_CORE) ++static int dvbsky_rc_query(struct dvb_usb_device *d) ++{ ++ ++ u32 code = 0xffff, scancode; ++ u8 rc5_command, rc5_system; ++ u8 obuf[2], ibuf[2], toggle; ++ int ret; ++ obuf[0] = 0x10; ++ ret = dvbsky_usb_generic_rw(d, obuf, 1, ibuf, 2); ++ if(ret) ++ dev_err(&d->udev->dev, "%s: %s() " \ ++ "failed=%d\n", KBUILD_MODNAME, __func__, ret); ++ if(ret == 0) ++ code = (ibuf[0] << 8) | ibuf[1]; ++ ++ if (code != 0xffff) { ++ dprintk("rc code: %x \n", code); ++ rc5_command = code & 0x3F; ++ rc5_system = (code & 0x7C0) >> 6; ++ toggle = (code & 0x800) ? 1 : 0; ++ scancode = rc5_system << 8 | rc5_command; ++ rc_keydown(d->rc_dev, scancode, toggle); ++ } ++ return 0; ++} ++ ++static int dvbsky_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc) ++{ ++ rc->allowed_protos = RC_BIT_RC5; ++ rc->query = dvbsky_rc_query; ++ rc->interval = 300; ++ return 0; ++} ++#else ++ #define dvbsky_get_rc_config NULL ++#endif ++ ++static int dvbsky_sync_ctrl(struct dvb_frontend *fe) ++{ ++ struct dvb_usb_device *d = fe_to_d(fe); ++ return dvbsky_stream_ctrl(d, 1); ++} ++ ++static int dvbsky_usb_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) ++{ ++ struct dvb_usb_device *d = fe_to_d(fe); ++ u8 value; ++ ++ if (voltage == SEC_VOLTAGE_OFF) ++ value = 0; ++ else ++ value = 1; ++ return dvbsky_gpio_ctrl(d, 0x80, value); ++} ++ ++static int dvbsky_usb_ci_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) ++{ ++ struct dvb_usb_device *d = fe_to_d(fe); ++ u8 value; ++ ++ if (voltage == SEC_VOLTAGE_OFF) ++ value = 0; ++ else ++ value = 1; ++ return dvbsky_gpio_ctrl(d, 0x00, value); ++} ++ ++static int dvbsky_t680c_attach(struct dvb_usb_adapter *adap) ++{ ++ struct dvbsky_state *state = adap_to_priv(adap); ++ struct dvb_usb_device *d = adap_to_d(adap); ++ int ret = 0; ++ ++ /*dprintk("%s, build on %s %s()\n", __func__, __DATE__,__TIME__);*/ ++ ++// adap->fe[0] = dvb_attach(sit2_attach, ++// &dvbsky_usb_sit2_config, ++// &d->i2c_adap); ++ if (!adap->fe[0]) { ++ printk(KERN_ERR "dvbsky_t680c_attach fail."); ++ ret = -ENODEV; ++ } ++ ++ state->has_ci = 1; ++ ++ return ret; ++} ++ ++static int dvbsky_t330_attach(struct dvb_usb_adapter *adap) ++{ ++ struct dvbsky_state *state = adap_to_priv(adap); ++ struct dvb_usb_device *d = adap_to_d(adap); ++ int ret = 0; ++ ++ /*dprintk("%s, build on %s %s()\n", __func__, __DATE__,__TIME__);*/ ++ ++// adap->fe[0] = dvb_attach(sit2_attach, ++// &dvbsky_t330_sit2_config, ++// &d->i2c_adap); ++ if (!adap->fe[0]) { ++ printk(KERN_ERR "dvbsky_t330_attach fail."); ++ ret = -ENODEV; ++ } ++ ++ state->has_ci = 0; ++ ++ return ret; ++} ++ ++static int dvbsky_read_mac_addr(struct dvb_usb_adapter *adap, u8 mac[6]) ++{ ++ struct dvb_usb_device *d = adap_to_d(adap); ++ u8 obuf[] = { 0x1e, 0x00 }; ++ u8 ibuf[6] = { 0 }; ++ struct i2c_msg msg[] = { ++ { ++ .addr = 0x51, ++ .flags = 0, ++ .buf = obuf, ++ .len = 2, ++ }, { ++ .addr = 0x51, ++ .flags = I2C_M_RD, ++ .buf = ibuf, ++ .len = 6, ++ ++ } ++ }; ++ ++ if (i2c_transfer(&d->i2c_adap, msg, 2) == 2) ++ memcpy(mac, ibuf, 6); ++ ++ printk(KERN_INFO "dvbsky_usb MAC address=%pM\n", mac); ++ ++ return 0; ++} ++ ++static struct dvbsky_m88ds3103_config dvbsky_usb_ds3103_config = { ++ .demod_address = 0x68, ++ .ci_mode = 1, ++ .pin_ctrl = 0x83, ++ .ts_mode = 0, ++ .start_ctrl = dvbsky_sync_ctrl, ++ .set_voltage = dvbsky_usb_set_voltage, ++}; ++ ++static int dvbsky_s960_attach(struct dvb_usb_adapter *adap) ++{ ++ struct dvbsky_state *state = adap_to_priv(adap); ++ struct dvb_usb_device *d = adap_to_d(adap); ++ int ret = 0; ++ ++ dprintk("%s()\n", __func__); ++ ++ adap->fe[0] = dvb_attach(dvbsky_m88ds3103_attach, ++ &dvbsky_usb_ds3103_config, ++ &d->i2c_adap); ++ if (!adap->fe[0]) { ++ printk(KERN_ERR "dvbsky_s960_attach fail."); ++ ret = -ENODEV; ++ } ++ ++ state->has_ci = 0; ++ ++ return ret; ++} ++ ++static struct dvbsky_m88ds3103_config dvbsky_usb_ds3103_ci_config = { ++ .demod_address = 0x68, ++ .ci_mode = 2, ++ .pin_ctrl = 0x82, ++ .ts_mode = 0, ++ .start_ctrl = dvbsky_sync_ctrl, ++ .set_voltage = dvbsky_usb_ci_set_voltage, ++}; ++static int dvbsky_s960c_attach(struct dvb_usb_adapter *adap) ++{ ++ struct dvbsky_state *state = adap_to_priv(adap); ++ struct dvb_usb_device *d = adap_to_d(adap); ++ int ret = 0; ++ ++ /*dprintk("%s, build on %s %s()\n", __func__, __DATE__,__TIME__);*/ ++ ++ adap->fe[0] = dvb_attach(dvbsky_m88ds3103_attach, ++ &dvbsky_usb_ds3103_ci_config, ++ &d->i2c_adap); ++ if (!adap->fe[0]) { ++ printk(KERN_ERR "dvbsky_s960c_attach fail."); ++ ret = -ENODEV; ++ } ++ ++ state->has_ci = 1; ++ ++ return ret; ++} ++ ++static int dvbsky_identify_state(struct dvb_usb_device *d, const char **name) ++{ ++ /* ++ printk(KERN_INFO "%s, build on %s %s(),delay=%d\n", ++ __func__, __DATE__,__TIME__,d->props->generic_bulk_ctrl_delay); ++ */ ++ dvbsky_gpio_ctrl(d, 0x04, 1); ++ msleep(20); ++ dvbsky_gpio_ctrl(d, 0x83, 0); ++ dvbsky_gpio_ctrl(d, 0xc0, 1); ++ msleep(100); ++ dvbsky_gpio_ctrl(d, 0x83, 1); ++ dvbsky_gpio_ctrl(d, 0xc0, 0); ++ msleep(50); ++ ++ return WARM; ++} ++ ++static int dvbsky_init(struct dvb_usb_device *d) ++{ ++ struct dvbsky_state *state = d_to_priv(d); ++ int ret; ++ ++ /* use default interface */ ++ /* ++ ret = usb_set_interface(d->udev, 0, 0); ++ if (ret) ++ return ret; ++ */ ++ mutex_init(&state->stream_mutex); ++ ++ /* attach CI */ ++ if (state->has_ci) { ++ state->ci_attached = 0; ++ ret = dvbsky_ci_init(d); ++ if (ret) ++ return ret; ++ } ++ return 0; ++} ++ ++static void dvbsky_exit(struct dvb_usb_device *d) ++{ ++ return dvbsky_ci_release(d); ++} ++ ++/* DVB USB Driver stuff */ ++static struct dvb_usb_device_properties dvbsky_t330_props = { ++ .driver_name = KBUILD_MODNAME, ++ .owner = THIS_MODULE, ++ .adapter_nr = adapter_nr, ++ .size_of_priv = sizeof(struct dvbsky_state), ++ ++ .generic_bulk_ctrl_endpoint = 0x01, ++ .generic_bulk_ctrl_endpoint_response = 0x81, ++ .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY, ++ ++ .i2c_algo = &dvbsky_i2c_algo, ++ .frontend_attach = dvbsky_t330_attach, ++ .init = dvbsky_init, ++ .get_rc_config = dvbsky_get_rc_config, ++ .streaming_ctrl = dvbsky_streaming_ctrl, ++ .identify_state = dvbsky_identify_state, ++ .exit = dvbsky_exit, ++ .read_mac_address = dvbsky_read_mac_addr, ++ ++ .num_adapters = 1, ++ .adapter = { ++ { ++ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096), ++ } ++ } ++}; ++ ++static struct dvb_usb_device_properties dvbsky_s960c_props = { ++ .driver_name = KBUILD_MODNAME, ++ .owner = THIS_MODULE, ++ .adapter_nr = adapter_nr, ++ .size_of_priv = sizeof(struct dvbsky_state), ++ ++ .generic_bulk_ctrl_endpoint = 0x01, ++ .generic_bulk_ctrl_endpoint_response = 0x81, ++ .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY, ++ ++ .i2c_algo = &dvbsky_i2c_algo, ++ .frontend_attach = dvbsky_s960c_attach, ++ .init = dvbsky_init, ++ .get_rc_config = dvbsky_get_rc_config, ++ .streaming_ctrl = dvbsky_streaming_ctrl, ++ .identify_state = dvbsky_identify_state, ++ .exit = dvbsky_exit, ++ .read_mac_address = dvbsky_read_mac_addr, ++ ++ .num_adapters = 1, ++ .adapter = { ++ { ++ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096), ++ } ++ } ++}; ++ ++static struct dvb_usb_device_properties dvbsky_t680c_props = { ++ .driver_name = KBUILD_MODNAME, ++ .owner = THIS_MODULE, ++ .adapter_nr = adapter_nr, ++ .size_of_priv = sizeof(struct dvbsky_state), ++ ++ .generic_bulk_ctrl_endpoint = 0x01, ++ .generic_bulk_ctrl_endpoint_response = 0x81, ++ .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY, ++ ++ .i2c_algo = &dvbsky_i2c_algo, ++ .frontend_attach = dvbsky_t680c_attach, ++ .init = dvbsky_init, ++ .get_rc_config = dvbsky_get_rc_config, ++ .streaming_ctrl = dvbsky_streaming_ctrl, ++ .identify_state = dvbsky_identify_state, ++ .exit = dvbsky_exit, ++ .read_mac_address = dvbsky_read_mac_addr, ++ ++ .num_adapters = 1, ++ .adapter = { ++ { ++ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096), ++ } ++ } ++}; ++ ++static struct dvb_usb_device_properties dvbsky_s960_props = { ++ .driver_name = KBUILD_MODNAME, ++ .owner = THIS_MODULE, ++ .adapter_nr = adapter_nr, ++ .size_of_priv = sizeof(struct dvbsky_state), ++ ++ .generic_bulk_ctrl_endpoint = 0x01, ++ .generic_bulk_ctrl_endpoint_response = 0x81, ++ .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY, ++ ++ .i2c_algo = &dvbsky_i2c_algo, ++ .frontend_attach = dvbsky_s960_attach, ++ .init = dvbsky_init, ++ .get_rc_config = dvbsky_get_rc_config, ++ .streaming_ctrl = dvbsky_streaming_ctrl, ++ .identify_state = dvbsky_identify_state, ++ .exit = dvbsky_exit, ++ .read_mac_address = dvbsky_read_mac_addr, ++ ++ .num_adapters = 1, ++ .adapter = { ++ { ++ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096), ++ } ++ } ++}; ++ ++static const struct usb_device_id dvbsky_id_table[] = { ++ { DVB_USB_DEVICE(0x0572, 0x0320, ++ &dvbsky_t330_props, "DVBSky T330 USB Stick", RC_MAP_DVBSKY) }, ++ { DVB_USB_DEVICE(0x0572, 0x960c, ++ &dvbsky_s960c_props, "DVBSky S960CI", RC_MAP_DVBSKY) }, ++ { DVB_USB_DEVICE(0x0572, 0x680c, ++ &dvbsky_t680c_props, "DVBSky T680CI", RC_MAP_DVBSKY) }, ++ { DVB_USB_DEVICE(0x0572, 0x6831, ++ &dvbsky_s960_props, "DVBSky S960/S860", RC_MAP_DVBSKY) }, ++ { } ++}; ++MODULE_DEVICE_TABLE(usb, dvbsky_id_table); ++ ++static struct usb_driver dvbsky_usb_driver = { ++ .name = KBUILD_MODNAME, ++ .id_table = dvbsky_id_table, ++ .probe = dvb_usbv2_probe, ++ .disconnect = dvb_usbv2_disconnect, ++ .suspend = dvb_usbv2_suspend, ++ .resume = dvb_usbv2_resume, ++ .reset_resume = dvb_usbv2_reset_resume, ++ .no_dynamic_id = 1, ++ .soft_unbind = 1, ++}; ++ ++module_usb_driver(dvbsky_usb_driver); ++ ++MODULE_AUTHOR("Max nibble "); ++MODULE_DESCRIPTION("Driver for DVBSky USB2.0"); ++MODULE_LICENSE("GPL"); +diff --git a/include/media/rc-map.h b/include/media/rc-map.h +index a20ed97..73f8c92 100644 +--- a/include/media/rc-map.h ++++ b/include/media/rc-map.h +@@ -119,6 +119,7 @@ void rc_map_init(void); + #define RC_MAP_DM1105_NEC "rc-dm1105-nec" + #define RC_MAP_DNTV_LIVE_DVBT_PRO "rc-dntv-live-dvbt-pro" + #define RC_MAP_DNTV_LIVE_DVB_T "rc-dntv-live-dvb-t" ++#define RC_MAP_DVBSKY "rc-dvbsky" + #define RC_MAP_EMPTY "rc-empty" + #define RC_MAP_EM_TERRATEC "rc-em-terratec" + #define RC_MAP_ENCORE_ENLTV2 "rc-encore-enltv2" diff --git a/src/patches/linux-3.14.22-imq.patch b/src/patches/linux-3.14.22-imq.patch new file mode 100644 index 000000000..219d4fb3a --- /dev/null +++ b/src/patches/linux-3.14.22-imq.patch @@ -0,0 +1,1767 @@ +diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig +index 494b888..851e01f 100644 +--- a/drivers/net/Kconfig ++++ b/drivers/net/Kconfig +@@ -203,6 +203,125 @@ config RIONET_RX_SIZE + depends on RIONET + default "128" + ++config IMQ ++ tristate "IMQ (intermediate queueing device) support" ++ depends on NETDEVICES && NETFILTER ++ ---help--- ++ The IMQ device(s) is used as placeholder for QoS queueing ++ disciplines. Every packet entering/leaving the IP stack can be ++ directed through the IMQ device where it's enqueued/dequeued to the ++ attached qdisc. This allows you to treat network devices as classes ++ and distribute bandwidth among them. Iptables is used to specify ++ through which IMQ device, if any, packets travel. ++ ++ More information at: http://www.linuximq.net/ ++ ++ To compile this driver as a module, choose M here: the module ++ will be called imq. If unsure, say N. ++ ++choice ++ prompt "IMQ behavior (PRE/POSTROUTING)" ++ depends on IMQ ++ default IMQ_BEHAVIOR_AB ++ help ++ This setting defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ IMQ can work in any of the following ways: ++ ++ PREROUTING | POSTROUTING ++ -----------------|------------------- ++ #1 After NAT | After NAT ++ #2 After NAT | Before NAT ++ #3 Before NAT | After NAT ++ #4 Before NAT | Before NAT ++ ++ The default behavior is to hook before NAT on PREROUTING ++ and after NAT on POSTROUTING (#3). ++ ++ This settings are specially usefull when trying to use IMQ ++ to shape NATed clients. ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_AA ++ bool "IMQ AA" ++ help ++ This setting defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: After NAT ++ POSTROUTING: After NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_AB ++ bool "IMQ AB" ++ help ++ This setting defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: After NAT ++ POSTROUTING: Before NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_BA ++ bool "IMQ BA" ++ help ++ This setting defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: Before NAT ++ POSTROUTING: After NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_BB ++ bool "IMQ BB" ++ help ++ This setting defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: Before NAT ++ POSTROUTING: Before NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++endchoice ++ ++config IMQ_NUM_DEVS ++ int "Number of IMQ devices" ++ range 2 16 ++ depends on IMQ ++ default "16" ++ help ++ This setting defines how many IMQ devices will be created. ++ ++ The default value is 16. ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ + config TUN + tristate "Universal TUN/TAP device driver support" + select CRC32 +diff --git a/drivers/net/Makefile b/drivers/net/Makefile +index 3fef8a8..12dafc0 100644 +--- a/drivers/net/Makefile ++++ b/drivers/net/Makefile +@@ -9,6 +9,7 @@ obj-$(CONFIG_BONDING) += bonding/ + obj-$(CONFIG_DUMMY) += dummy.o + obj-$(CONFIG_EQUALIZER) += eql.o + obj-$(CONFIG_IFB) += ifb.o ++obj-$(CONFIG_IMQ) += imq.o + obj-$(CONFIG_MACVLAN) += macvlan.o + obj-$(CONFIG_MACVTAP) += macvtap.o + obj-$(CONFIG_MII) += mii.o +diff --git a/drivers/net/imq.c b/drivers/net/imq.c +new file mode 100644 +index 0000000..2140535 +--- /dev/null ++++ b/drivers/net/imq.c +@@ -0,0 +1,1011 @@ ++/* ++ * Pseudo-driver for the intermediate queue device. ++ * ++ * 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. ++ * ++ * Authors: Patrick McHardy, ++ * ++ * The first version was written by Martin Devera, ++ * ++ * Credits: Jan Rafaj ++ * - Update patch to 2.4.21 ++ * Sebastian Strollo ++ * - Fix "Dead-loop on netdevice imq"-issue ++ * Marcel Sebek ++ * - Update to 2.6.2-rc1 ++ * ++ * After some time of inactivity there is a group taking care ++ * of IMQ again: http://www.linuximq.net ++ * ++ * ++ * 2004/06/30 - New version of IMQ patch to kernels <=2.6.7 ++ * including the following changes: ++ * ++ * - Correction of ipv6 support "+"s issue (Hasso Tepper) ++ * - Correction of imq_init_devs() issue that resulted in ++ * kernel OOPS unloading IMQ as module (Norbert Buchmuller) ++ * - Addition of functionality to choose number of IMQ devices ++ * during kernel config (Andre Correa) ++ * - Addition of functionality to choose how IMQ hooks on ++ * PRE and POSTROUTING (after or before NAT) (Andre Correa) ++ * - Cosmetic corrections (Norbert Buchmuller) (Andre Correa) ++ * ++ * ++ * 2005/12/16 - IMQ versions between 2.6.7 and 2.6.13 were ++ * released with almost no problems. 2.6.14-x was released ++ * with some important changes: nfcache was removed; After ++ * some weeks of trouble we figured out that some IMQ fields ++ * in skb were missing in skbuff.c - skb_clone and copy_skb_header. ++ * These functions are correctly patched by this new patch version. ++ * ++ * Thanks for all who helped to figure out all the problems with ++ * 2.6.14.x: Patrick McHardy, Rune Kock, VeNoMouS, Max CtRiX, ++ * Kevin Shanahan, Richard Lucassen, Valery Dachev (hopefully ++ * I didn't forget anybody). I apologize again for my lack of time. ++ * ++ * ++ * 2008/06/17 - 2.6.25 - Changed imq.c to use qdisc_run() instead ++ * of qdisc_restart() and moved qdisc_run() to tasklet to avoid ++ * recursive locking. New initialization routines to fix 'rmmod' not ++ * working anymore. Used code from ifb.c. (Jussi Kivilinna) ++ * ++ * 2008/08/06 - 2.6.26 - (JK) ++ * - Replaced tasklet with 'netif_schedule()'. ++ * - Cleaned up and added comments for imq_nf_queue(). ++ * ++ * 2009/04/12 ++ * - Add skb_save_cb/skb_restore_cb helper functions for backuping ++ * control buffer. This is needed because qdisc-layer on kernels ++ * 2.6.27 and newer overwrite control buffer. (Jussi Kivilinna) ++ * - Add better locking for IMQ device. Hopefully this will solve ++ * SMP issues. (Jussi Kivilinna) ++ * - Port to 2.6.27 ++ * - Port to 2.6.28 ++ * - Port to 2.6.29 + fix rmmod not working ++ * ++ * 2009/04/20 - (Jussi Kivilinna) ++ * - Use netdevice feature flags to avoid extra packet handling ++ * by core networking layer and possibly increase performance. ++ * ++ * 2009/09/26 - (Jussi Kivilinna) ++ * - Add imq_nf_reinject_lockless to fix deadlock with ++ * imq_nf_queue/imq_nf_reinject. ++ * ++ * 2009/12/08 - (Jussi Kivilinna) ++ * - Port to 2.6.32 ++ * - Add check for skb->nf_queue_entry==NULL in imq_dev_xmit() ++ * - Also add better error checking for skb->nf_queue_entry usage ++ * ++ * 2010/02/25 - (Jussi Kivilinna) ++ * - Port to 2.6.33 ++ * ++ * 2010/08/15 - (Jussi Kivilinna) ++ * - Port to 2.6.35 ++ * - Simplify hook registration by using nf_register_hooks. ++ * - nf_reinject doesn't need spinlock around it, therefore remove ++ * imq_nf_reinject function. Other nf_reinject users protect ++ * their own data with spinlock. With IMQ however all data is ++ * needed is stored per skbuff, so no locking is needed. ++ * - Changed IMQ to use 'separate' NF_IMQ_QUEUE instead of ++ * NF_QUEUE, this allows working coexistance of IMQ and other ++ * NF_QUEUE users. ++ * - Make IMQ multi-queue. Number of IMQ device queues can be ++ * increased with 'numqueues' module parameters. Default number ++ * of queues is 1, in other words by default IMQ works as ++ * single-queue device. Multi-queue selection is based on ++ * IFB multi-queue patch by Changli Gao . ++ * ++ * 2011/03/18 - (Jussi Kivilinna) ++ * - Port to 2.6.38 ++ * ++ * 2011/07/12 - (syoder89@gmail.com) ++ * - Crash fix that happens when the receiving interface has more ++ * than one queue (add missing skb_set_queue_mapping in ++ * imq_select_queue). ++ * ++ * 2011/07/26 - (Jussi Kivilinna) ++ * - Add queue mapping checks for packets exiting IMQ. ++ * - Port to 3.0 ++ * ++ * 2011/08/16 - (Jussi Kivilinna) ++ * - Clear IFF_TX_SKB_SHARING flag that was added for linux 3.0.2 ++ * ++ * 2011/11/03 - Germano Michel ++ * - Fix IMQ for net namespaces ++ * ++ * 2011/11/04 - Jussi Kivilinna ++ * - Port to 3.1 ++ * - Clean-up, move 'get imq device pointer by imqX name' to ++ * separate function from imq_nf_queue(). ++ * ++ * 2012/01/05 - Jussi Kivilinna ++ * - Port to 3.2 ++ * ++ * 2012/03/19 - Jussi Kivilinna ++ * - Port to 3.3 ++ * ++ * 2012/12/12 - Jussi Kivilinna ++ * - Port to 3.7 ++ * - Fix checkpatch.pl warnings ++ * ++ * 2013/09/10 - Jussi Kivilinna ++ * - Fixed GSO handling for 3.10, see imq_nf_queue() for comments. ++ * - Don't copy skb->cb_next when copying or cloning skbuffs. ++ * ++ * 2013/09/16 - Jussi Kivilinna ++ * - Port to 3.11 ++ * ++ * 2013/11/12 - Jussi Kivilinna ++ * - Port to 3.12 ++ * ++ * 2014/02/07 - Jussi Kivilinna ++ * - Port to 3.13 ++ * ++ * Also, many thanks to pablo Sebastian Greco for making the initial ++ * patch and to those who helped the testing. ++ * ++ * More info at: http://www.linuximq.net/ (Andre Correa) ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++ #include ++#endif ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num); ++ ++static nf_hookfn imq_nf_hook; ++ ++static struct nf_hook_ops imq_ops[] = { ++ { ++ /* imq_ingress_ipv4 */ ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET, ++ .hooknum = NF_INET_PRE_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ .priority = NF_IP_PRI_MANGLE + 1, ++#else ++ .priority = NF_IP_PRI_NAT_DST + 1, ++#endif ++ }, ++ { ++ /* imq_egress_ipv4 */ ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET, ++ .hooknum = NF_INET_POST_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA) ++ .priority = NF_IP_PRI_LAST, ++#else ++ .priority = NF_IP_PRI_NAT_SRC - 1, ++#endif ++ }, ++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++ { ++ /* imq_ingress_ipv6 */ ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_INET_PRE_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ .priority = NF_IP6_PRI_MANGLE + 1, ++#else ++ .priority = NF_IP6_PRI_NAT_DST + 1, ++#endif ++ }, ++ { ++ /* imq_egress_ipv6 */ ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_INET_POST_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA) ++ .priority = NF_IP6_PRI_LAST, ++#else ++ .priority = NF_IP6_PRI_NAT_SRC - 1, ++#endif ++ }, ++#endif ++}; ++ ++#if defined(CONFIG_IMQ_NUM_DEVS) ++static int numdevs = CONFIG_IMQ_NUM_DEVS; ++#else ++static int numdevs = IMQ_MAX_DEVS; ++#endif ++ ++static struct net_device *imq_devs_cache[IMQ_MAX_DEVS]; ++ ++#define IMQ_MAX_QUEUES 32 ++static int numqueues = 1; ++static u32 imq_hashrnd; ++ ++static inline __be16 pppoe_proto(const struct sk_buff *skb) ++{ ++ return *((__be16 *)(skb_mac_header(skb) + ETH_HLEN + ++ sizeof(struct pppoe_hdr))); ++} ++ ++static u16 imq_hash(struct net_device *dev, struct sk_buff *skb) ++{ ++ unsigned int pull_len; ++ u16 protocol = skb->protocol; ++ u32 addr1, addr2; ++ u32 hash, ihl = 0; ++ union { ++ u16 in16[2]; ++ u32 in32; ++ } ports; ++ u8 ip_proto; ++ ++ pull_len = 0; ++ ++recheck: ++ switch (protocol) { ++ case htons(ETH_P_8021Q): { ++ if (unlikely(skb_pull(skb, VLAN_HLEN) == NULL)) ++ goto other; ++ ++ pull_len += VLAN_HLEN; ++ skb->network_header += VLAN_HLEN; ++ ++ protocol = vlan_eth_hdr(skb)->h_vlan_encapsulated_proto; ++ goto recheck; ++ } ++ ++ case htons(ETH_P_PPP_SES): { ++ if (unlikely(skb_pull(skb, PPPOE_SES_HLEN) == NULL)) ++ goto other; ++ ++ pull_len += PPPOE_SES_HLEN; ++ skb->network_header += PPPOE_SES_HLEN; ++ ++ protocol = pppoe_proto(skb); ++ goto recheck; ++ } ++ ++ case htons(ETH_P_IP): { ++ const struct iphdr *iph = ip_hdr(skb); ++ ++ if (unlikely(!pskb_may_pull(skb, sizeof(struct iphdr)))) ++ goto other; ++ ++ addr1 = iph->daddr; ++ addr2 = iph->saddr; ++ ++ ip_proto = !(ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) ? ++ iph->protocol : 0; ++ ihl = ip_hdrlen(skb); ++ ++ break; ++ } ++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++ case htons(ETH_P_IPV6): { ++ const struct ipv6hdr *iph = ipv6_hdr(skb); ++ __be16 fo = 0; ++ ++ if (unlikely(!pskb_may_pull(skb, sizeof(struct ipv6hdr)))) ++ goto other; ++ ++ addr1 = iph->daddr.s6_addr32[3]; ++ addr2 = iph->saddr.s6_addr32[3]; ++ ihl = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &ip_proto, ++ &fo); ++ if (unlikely(ihl < 0)) ++ goto other; ++ ++ break; ++ } ++#endif ++ default: ++other: ++ if (pull_len != 0) { ++ skb_push(skb, pull_len); ++ skb->network_header -= pull_len; ++ } ++ ++ return (u16)(ntohs(protocol) % dev->real_num_tx_queues); ++ } ++ ++ if (addr1 > addr2) ++ swap(addr1, addr2); ++ ++ switch (ip_proto) { ++ case IPPROTO_TCP: ++ case IPPROTO_UDP: ++ case IPPROTO_DCCP: ++ case IPPROTO_ESP: ++ case IPPROTO_AH: ++ case IPPROTO_SCTP: ++ case IPPROTO_UDPLITE: { ++ if (likely(skb_copy_bits(skb, ihl, &ports.in32, 4) >= 0)) { ++ if (ports.in16[0] > ports.in16[1]) ++ swap(ports.in16[0], ports.in16[1]); ++ break; ++ } ++ /* fall-through */ ++ } ++ default: ++ ports.in32 = 0; ++ break; ++ } ++ ++ if (pull_len != 0) { ++ skb_push(skb, pull_len); ++ skb->network_header -= pull_len; ++ } ++ ++ hash = jhash_3words(addr1, addr2, ports.in32, imq_hashrnd ^ ip_proto); ++ ++ return (u16)(((u64)hash * dev->real_num_tx_queues) >> 32); ++} ++ ++static inline bool sk_tx_queue_recorded(struct sock *sk) ++{ ++ return (sk_tx_queue_get(sk) >= 0); ++} ++ ++static struct netdev_queue *imq_select_queue(struct net_device *dev, ++ struct sk_buff *skb) ++{ ++ u16 queue_index = 0; ++ u32 hash; ++ ++ if (likely(dev->real_num_tx_queues == 1)) ++ goto out; ++ ++ /* IMQ can be receiving ingress or engress packets. */ ++ ++ /* Check first for if rx_queue is set */ ++ if (skb_rx_queue_recorded(skb)) { ++ queue_index = skb_get_rx_queue(skb); ++ goto out; ++ } ++ ++ /* Check if socket has tx_queue set */ ++ if (sk_tx_queue_recorded(skb->sk)) { ++ queue_index = sk_tx_queue_get(skb->sk); ++ goto out; ++ } ++ ++ /* Try use socket hash */ ++ if (skb->sk && skb->sk->sk_hash) { ++ hash = skb->sk->sk_hash; ++ queue_index = ++ (u16)(((u64)hash * dev->real_num_tx_queues) >> 32); ++ goto out; ++ } ++ ++ /* Generate hash from packet data */ ++ queue_index = imq_hash(dev, skb); ++ ++out: ++ if (unlikely(queue_index >= dev->real_num_tx_queues)) ++ queue_index = (u16)((u32)queue_index % dev->real_num_tx_queues); ++ ++ skb_set_queue_mapping(skb, queue_index); ++ return netdev_get_tx_queue(dev, queue_index); ++} ++ ++static struct net_device_stats *imq_get_stats(struct net_device *dev) ++{ ++ return &dev->stats; ++} ++ ++/* called for packets kfree'd in qdiscs at places other than enqueue */ ++static void imq_skb_destructor(struct sk_buff *skb) ++{ ++ struct nf_queue_entry *entry = skb->nf_queue_entry; ++ ++ skb->nf_queue_entry = NULL; ++ ++ if (entry) { ++ nf_queue_entry_release_refs(entry); ++ kfree(entry); ++ } ++ ++ skb_restore_cb(skb); /* kfree backup */ ++} ++ ++static void imq_done_check_queue_mapping(struct sk_buff *skb, ++ struct net_device *dev) ++{ ++ unsigned int queue_index; ++ ++ /* Don't let queue_mapping be left too large after exiting IMQ */ ++ if (likely(skb->dev != dev && skb->dev != NULL)) { ++ queue_index = skb_get_queue_mapping(skb); ++ if (unlikely(queue_index >= skb->dev->real_num_tx_queues)) { ++ queue_index = (u16)((u32)queue_index % ++ skb->dev->real_num_tx_queues); ++ skb_set_queue_mapping(skb, queue_index); ++ } ++ } else { ++ /* skb->dev was IMQ device itself or NULL, be on safe side and ++ * just clear queue mapping. ++ */ ++ skb_set_queue_mapping(skb, 0); ++ } ++} ++ ++static netdev_tx_t imq_dev_xmit(struct sk_buff *skb, struct net_device *dev) ++{ ++ struct nf_queue_entry *entry = skb->nf_queue_entry; ++ ++ skb->nf_queue_entry = NULL; ++ dev->trans_start = jiffies; ++ ++ dev->stats.tx_bytes += skb->len; ++ dev->stats.tx_packets++; ++ ++ if (unlikely(entry == NULL)) { ++ /* We don't know what is going on here.. packet is queued for ++ * imq device, but (probably) not by us. ++ * ++ * If this packet was not send here by imq_nf_queue(), then ++ * skb_save_cb() was not used and skb_free() should not show: ++ * WARNING: IMQ: kfree_skb: skb->cb_next:.. ++ * and/or ++ * WARNING: IMQ: kfree_skb: skb->nf_queue_entry... ++ * ++ * However if this message is shown, then IMQ is somehow broken ++ * and you should report this to linuximq.net. ++ */ ++ ++ /* imq_dev_xmit is black hole that eats all packets, report that ++ * we eat this packet happily and increase dropped counters. ++ */ ++ ++ dev->stats.tx_dropped++; ++ dev_kfree_skb(skb); ++ ++ return NETDEV_TX_OK; ++ } ++ ++ skb_restore_cb(skb); /* restore skb->cb */ ++ ++ skb->imq_flags = 0; ++ skb->destructor = NULL; ++ ++ imq_done_check_queue_mapping(skb, dev); ++ ++ nf_reinject(entry, NF_ACCEPT); ++ ++ return NETDEV_TX_OK; ++} ++ ++static struct net_device *get_imq_device_by_index(int index) ++{ ++ struct net_device *dev = NULL; ++ struct net *net; ++ char buf[8]; ++ ++ /* get device by name and cache result */ ++ snprintf(buf, sizeof(buf), "imq%d", index); ++ ++ /* Search device from all namespaces. */ ++ for_each_net(net) { ++ dev = dev_get_by_name(net, buf); ++ if (dev) ++ break; ++ } ++ ++ if (WARN_ON_ONCE(dev == NULL)) { ++ /* IMQ device not found. Exotic config? */ ++ return ERR_PTR(-ENODEV); ++ } ++ ++ imq_devs_cache[index] = dev; ++ dev_put(dev); ++ ++ return dev; ++} ++ ++static struct nf_queue_entry *nf_queue_entry_dup(struct nf_queue_entry *e) ++{ ++ struct nf_queue_entry *entry = kmemdup(e, e->size, GFP_ATOMIC); ++ if (entry) { ++ if (nf_queue_entry_get_refs(entry)) ++ return entry; ++ kfree(entry); ++ } ++ return NULL; ++} ++ ++#ifdef CONFIG_BRIDGE_NETFILTER ++/* When called from bridge netfilter, skb->data must point to MAC header ++ * before calling skb_gso_segment(). Else, original MAC header is lost ++ * and segmented skbs will be sent to wrong destination. ++ */ ++static void nf_bridge_adjust_skb_data(struct sk_buff *skb) ++{ ++ if (skb->nf_bridge) ++ __skb_push(skb, skb->network_header - skb->mac_header); ++} ++ ++static void nf_bridge_adjust_segmented_data(struct sk_buff *skb) ++{ ++ if (skb->nf_bridge) ++ __skb_pull(skb, skb->network_header - skb->mac_header); ++} ++#else ++#define nf_bridge_adjust_skb_data(s) do {} while (0) ++#define nf_bridge_adjust_segmented_data(s) do {} while (0) ++#endif ++ ++static void free_entry(struct nf_queue_entry *entry) ++{ ++ nf_queue_entry_release_refs(entry); ++ kfree(entry); ++} ++ ++static int __imq_nf_queue(struct nf_queue_entry *entry, struct net_device *dev); ++ ++static int __imq_nf_queue_gso(struct nf_queue_entry *entry, ++ struct net_device *dev, struct sk_buff *skb) ++{ ++ int ret = -ENOMEM; ++ struct nf_queue_entry *entry_seg; ++ ++ nf_bridge_adjust_segmented_data(skb); ++ ++ if (skb->next == NULL) { /* last packet, no need to copy entry */ ++ struct sk_buff *gso_skb = entry->skb; ++ entry->skb = skb; ++ ret = __imq_nf_queue(entry, dev); ++ if (ret) ++ entry->skb = gso_skb; ++ return ret; ++ } ++ ++ skb->next = NULL; ++ ++ entry_seg = nf_queue_entry_dup(entry); ++ if (entry_seg) { ++ entry_seg->skb = skb; ++ ret = __imq_nf_queue(entry_seg, dev); ++ if (ret) ++ free_entry(entry_seg); ++ } ++ return ret; ++} ++ ++static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num) ++{ ++ struct sk_buff *skb, *segs; ++ struct net_device *dev; ++ unsigned int queued; ++ int index, retval, err; ++ ++ index = entry->skb->imq_flags & IMQ_F_IFMASK; ++ if (unlikely(index > numdevs - 1)) { ++ if (net_ratelimit()) ++ pr_warn("IMQ: invalid device specified, highest is %u\n", ++ numdevs - 1); ++ retval = -EINVAL; ++ goto out_no_dev; ++ } ++ ++ /* check for imq device by index from cache */ ++ dev = imq_devs_cache[index]; ++ if (unlikely(!dev)) { ++ dev = get_imq_device_by_index(index); ++ if (IS_ERR(dev)) { ++ retval = PTR_ERR(dev); ++ goto out_no_dev; ++ } ++ } ++ ++ if (unlikely(!(dev->flags & IFF_UP))) { ++ entry->skb->imq_flags = 0; ++ retval = -ECANCELED; ++ goto out_no_dev; ++ } ++ ++ if (!skb_is_gso(entry->skb)) ++ return __imq_nf_queue(entry, dev); ++ ++ /* Since 3.10.x, GSO handling moved here as result of upstream commit ++ * a5fedd43d5f6c94c71053a66e4c3d2e35f1731a2 (netfilter: move ++ * skb_gso_segment into nfnetlink_queue module). ++ * ++ * Following code replicates the gso handling from ++ * 'net/netfilter/nfnetlink_queue_core.c':nfqnl_enqueue_packet(). ++ */ ++ ++ skb = entry->skb; ++ ++ switch (entry->pf) { ++ case NFPROTO_IPV4: ++ skb->protocol = htons(ETH_P_IP); ++ break; ++ case NFPROTO_IPV6: ++ skb->protocol = htons(ETH_P_IPV6); ++ break; ++ } ++ ++ nf_bridge_adjust_skb_data(skb); ++ segs = skb_gso_segment(skb, 0); ++ /* Does not use PTR_ERR to limit the number of error codes that can be ++ * returned by nf_queue. For instance, callers rely on -ECANCELED to ++ * mean 'ignore this hook'. ++ */ ++ err = -ENOBUFS; ++ if (IS_ERR(segs)) ++ goto out_err; ++ queued = 0; ++ err = 0; ++ do { ++ struct sk_buff *nskb = segs->next; ++ if (nskb && nskb->next) ++ nskb->cb_next = NULL; ++ if (err == 0) ++ err = __imq_nf_queue_gso(entry, dev, segs); ++ if (err == 0) ++ queued++; ++ else ++ kfree_skb(segs); ++ segs = nskb; ++ } while (segs); ++ ++ if (queued) { ++ if (err) /* some segments are already queued */ ++ free_entry(entry); ++ kfree_skb(skb); ++ return 0; ++ } ++ ++out_err: ++ nf_bridge_adjust_segmented_data(skb); ++ retval = err; ++out_no_dev: ++ return retval; ++} ++ ++static int __imq_nf_queue(struct nf_queue_entry *entry, struct net_device *dev) ++{ ++ struct sk_buff *skb_orig, *skb, *skb_shared; ++ struct Qdisc *q; ++ struct netdev_queue *txq; ++ spinlock_t *root_lock; ++ int users; ++ int retval = -EINVAL; ++ unsigned int orig_queue_index; ++ ++ dev->last_rx = jiffies; ++ ++ skb = entry->skb; ++ skb_orig = NULL; ++ ++ /* skb has owner? => make clone */ ++ if (unlikely(skb->destructor)) { ++ skb_orig = skb; ++ skb = skb_clone(skb, GFP_ATOMIC); ++ if (unlikely(!skb)) { ++ retval = -ENOMEM; ++ goto out; ++ } ++ skb->cb_next = NULL; ++ entry->skb = skb; ++ } ++ ++ skb->nf_queue_entry = entry; ++ ++ dev->stats.rx_bytes += skb->len; ++ dev->stats.rx_packets++; ++ ++ if (!skb->dev) { ++ /* skb->dev == NULL causes problems, try the find cause. */ ++ if (net_ratelimit()) { ++ dev_warn(&dev->dev, ++ "received packet with skb->dev == NULL\n"); ++ dump_stack(); ++ } ++ ++ skb->dev = dev; ++ } ++ ++ /* Disables softirqs for lock below */ ++ rcu_read_lock_bh(); ++ ++ /* Multi-queue selection */ ++ orig_queue_index = skb_get_queue_mapping(skb); ++ txq = imq_select_queue(dev, skb); ++ ++ q = rcu_dereference(txq->qdisc); ++ if (unlikely(!q->enqueue)) ++ goto packet_not_eaten_by_imq_dev; ++ ++ root_lock = qdisc_lock(q); ++ spin_lock(root_lock); ++ ++ users = atomic_read(&skb->users); ++ ++ skb_shared = skb_get(skb); /* increase reference count by one */ ++ ++ /* backup skb->cb, as qdisc layer will overwrite it */ ++ skb_save_cb(skb_shared); ++ qdisc_enqueue_root(skb_shared, q); /* might kfree_skb */ ++ ++ if (likely(atomic_read(&skb_shared->users) == users + 1)) { ++ kfree_skb(skb_shared); /* decrease reference count by one */ ++ ++ skb->destructor = &imq_skb_destructor; ++ ++ /* cloned? */ ++ if (unlikely(skb_orig)) ++ kfree_skb(skb_orig); /* free original */ ++ ++ spin_unlock(root_lock); ++ rcu_read_unlock_bh(); ++ ++ /* schedule qdisc dequeue */ ++ __netif_schedule(q); ++ ++ retval = 0; ++ goto out; ++ } else { ++ skb_restore_cb(skb_shared); /* restore skb->cb */ ++ skb->nf_queue_entry = NULL; ++ /* ++ * qdisc dropped packet and decreased skb reference count of ++ * skb, so we don't really want to and try refree as that would ++ * actually destroy the skb. ++ */ ++ spin_unlock(root_lock); ++ goto packet_not_eaten_by_imq_dev; ++ } ++ ++packet_not_eaten_by_imq_dev: ++ skb_set_queue_mapping(skb, orig_queue_index); ++ rcu_read_unlock_bh(); ++ ++ /* cloned? restore original */ ++ if (unlikely(skb_orig)) { ++ kfree_skb(skb); ++ entry->skb = skb_orig; ++ } ++ retval = -1; ++out: ++ return retval; ++} ++ ++static unsigned int imq_nf_hook(const struct nf_hook_ops *hook_ops, ++ struct sk_buff *pskb, ++ const struct net_device *indev, ++ const struct net_device *outdev, ++ int (*okfn)(struct sk_buff *)) ++{ ++ return (pskb->imq_flags & IMQ_F_ENQUEUE) ? NF_IMQ_QUEUE : NF_ACCEPT; ++} ++ ++static int imq_close(struct net_device *dev) ++{ ++ netif_stop_queue(dev); ++ return 0; ++} ++ ++static int imq_open(struct net_device *dev) ++{ ++ netif_start_queue(dev); ++ return 0; ++} ++ ++static const struct net_device_ops imq_netdev_ops = { ++ .ndo_open = imq_open, ++ .ndo_stop = imq_close, ++ .ndo_start_xmit = imq_dev_xmit, ++ .ndo_get_stats = imq_get_stats, ++}; ++ ++static void imq_setup(struct net_device *dev) ++{ ++ dev->netdev_ops = &imq_netdev_ops; ++ dev->type = ARPHRD_VOID; ++ dev->mtu = 16000; /* too small? */ ++ dev->tx_queue_len = 11000; /* too big? */ ++ dev->flags = IFF_NOARP; ++ dev->features = NETIF_F_SG | NETIF_F_FRAGLIST | ++ NETIF_F_GSO | NETIF_F_HW_CSUM | ++ NETIF_F_HIGHDMA; ++ dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | ++ IFF_TX_SKB_SHARING); ++} ++ ++static int imq_validate(struct nlattr *tb[], struct nlattr *data[]) ++{ ++ int ret = 0; ++ ++ if (tb[IFLA_ADDRESS]) { ++ if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) { ++ ret = -EINVAL; ++ goto end; ++ } ++ if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) { ++ ret = -EADDRNOTAVAIL; ++ goto end; ++ } ++ } ++ return 0; ++end: ++ pr_warn("IMQ: imq_validate failed (%d)\n", ret); ++ return ret; ++} ++ ++static struct rtnl_link_ops imq_link_ops __read_mostly = { ++ .kind = "imq", ++ .priv_size = 0, ++ .setup = imq_setup, ++ .validate = imq_validate, ++}; ++ ++static const struct nf_queue_handler imq_nfqh = { ++ .outfn = imq_nf_queue, ++}; ++ ++static int __init imq_init_hooks(void) ++{ ++ int ret; ++ ++ nf_register_queue_imq_handler(&imq_nfqh); ++ ++ ret = nf_register_hooks(imq_ops, ARRAY_SIZE(imq_ops)); ++ if (ret < 0) ++ nf_unregister_queue_imq_handler(); ++ ++ return ret; ++} ++ ++static int __init imq_init_one(int index) ++{ ++ struct net_device *dev; ++ int ret; ++ ++ dev = alloc_netdev_mq(0, "imq%d", imq_setup, numqueues); ++ if (!dev) ++ return -ENOMEM; ++ ++ ret = dev_alloc_name(dev, dev->name); ++ if (ret < 0) ++ goto fail; ++ ++ dev->rtnl_link_ops = &imq_link_ops; ++ ret = register_netdevice(dev); ++ if (ret < 0) ++ goto fail; ++ ++ return 0; ++fail: ++ free_netdev(dev); ++ return ret; ++} ++ ++static int __init imq_init_devs(void) ++{ ++ int err, i; ++ ++ if (numdevs < 1 || numdevs > IMQ_MAX_DEVS) { ++ pr_err("IMQ: numdevs has to be betweed 1 and %u\n", ++ IMQ_MAX_DEVS); ++ return -EINVAL; ++ } ++ ++ if (numqueues < 1 || numqueues > IMQ_MAX_QUEUES) { ++ pr_err("IMQ: numqueues has to be betweed 1 and %u\n", ++ IMQ_MAX_QUEUES); ++ return -EINVAL; ++ } ++ ++ get_random_bytes(&imq_hashrnd, sizeof(imq_hashrnd)); ++ ++ rtnl_lock(); ++ err = __rtnl_link_register(&imq_link_ops); ++ ++ for (i = 0; i < numdevs && !err; i++) ++ err = imq_init_one(i); ++ ++ if (err) { ++ __rtnl_link_unregister(&imq_link_ops); ++ memset(imq_devs_cache, 0, sizeof(imq_devs_cache)); ++ } ++ rtnl_unlock(); ++ ++ return err; ++} ++ ++static int __init imq_init_module(void) ++{ ++ int err; ++ ++#if defined(CONFIG_IMQ_NUM_DEVS) ++ BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS > 16); ++ BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS < 2); ++ BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS - 1 > IMQ_F_IFMASK); ++#endif ++ ++ err = imq_init_devs(); ++ if (err) { ++ pr_err("IMQ: Error trying imq_init_devs(net)\n"); ++ return err; ++ } ++ ++ err = imq_init_hooks(); ++ if (err) { ++ pr_err(KERN_ERR "IMQ: Error trying imq_init_hooks()\n"); ++ rtnl_link_unregister(&imq_link_ops); ++ memset(imq_devs_cache, 0, sizeof(imq_devs_cache)); ++ return err; ++ } ++ ++ pr_info("IMQ driver loaded successfully. (numdevs = %d, numqueues = %d)\n", ++ numdevs, numqueues); ++ ++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ pr_info("\tHooking IMQ before NAT on PREROUTING.\n"); ++#else ++ pr_info("\tHooking IMQ after NAT on PREROUTING.\n"); ++#endif ++#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ pr_info("\tHooking IMQ before NAT on POSTROUTING.\n"); ++#else ++ pr_info("\tHooking IMQ after NAT on POSTROUTING.\n"); ++#endif ++ ++ return 0; ++} ++ ++static void __exit imq_unhook(void) ++{ ++ nf_unregister_hooks(imq_ops, ARRAY_SIZE(imq_ops)); ++ nf_unregister_queue_imq_handler(); ++} ++ ++static void __exit imq_cleanup_devs(void) ++{ ++ rtnl_link_unregister(&imq_link_ops); ++ memset(imq_devs_cache, 0, sizeof(imq_devs_cache)); ++} ++ ++static void __exit imq_exit_module(void) ++{ ++ imq_unhook(); ++ imq_cleanup_devs(); ++ pr_info("IMQ driver unloaded successfully.\n"); ++} ++ ++module_init(imq_init_module); ++module_exit(imq_exit_module); ++ ++module_param(numdevs, int, 0); ++module_param(numqueues, int, 0); ++MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will be created)"); ++MODULE_PARM_DESC(numqueues, "number of queues per IMQ device"); ++MODULE_AUTHOR("http://www.linuximq.net"); ++MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information."); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS_RTNL_LINK("imq"); ++ +diff --git a/include/linux/imq.h b/include/linux/imq.h +new file mode 100644 +index 0000000..1babb09 +--- /dev/null ++++ b/include/linux/imq.h +@@ -0,0 +1,13 @@ ++#ifndef _IMQ_H ++#define _IMQ_H ++ ++/* IFMASK (16 device indexes, 0 to 15) and flag(s) fit in 5 bits */ ++#define IMQ_F_BITS 5 ++ ++#define IMQ_F_IFMASK 0x0f ++#define IMQ_F_ENQUEUE 0x10 ++ ++#define IMQ_MAX_DEVS (IMQ_F_IFMASK + 1) ++ ++#endif /* _IMQ_H */ ++ +diff --git a/include/linux/netfilter/xt_IMQ.h b/include/linux/netfilter/xt_IMQ.h +new file mode 100644 +index 0000000..9b07230 +--- /dev/null ++++ b/include/linux/netfilter/xt_IMQ.h +@@ -0,0 +1,9 @@ ++#ifndef _XT_IMQ_H ++#define _XT_IMQ_H ++ ++struct xt_imq_info { ++ unsigned int todev; /* target imq device */ ++}; ++ ++#endif /* _XT_IMQ_H */ ++ +diff --git a/include/linux/netfilter_ipv4/ipt_IMQ.h b/include/linux/netfilter_ipv4/ipt_IMQ.h +new file mode 100644 +index 0000000..7af320f +--- /dev/null ++++ b/include/linux/netfilter_ipv4/ipt_IMQ.h +@@ -0,0 +1,10 @@ ++#ifndef _IPT_IMQ_H ++#define _IPT_IMQ_H ++ ++/* Backwards compatibility for old userspace */ ++#include ++ ++#define ipt_imq_info xt_imq_info ++ ++#endif /* _IPT_IMQ_H */ ++ +diff --git a/include/linux/netfilter_ipv6/ip6t_IMQ.h b/include/linux/netfilter_ipv6/ip6t_IMQ.h +new file mode 100644 +index 0000000..198ac01 +--- /dev/null ++++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h +@@ -0,0 +1,10 @@ ++#ifndef _IP6T_IMQ_H ++#define _IP6T_IMQ_H ++ ++/* Backwards compatibility for old userspace */ ++#include ++ ++#define ip6t_imq_info xt_imq_info ++ ++#endif /* _IP6T_IMQ_H */ ++ +diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h +index ad8f859..8473090 100644 +--- a/include/linux/skbuff.h ++++ b/include/linux/skbuff.h +@@ -33,6 +33,9 @@ + #include + #include + #include ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++#include ++#endif + + /* A. Checksumming of received packets by device. + * +@@ -441,6 +444,9 @@ struct sk_buff { + * first. This is owned by whoever has the skb queued ATM. + */ + char cb[48] __aligned(8); ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ void *cb_next; ++#endif + + unsigned long _skb_refdst; + #ifdef CONFIG_XFRM +@@ -476,6 +482,9 @@ struct sk_buff { + #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) + struct nf_conntrack *nfct; + #endif ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ struct nf_queue_entry *nf_queue_entry; ++#endif + #ifdef CONFIG_BRIDGE_NETFILTER + struct nf_bridge_info *nf_bridge; + #endif +@@ -513,6 +522,9 @@ struct sk_buff { + */ + __u8 encapsulation:1; + /* 6/8 bit hole (depending on ndisc_nodetype presence) */ ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ __u8 imq_flags:IMQ_F_BITS; ++#endif + kmemcheck_bitfield_end(flags2); + + #if defined CONFIG_NET_DMA || defined CONFIG_NET_RX_BUSY_POLL +@@ -653,6 +665,12 @@ void kfree_skb_list(struct sk_buff *segs); + void skb_tx_error(struct sk_buff *skb); + void consume_skb(struct sk_buff *skb); + void __kfree_skb(struct sk_buff *skb); ++ ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++int skb_save_cb(struct sk_buff *skb); ++int skb_restore_cb(struct sk_buff *skb); ++#endif ++ + extern struct kmem_cache *skbuff_head_cache; + + void kfree_skb_partial(struct sk_buff *skb, bool head_stolen); +@@ -2739,6 +2757,10 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src) + nf_conntrack_get(src->nfct); + dst->nfctinfo = src->nfctinfo; + #endif ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ dst->imq_flags = src->imq_flags; ++ dst->nf_queue_entry = src->nf_queue_entry; ++#endif + #ifdef CONFIG_BRIDGE_NETFILTER + dst->nf_bridge = src->nf_bridge; + nf_bridge_get(src->nf_bridge); +diff --git a/include/net/netfilter/nf_queue.h b/include/net/netfilter/nf_queue.h +index 84a53d7..6ffb593 100644 +--- a/include/net/netfilter/nf_queue.h ++++ b/include/net/netfilter/nf_queue.h +@@ -33,6 +33,12 @@ struct nf_queue_handler { + void nf_register_queue_handler(const struct nf_queue_handler *qh); + void nf_unregister_queue_handler(void); + void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict); ++void nf_queue_entry_release_refs(struct nf_queue_entry *entry); ++ ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++void nf_register_queue_imq_handler(const struct nf_queue_handler *qh); ++void nf_unregister_queue_imq_handler(void); ++#endif + + bool nf_queue_entry_get_refs(struct nf_queue_entry *entry); + void nf_queue_entry_release_refs(struct nf_queue_entry *entry); +diff --git a/include/uapi/linux/netfilter.h b/include/uapi/linux/netfilter.h +index ef1b1f8..079e5ff 100644 +--- a/include/uapi/linux/netfilter.h ++++ b/include/uapi/linux/netfilter.h +@@ -13,7 +13,8 @@ + #define NF_QUEUE 3 + #define NF_REPEAT 4 + #define NF_STOP 5 +-#define NF_MAX_VERDICT NF_STOP ++#define NF_IMQ_QUEUE 6 ++#define NF_MAX_VERDICT NF_IMQ_QUEUE + + /* we overload the higher bits for encoding auxiliary data such as the queue + * number or errno values. Not nice, but better than additional function +diff --git a/net/core/dev.c b/net/core/dev.c +index 3ed11a5..fd62030 100644 +--- a/net/core/dev.c ++++ b/net/core/dev.c +@@ -132,6 +132,9 @@ + #include + #include + #include ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++#include ++#endif + + #include "net-sysfs.h" + +@@ -2611,7 +2614,12 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, + } + } + ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ if (!list_empty(&ptype_all) && ++ !(skb->imq_flags & IMQ_F_ENQUEUE)) ++#else + if (!list_empty(&ptype_all)) ++#endif + dev_queue_xmit_nit(skb, dev); + + skb_len = skb->len; +diff --git a/net/core/skbuff.c b/net/core/skbuff.c +index baf6fc4..7d30d78 100644 +--- a/net/core/skbuff.c ++++ b/net/core/skbuff.c +@@ -77,6 +77,115 @@ + + struct kmem_cache *skbuff_head_cache __read_mostly; + static struct kmem_cache *skbuff_fclone_cache __read_mostly; ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++static struct kmem_cache *skbuff_cb_store_cache __read_mostly; ++#endif ++ ++static void sock_pipe_buf_release(struct pipe_inode_info *pipe, ++ struct pipe_buffer *buf) ++{ ++ put_page(buf->page); ++} ++ ++static void sock_pipe_buf_get(struct pipe_inode_info *pipe, ++ struct pipe_buffer *buf) ++{ ++ get_page(buf->page); ++} ++ ++static int sock_pipe_buf_steal(struct pipe_inode_info *pipe, ++ struct pipe_buffer *buf) ++{ ++ return 1; ++} ++ ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++/* Control buffer save/restore for IMQ devices */ ++struct skb_cb_table { ++ char cb[48] __aligned(8); ++ void *cb_next; ++ atomic_t refcnt; ++}; ++ ++static DEFINE_SPINLOCK(skb_cb_store_lock); ++ ++int skb_save_cb(struct sk_buff *skb) ++{ ++ struct skb_cb_table *next; ++ ++ next = kmem_cache_alloc(skbuff_cb_store_cache, GFP_ATOMIC); ++ if (!next) ++ return -ENOMEM; ++ ++ BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb)); ++ ++ memcpy(next->cb, skb->cb, sizeof(skb->cb)); ++ next->cb_next = skb->cb_next; ++ ++ atomic_set(&next->refcnt, 1); ++ ++ skb->cb_next = next; ++ return 0; ++} ++EXPORT_SYMBOL(skb_save_cb); ++ ++int skb_restore_cb(struct sk_buff *skb) ++{ ++ struct skb_cb_table *next; ++ ++ if (!skb->cb_next) ++ return 0; ++ ++ next = skb->cb_next; ++ ++ BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb)); ++ ++ memcpy(skb->cb, next->cb, sizeof(skb->cb)); ++ skb->cb_next = next->cb_next; ++ ++ spin_lock(&skb_cb_store_lock); ++ ++ if (atomic_dec_and_test(&next->refcnt)) ++ kmem_cache_free(skbuff_cb_store_cache, next); ++ ++ spin_unlock(&skb_cb_store_lock); ++ ++ return 0; ++} ++EXPORT_SYMBOL(skb_restore_cb); ++ ++static void skb_copy_stored_cb(struct sk_buff *new, const struct sk_buff *__old) ++{ ++ struct skb_cb_table *next; ++ struct sk_buff *old; ++ ++ if (!__old->cb_next) { ++ new->cb_next = NULL; ++ return; ++ } ++ ++ spin_lock(&skb_cb_store_lock); ++ ++ old = (struct sk_buff *)__old; ++ ++ next = old->cb_next; ++ atomic_inc(&next->refcnt); ++ new->cb_next = next; ++ ++ spin_unlock(&skb_cb_store_lock); ++} ++#endif ++ ++/* Pipe buffer operations for a socket. */ ++static const struct pipe_buf_operations sock_pipe_buf_ops = { ++ .can_merge = 0, ++ .map = generic_pipe_buf_map, ++ .unmap = generic_pipe_buf_unmap, ++ .confirm = generic_pipe_buf_confirm, ++ .release = sock_pipe_buf_release, ++ .steal = sock_pipe_buf_steal, ++ .get = sock_pipe_buf_get, ++}; + + /** + * skb_panic - private function for out-of-line support +@@ -563,6 +672,28 @@ static void skb_release_head_state(struct sk_buff *skb) + WARN_ON(in_irq()); + skb->destructor(skb); + } ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ /* ++ * This should not happen. When it does, avoid memleak by restoring ++ * the chain of cb-backups. ++ */ ++ while (skb->cb_next != NULL) { ++ if (net_ratelimit()) ++ pr_warn("IMQ: kfree_skb: skb->cb_next: %08x\n", ++ (unsigned int)skb->cb_next); ++ ++ skb_restore_cb(skb); ++ } ++ /* ++ * This should not happen either, nf_queue_entry is nullified in ++ * imq_dev_xmit(). If we have non-NULL nf_queue_entry then we are ++ * leaking entry pointers, maybe memory. We don't know if this is ++ * pointer to already freed memory, or should this be freed. ++ * If this happens we need to add refcounting, etc for nf_queue_entry. ++ */ ++ if (skb->nf_queue_entry && net_ratelimit()) ++ pr_warn("%s\n", "IMQ: kfree_skb: skb->nf_queue_entry != NULL"); ++#endif + #if IS_ENABLED(CONFIG_NF_CONNTRACK) + nf_conntrack_put(skb->nfct); + #endif +@@ -694,6 +825,10 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old) + new->sp = secpath_get(old->sp); + #endif + memcpy(new->cb, old->cb, sizeof(old->cb)); ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ new->cb_next = NULL; ++ /*skb_copy_stored_cb(new, old);*/ ++#endif + new->csum = old->csum; + new->local_df = old->local_df; + new->pkt_type = old->pkt_type; +@@ -3233,6 +3368,13 @@ void __init skb_init(void) + 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, + NULL); ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ skbuff_cb_store_cache = kmem_cache_create("skbuff_cb_store_cache", ++ sizeof(struct skb_cb_table), ++ 0, ++ SLAB_HWCACHE_ALIGN|SLAB_PANIC, ++ NULL); ++#endif + } + + /** +diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c +index 12f7ef0..deb1c9d 100644 +--- a/net/ipv6/ip6_output.c ++++ b/net/ipv6/ip6_output.c +@@ -64,9 +64,6 @@ static int ip6_finish_output2(struct sk_buff *skb) + struct in6_addr *nexthop; + int ret; + +- skb->protocol = htons(ETH_P_IPV6); +- skb->dev = dev; +- + if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) { + struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); + +@@ -143,6 +140,13 @@ int ip6_output(struct sk_buff *skb) + return 0; + } + ++ /* ++ * IMQ-patch: moved setting skb->dev and skb->protocol from ++ * ip6_finish_output2 to fix crashing at netif_skb_features(). ++ */ ++ skb->protocol = htons(ETH_P_IPV6); ++ skb->dev = dev; ++ + return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING, skb, NULL, dev, + ip6_finish_output, + !(IP6CB(skb)->flags & IP6SKB_REROUTED)); +diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig +index e9410d1..ba801d5 100644 +--- a/net/netfilter/Kconfig ++++ b/net/netfilter/Kconfig +@@ -751,6 +751,18 @@ config NETFILTER_XT_TARGET_LOG + + To compile it as a module, choose M here. If unsure, say N. + ++config NETFILTER_XT_TARGET_IMQ ++ tristate '"IMQ" target support' ++ depends on NETFILTER_XTABLES ++ depends on IP_NF_MANGLE || IP6_NF_MANGLE ++ select IMQ ++ default m if NETFILTER_ADVANCED=n ++ help ++ This option adds a `IMQ' target which is used to specify if and ++ to which imq device packets should get enqueued/dequeued. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ + config NETFILTER_XT_TARGET_MARK + tristate '"MARK" target support' + depends on NETFILTER_ADVANCED +diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile +index bffdad7..050e613 100644 +--- a/net/netfilter/Makefile ++++ b/net/netfilter/Makefile +@@ -103,6 +103,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CT) += xt_CT.o + obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o + obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o + obj-$(CONFIG_NETFILTER_XT_TARGET_HMARK) += xt_HMARK.o ++obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o + obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o + obj-$(CONFIG_NETFILTER_XT_TARGET_LOG) += xt_LOG.o + obj-$(CONFIG_NETFILTER_XT_TARGET_NETMAP) += xt_NETMAP.o +diff --git a/net/netfilter/core.c b/net/netfilter/core.c +index 1fbab0c..4493417 100644 +--- a/net/netfilter/core.c ++++ b/net/netfilter/core.c +@@ -191,9 +191,11 @@ next_hook: + ret = NF_DROP_GETERR(verdict); + if (ret == 0) + ret = -EPERM; +- } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE) { ++ } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE || ++ (verdict & NF_VERDICT_MASK) == NF_IMQ_QUEUE) { + int err = nf_queue(skb, elem, pf, hook, indev, outdev, okfn, +- verdict >> NF_VERDICT_QBITS); ++ verdict >> NF_VERDICT_QBITS, ++ verdict & NF_VERDICT_MASK); + if (err < 0) { + if (err == -ECANCELED) + goto next_hook; +diff --git a/net/netfilter/nf_internals.h b/net/netfilter/nf_internals.h +index 61a3c92..5388a0e 100644 +--- a/net/netfilter/nf_internals.h ++++ b/net/netfilter/nf_internals.h +@@ -23,7 +23,7 @@ unsigned int nf_iterate(struct list_head *head, struct sk_buff *skb, + int nf_queue(struct sk_buff *skb, struct nf_hook_ops *elem, u_int8_t pf, + unsigned int hook, struct net_device *indev, + struct net_device *outdev, int (*okfn)(struct sk_buff *), +- unsigned int queuenum); ++ unsigned int queuenum, unsigned int queuetype); + int __init netfilter_queue_init(void); + + /* nf_log.c */ +diff --git a/net/netfilter/nf_queue.c b/net/netfilter/nf_queue.c +index 5d24b1f..28317dc 100644 +--- a/net/netfilter/nf_queue.c ++++ b/net/netfilter/nf_queue.c +@@ -27,6 +27,23 @@ + */ + static const struct nf_queue_handler __rcu *queue_handler __read_mostly; + ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++static const struct nf_queue_handler __rcu *queue_imq_handler __read_mostly; ++ ++void nf_register_queue_imq_handler(const struct nf_queue_handler *qh) ++{ ++ rcu_assign_pointer(queue_imq_handler, qh); ++} ++EXPORT_SYMBOL_GPL(nf_register_queue_imq_handler); ++ ++void nf_unregister_queue_imq_handler(void) ++{ ++ RCU_INIT_POINTER(queue_imq_handler, NULL); ++ synchronize_rcu(); ++} ++EXPORT_SYMBOL_GPL(nf_unregister_queue_imq_handler); ++#endif ++ + /* return EBUSY when somebody else is registered, return EEXIST if the + * same handler is registered, return 0 in case of success. */ + void nf_register_queue_handler(const struct nf_queue_handler *qh) +@@ -105,7 +122,8 @@ int nf_queue(struct sk_buff *skb, + struct net_device *indev, + struct net_device *outdev, + int (*okfn)(struct sk_buff *), +- unsigned int queuenum) ++ unsigned int queuenum, ++ unsigned int queuetype) + { + int status = -ENOENT; + struct nf_queue_entry *entry = NULL; +@@ -115,7 +133,17 @@ int nf_queue(struct sk_buff *skb, + /* QUEUE == DROP if no one is waiting, to be safe. */ + rcu_read_lock(); + +- qh = rcu_dereference(queue_handler); ++ if (queuetype == NF_IMQ_QUEUE) { ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ qh = rcu_dereference(queue_imq_handler); ++#else ++ BUG(); ++ goto err_unlock; ++#endif ++ } else { ++ qh = rcu_dereference(queue_handler); ++ } ++ + if (!qh) { + status = -ESRCH; + goto err_unlock; +@@ -205,9 +233,11 @@ void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict) + local_bh_enable(); + break; + case NF_QUEUE: ++ case NF_IMQ_QUEUE: + err = nf_queue(skb, elem, entry->pf, entry->hook, + entry->indev, entry->outdev, entry->okfn, +- verdict >> NF_VERDICT_QBITS); ++ verdict >> NF_VERDICT_QBITS, ++ verdict & NF_VERDICT_MASK); + if (err < 0) { + if (err == -ECANCELED) + goto next_hook; +diff --git a/net/netfilter/xt_IMQ.c b/net/netfilter/xt_IMQ.c +new file mode 100644 +index 0000000..1c3cd66 +--- /dev/null ++++ b/net/netfilter/xt_IMQ.c +@@ -0,0 +1,72 @@ ++/* ++ * This target marks packets to be enqueued to an imq device ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++static unsigned int imq_target(struct sk_buff *pskb, ++ const struct xt_action_param *par) ++{ ++ const struct xt_imq_info *mr = par->targinfo; ++ ++ pskb->imq_flags = (mr->todev & IMQ_F_IFMASK) | IMQ_F_ENQUEUE; ++ ++ return XT_CONTINUE; ++} ++ ++static int imq_checkentry(const struct xt_tgchk_param *par) ++{ ++ struct xt_imq_info *mr = par->targinfo; ++ ++ if (mr->todev > IMQ_MAX_DEVS - 1) { ++ pr_warn("IMQ: invalid device specified, highest is %u\n", ++ IMQ_MAX_DEVS - 1); ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static struct xt_target xt_imq_reg[] __read_mostly = { ++ { ++ .name = "IMQ", ++ .family = AF_INET, ++ .checkentry = imq_checkentry, ++ .target = imq_target, ++ .targetsize = sizeof(struct xt_imq_info), ++ .table = "mangle", ++ .me = THIS_MODULE ++ }, ++ { ++ .name = "IMQ", ++ .family = AF_INET6, ++ .checkentry = imq_checkentry, ++ .target = imq_target, ++ .targetsize = sizeof(struct xt_imq_info), ++ .table = "mangle", ++ .me = THIS_MODULE ++ }, ++}; ++ ++static int __init imq_init(void) ++{ ++ return xt_register_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg)); ++} ++ ++static void __exit imq_fini(void) ++{ ++ xt_unregister_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg)); ++} ++ ++module_init(imq_init); ++module_exit(imq_fini); ++ ++MODULE_AUTHOR("http://www.linuximq.net"); ++MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information."); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("ipt_IMQ"); ++MODULE_ALIAS("ip6t_IMQ"); ++ diff --git a/src/patches/linux-3.14.22-iwlwifi-noibss_only_on_radar_chan.patch b/src/patches/linux-3.14.22-iwlwifi-noibss_only_on_radar_chan.patch new file mode 100644 index 000000000..a6a950b91 --- /dev/null +++ b/src/patches/linux-3.14.22-iwlwifi-noibss_only_on_radar_chan.patch @@ -0,0 +1,22 @@ +diff -Naur linux-3.14.22.org/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c linux-3.14.22/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c +--- linux-3.14.22.org/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c 2014-10-24 17:33:57.165155190 +0200 +@@ -613,14 +613,15 @@ + /* set no-HT40, will enable as appropriate later */ + channel->flags = IEEE80211_CHAN_NO_HT40; + ++ if (eeprom_ch->flags & EEPROM_CHANNEL_RADAR) { ++ channel->flags |= IEEE80211_CHAN_RADAR; ++ + if (!(eeprom_ch->flags & EEPROM_CHANNEL_IBSS)) + channel->flags |= IEEE80211_CHAN_NO_IR; + + if (!(eeprom_ch->flags & EEPROM_CHANNEL_ACTIVE)) + channel->flags |= IEEE80211_CHAN_NO_IR; +- +- if (eeprom_ch->flags & EEPROM_CHANNEL_RADAR) +- channel->flags |= IEEE80211_CHAN_RADAR; ++} + + /* Initialize regulatory-based run-time data */ + channel->max_power = From 681c9bbe619ada94cc614719d276aa31397e2476 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 26 Oct 2014 20:11:04 +0100 Subject: [PATCH 173/297] installer: Implement option to run a postinstall script in the installer --- config/rootfiles/common/installer | 1 + src/installer/Makefile.am | 1 + src/installer/dracut-module/module-setup.sh | 3 +- src/installer/execute-postinstall.sh | 65 +++++++++++++++++++++ src/installer/main.c | 20 +++++++ 5 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 src/installer/execute-postinstall.sh diff --git a/config/rootfiles/common/installer b/config/rootfiles/common/installer index 71b537dd3..a0cb09343 100644 --- a/config/rootfiles/common/installer +++ b/config/rootfiles/common/installer @@ -1,4 +1,5 @@ #usr/bin/downloadsource.sh +#usr/bin/execute-postinstall.sh #usr/bin/start-networking.sh #usr/bin/installer #usr/lib/dracut/modules.d/99installer diff --git a/src/installer/Makefile.am b/src/installer/Makefile.am index 62625fd0f..d0e52dc18 100644 --- a/src/installer/Makefile.am +++ b/src/installer/Makefile.am @@ -34,6 +34,7 @@ bin_PROGRAMS = \ bin_SCRIPTS = \ downloadsource.sh \ + execute-postinstall.sh \ start-networking.sh #- installer ------------------------------------------------------------------- diff --git a/src/installer/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh index 992fcecb7..187b12eb1 100755 --- a/src/installer/dracut-module/module-setup.sh +++ b/src/installer/dracut-module/module-setup.sh @@ -18,6 +18,7 @@ install() { inst /etc/system-release inst /usr/bin/installer inst /usr/bin/downloadsource.sh + inst /usr/bin/execute-postinstall.sh inst /usr/local/bin/iowrap # Kernel drivers @@ -46,7 +47,7 @@ install() { inst_libdir_file "libnss_dns.so.*" # Misc. tools - inst_multiple cut grep eject id killall md5sum touch + inst_multiple chmod cut grep eject id killall md5sum touch inst_multiple -o fdisk cfdisk df ps top # Hardware IDs diff --git a/src/installer/execute-postinstall.sh b/src/installer/execute-postinstall.sh new file mode 100644 index 000000000..695f1b521 --- /dev/null +++ b/src/installer/execute-postinstall.sh @@ -0,0 +1,65 @@ +#!/bin/sh +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2014 IPFire Team # +# # +# 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 3 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, see . # +# # +############################################################################### + +function download() { + wget -U "IPFire-NetInstall/2.x" "$@" +} + +if [ $# -lt 2 ]; then + echo "$0: Insufficient number of arguments" >&2 + exit 2 +fi + +DESTINATION="${1}" +DOWNLOAD_URL="${2}" + +DOWNLOAD_TARGET="/tmp/post-install.exe" + +if download -O "${DESTINATION}${DOWNLOAD_TARGET}" "${DOWNLOAD_URL}"; then + echo "Downloading post-install script from ${DOWNLOAD_URL}..." + + # Make it executable + chmod a+x "${DESTINATION}${DOWNLOAD_TARGET}" + + # Replace /etc/resolv.conf so that we will have + cp -fb /etc/resolv.conf ${DESTINATION}/etc/resolv.conf + for i in /dev /proc /sys; do + mount --bind "${i}" "${DESTINATION}${i}" + done + + # Execute the downloaded script + chroot "${DESTINATION}" sh --login -c "${DOWNLOAD_TARGET}" + retval=$? + + # Cleanup the environment + mv -f ${DESTINATION}/etc/resolv.conf{~,} + for i in /dev /proc /sys; do + umount "${DESTINATION}${i}" + done + rm -f "${DESTINATION}${DOWNLOAD_TARGET}" + + exit ${retval} + +# In case the download failed +else + echo "Could not download the post-install script" >&2 + exit 1 +fi diff --git a/src/installer/main.c b/src/installer/main.c index d3e1c6e3e..ad388e6a9 100644 --- a/src/installer/main.c +++ b/src/installer/main.c @@ -233,6 +233,7 @@ static struct config { int perform_download; int disable_swap; char download_url[STRING_SIZE]; + char postinstall[STRING_SIZE]; } config = { .unattended = 0, .serial_console = 0, @@ -240,6 +241,7 @@ static struct config { .perform_download = 0, .disable_swap = 0, .download_url = DOWNLOAD_URL, + .postinstall = "\0", }; static void parse_command_line(struct config* c) { @@ -280,6 +282,13 @@ static void parse_command_line(struct config* c) { strncpy(c->download_url, val, sizeof(c->download_url)); c->perform_download = 1; + // Require networking for the download + c->require_networking = 1; + + // postinstall script + } else if (strcmp(key, "installer.postinstall") == 0) { + strncpy(c->postinstall, val, sizeof(c->postinstall)); + // Require networking for the download c->require_networking = 1; } @@ -807,6 +816,17 @@ int main(int argc, char *argv[]) { // Umount source drive and eject hw_umount(SOURCE_MOUNT_PATH); + // Download and execute the postinstall script + if (*config.postinstall) { + snprintf(commandstring, sizeof(commandstring), + "/usr/bin/execute-postinstall.sh %s %s", DESTINATION_MOUNT_PATH, config.postinstall); + + if (runcommandwithstatus(commandstring, title, _("Running post-install script..."), logfile)) { + errorbox(_("Post-install script failed.")); + goto EXIT; + } + } + snprintf(commandstring, STRING_SIZE, "/usr/bin/eject %s", sourcedrive); mysystem(logfile, commandstring); From 8acdb5225dd15f9f09bc22973bf55fda244cd3bf Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 26 Oct 2014 20:51:14 +0100 Subject: [PATCH 174/297] glibc: Fix build on x86 Some files that are patched for ARM are not available on the x86 source tree. Hence the sed command should not be executed. --- lfs/glibc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lfs/glibc b/lfs/glibc index 194f5565e..df3e39224 100644 --- a/lfs/glibc +++ b/lfs/glibc @@ -284,8 +284,10 @@ endif # Makefile:235: *** mixed implicit and normal rules. Stop. cd $(DIR_APP) && sed -i 's/ot \$$/ot:\n\ttouch $$@\n$$/' manual/Makefile +ifeq "$(MACHINE_TYPE)" "arm" # http://sourceware.org/ml/libc-ports/2011-09/msg00018.html cd $(DIR_APP) && sed -e "s/PIC/SHARED/g" -i ports/sysdeps/arm/{,eabi/}{set,__long}jmp.S +endif ifeq "$(ROOT)" "" ifeq "$(MACHINE_TYPE)" "arm" From bb882aa1f965e98d043ef6ba95a20ea361951242 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 26 Oct 2014 21:00:08 +0100 Subject: [PATCH 175/297] strongswan: Update to 5.2.1 --- lfs/strongswan | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lfs/strongswan b/lfs/strongswan index 5256b0ac6..dd1f0ac84 100644 --- a/lfs/strongswan +++ b/lfs/strongswan @@ -24,7 +24,7 @@ include Config -VER = 5.2.0 +VER = 5.2.1 THISAPP = strongswan-$(VER) DL_FILE = $(THISAPP).tar.bz2 @@ -48,7 +48,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 5cee4ee1a6ccb74400758b3ace54d46e +$(DL_FILE)_MD5 = dd3717c0aa59ab4591ca1812941ebb82 install : $(TARGET) From f4098d1ac7dc0662c3e7741f31e0e2cbedd46ece Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 27 Oct 2014 23:52:55 +0100 Subject: [PATCH 176/297] Set LatArCyrHeb-16 as default font --- src/initscripts/init.d/console | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/initscripts/init.d/console b/src/initscripts/init.d/console index d69ddd3c0..7381a69b3 100644 --- a/src/initscripts/init.d/console +++ b/src/initscripts/init.d/console @@ -17,26 +17,8 @@ . ${rc_functions} eval $(/usr/local/bin/readhash /var/ipfire/main/settings) -# English is default -FONT="lat0-16" +FONT="LatArCyrHeb-16" KEYMAP_CORRECTIONS="euro2" - -case "${LANGUAGE}" in - # German - de) - LEGACY_CHARSET="iso-8859-15" - FONT="lat0-16 -m 8859-15" - ;; - # Polish - pl) - FONT="lat2-16" - ;; - # Russish/Turkish - ru|tr) - FONT="LatArCyrHeb-16" - ;; -esac - UNICODE="1" BROKEN_COMPOSE="0" From e6f71226c51e4d89f33415760b86b5cda49c75fd Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 28 Oct 2014 00:49:19 +0100 Subject: [PATCH 177/297] installer: Initialize console font --- src/installer/dracut-module/run-installer.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/installer/dracut-module/run-installer.sh b/src/installer/dracut-module/run-installer.sh index d0611ce37..1a7bd1372 100644 --- a/src/installer/dracut-module/run-installer.sh +++ b/src/installer/dracut-module/run-installer.sh @@ -3,6 +3,12 @@ # IPFire Installer RC # +# Enable Unicode +echo -en '\033%G' && kbd_mode -u + +# Load default console font +setfont LatArCyrHeb-16 + # Silence the kernel echo >/proc/sys/kernel/printk "1 4 1 7" echo -n -e "\033[9;0]" From 39bfd4a1e31d3f9df8144aabb113f4d7bde55acd Mon Sep 17 00:00:00 2001 From: Umberto Parma Date: Thu, 23 Oct 2014 14:09:19 +0200 Subject: [PATCH 178/297] Add an Italian translation file web interface in Italian --- langs/it/cgi-bin/it.pl | 2683 ++++++++++++++++++++++++++++++++++++++++ langs/list | 1 + 2 files changed, 2684 insertions(+) create mode 100644 langs/it/cgi-bin/it.pl diff --git a/langs/it/cgi-bin/it.pl b/langs/it/cgi-bin/it.pl new file mode 100644 index 000000000..a283c3b1c --- /dev/null +++ b/langs/it/cgi-bin/it.pl @@ -0,0 +1,2683 @@ + +%tr = ( +%tr, +'Act as' => 'Lavora come:', +'Add Level7 rule' => 'Aggiungo una regola al Level7', +'Add Port Rule' => 'Aggiungo regola porta', +'Add Rule' => 'Aggiungo regola', +'Add a route' => 'Aggiungi una rotta', +'Async logging enabled' => 'Abilita scrittura asincrona di file syslog', +'Choose Rule' => 'Scegli una delle seguenti regole.', +'Class' => 'Classe', +'Class was deleted' => 'Una classe è stata cancellata', +'Client status and controlc' => 'Stato del client e controllo:', +'ConnSched action' => 'Azione:', +'ConnSched add action' => 'Aggiungo azione', +'ConnSched change profile title' => 'Cambio profilo:', +'ConnSched days' => 'Giorno:', +'ConnSched dial' => 'Connesso', +'ConnSched down' => 'giu', +'ConnSched hangup' => 'Disconnesso', +'ConnSched ipsecstart' => 'IPsec (re)start', +'ConnSched ipsecstop' => 'IPsec stop', +'ConnSched reboot' => 'Riavvia', +'ConnSched reconnect' => 'Riconnetto', +'ConnSched scheduled actions' => 'Schedula Azione', +'ConnSched scheduler' => 'Schedula', +'ConnSched select profile' => 'seleziona profilo', +'ConnSched shutdown' => 'Spegni', +'ConnSched time' => 'Ora:', +'ConnSched up' => 'Su', +'ConnSched weekdays' => 'Giorno della settimana:', +'Edit an existing route' => 'Modifica il percorso esistente', +'Enter TOS' => 'Attivare o disattivare TOS-bits
e premere Salva.', +'Existing Files' => 'File nel database', +'HDD temperature' => 'Temperatura HDD', +'Level7 Protocol' => 'Level7-Protocollo', +'Level7 Rule' => 'Level7-Rule', +'Level7 rule' => 'Level7 rule', +'Local VPN IP' => 'Network Interna (Verde):', +'MB read' => 'MB Letti', +'MB written' => 'MB Scritti', +'MTU' => 'MTU Dimensione:', +'Number of IPs for the pie chart' => 'Numero di IP per il grafico a torta', +'Number of Ports for the pie chart' => 'Numero di porte per il grafico a torta', +'OVPN' => 'OpenVPN', +'OpenVPN' => 'OpenVPN', +'Pages' => 'Pagine', +'Ping' => 'Ping :', +'Port Rule' => 'Regola-Porta', +'QoS not enabled' => 'QoS non è abilitata!', +'Queuelenght' => 'Queuelenght', +'Remote IP' => 'IP Remoto / Hostname (DynDNS):', +'Remote VPN IP' => 'VPN Subnet (e.g. 10.0.10.0/255.255.255.0):', +'Resolv' => 'Resolv-Retry:', +'Scan for Files' => 'Scansiona i files', +'Scan from Directory' => 'Scansiona le directory', +'Set time on boot' => 'Settare l orologio di sistema al boot', +'Subclass' => 'Subclass', +'TOS Bits' => 'TOS-Bits', +'TOS Rule' => 'TOS-Rule', +'TOS rule' => 'TOS rule', +'The class number does not match the specified interface.' => 'La classe non corrisponde l interfaccia specificata.', +'The destination IP address is invalid.' => 'L\' indirizzo IP di destinazione non è valido.', +'The source IP address is invalid.' => 'L\' indirizzo IP di origine non è valido.', +'Utilization on' => 'Utilizzo su', +'Verbose' => 'Verbose:', +'WakeOnLan' => 'Wake On Lan', +'a ca certificate with this name already exists' => 'Un certificato CA con questo nome esiste già.', +'a connection with this common name already exists' => 'Una connessione con questo nome comune esiste già.', +'a connection with this name already exists' => 'Una connessione con questo nome esiste già.', +'abort' => 'Annulla', +'access allowed' => 'Accesso consentito da:', +'access refused with this oinkcode' => 'Accesso negato al presente Codice', +'accounting' => 'Contabilità', +'accounting user nonpdc' => 'Contabilità - Nessun PDC Mode', +'accounting user pdc' => 'Contabilità - PDC Mode', +'action' => 'Azione', +'activate' => 'Attiva', +'activate user' => 'Attiva Utente', +'active' => 'Attiva', +'add' => 'Aggiungi', +'add a host' => 'Aggiungi host', +'add a new rule' => 'Aggiungi nuova regola:', +'add cron' => 'Aggiungi cronjob', +'add device' => 'Aggiungi device', +'add network' => 'Aggiungi network', +'add new alias' => 'Aggiungi nuovo alias', +'add new lease' => 'Aggiungi un lease fixed', +'add new ovpn' => 'Impostazioni OpenVPN:', +'add printer' => 'Aggiungi stampante', +'add service' => 'Aggiungi servizio', +'add share' => 'Aggiungi una condivisione', +'add subclass' => 'Aggiungi subclass', +'add user' => 'Aggiungi Utente', +'add xtaccess' => 'Aggiungi un accesso esterno', +'add-route' => 'Route addizionale', +'added from dhcp lease list' => 'Aggiunto dalla lista dei lease DHCP', +'addons' => 'Addons', +'admin user password has been changed' => 'è stata modificata la Password di Admin.', +'admin users' => 'Utente con privilegi di superutente', +'administrator user password' => 'Password per l utente Admin:', +'advanced' => 'avanzato', +'advanced server' => 'Opzioni avanzate server', +'advproxy AUTH always required' => 'Richiedere l\'autenticazione per indirizzi sorgente senza restrizioni', +'advproxy AUTH auth cache TTL' => 'autenticazione cache TTL (in minuti)', +'advproxy AUTH global settings' => 'Impostazioni di autenticazione globali', +'advproxy AUTH limit of IP addresses' => 'Limiti IP per utente', +'advproxy AUTH method' => 'Metodo di Autenticazione', +'advproxy AUTH method ident' => 'identd', +'advproxy AUTH method ldap' => 'LDAP', +'advproxy AUTH method ncsa' => 'Locale', +'advproxy AUTH method none' => 'None', +'advproxy AUTH method ntlm' => 'Windows', +'advproxy AUTH method radius' => 'RADIUS', +'advproxy AUTH no auth' => 'Domini senza autenticazione (uno per riga)', +'advproxy AUTH number of auth processes' => 'Numero di processi di autenticazione', +'advproxy AUTH realm' => 'Authentication realm prompt', +'advproxy AUTH user IP cache TTL' => 'User/IP cache TTL (in minutes)', +'advproxy IDENT authorized users' => 'Gli utenti autorizzati (uno per riga)', +'advproxy IDENT aware hosts' => 'Ident aware hosts (one per line)', +'advproxy IDENT identd settings' => 'Impostazioni identd comuni', +'advproxy IDENT required' => 'Richiesti l\’ identificazione identd', +'advproxy IDENT timeout' => 'Ident timeout (in seconds)', +'advproxy IDENT unauthorized users' => 'Gli utenti non autorizzati (uno per riga)', +'advproxy IDENT use negative access list' => 'Utilizzare il controllo degli accessi negativo', +'advproxy IDENT use positive access list' => 'Utilizzare il controllo degli accessi positivo', +'advproxy IDENT user based access restrictions' => 'Restrizioni di accesso basato sull utente', +'advproxy LDAP ADS' => 'Active Directory', +'advproxy LDAP NDS' => 'Novell eDirectory', +'advproxy LDAP V2' => 'LDAP versione 2', +'advproxy LDAP V3' => 'LDAP versione 3', +'advproxy LDAP auth' => 'LDAP autenticazione', +'advproxy LDAP basedn' => 'Base DN', +'advproxy LDAP binddn password' => 'Bind DN password', +'advproxy LDAP binddn settings' => 'Bind DN settings', +'advproxy LDAP binddn username' => 'Bind DN username', +'advproxy LDAP common settings' => 'Common LDAP settings', +'advproxy LDAP group access control' => 'Group based access control', +'advproxy LDAP group required' => 'Required group', +'advproxy LDAP port' => 'Porta', +'advproxy LDAP server' => 'LDAP Server', +'advproxy LDAP type' => 'LDAP type', +'advproxy MIME block types' => ' Block these MIME types (one per line)', +'advproxy MIME filter' => 'MIME type filter', +'advproxy NCSA auth' => 'Autenticazione utente Local', +'advproxy NCSA create user' => 'Crea utente', +'advproxy NCSA group' => 'Group', +'advproxy NCSA group membership' => 'Group membership', +'advproxy NCSA grp disabled' => 'Disabled', +'advproxy NCSA grp extended' => 'Extended', +'advproxy NCSA grp standard' => 'Standard', +'advproxy NCSA min password length' => 'Lunghezza minima della password', +'advproxy NCSA no accounts' => 'No user accounts available', +'advproxy NCSA password' => 'Password', +'advproxy NCSA password confirm' => 'Password (conferma)', +'advproxy NCSA redirector bypass' => 'Bypass redirection for members of the group', +'advproxy NCSA update user' => 'Update user', +'advproxy NCSA user accounts' => 'User accounts', +'advproxy NCSA user management' => 'Gestione utenti', +'advproxy NCSA username' => 'Username', +'advproxy NTLM BDC hostname' => 'BDC hostname', +'advproxy NTLM PDC hostname' => 'PDC hostname', +'advproxy NTLM auth' => 'Windows NT/2003 autenticazione', +'advproxy NTLM auth mode' => 'metodo di autenticazione', +'advproxy NTLM authorized users' => 'Authorized domain users (one per line)', +'advproxy NTLM domain' => 'Domain', +'advproxy NTLM domain settings' => 'Common domain settings', +'advproxy NTLM unauthorized users' => 'Unauthorized domain users (one per line)', +'advproxy NTLM use integrated auth' => 'Enable Windows integrated authentication', +'advproxy NTLM use negative access list' => 'Use negative access control', +'advproxy NTLM use positive access list' => 'Use positive access control', +'advproxy NTLM user based access restrictions' => 'User based access restrictions', +'advproxy RADIUS authorized users' => 'Authorized users (one per line)', +'advproxy RADIUS identifier' => 'Identifier', +'advproxy RADIUS port' => 'Port', +'advproxy RADIUS radius settings' => 'Common RADIUS settings', +'advproxy RADIUS secret' => 'Shared secret', +'advproxy RADIUS server' => 'RADIUS Server', +'advproxy RADIUS unauthorized users' => 'Unauthorized users (one per line)', +'advproxy RADIUS use negative access list' => 'Use negative access control', +'advproxy RADIUS use positive access list' => 'Use positive access control', +'advproxy RADIUS user based access restrictions' => 'User based access restrictions', +'advproxy UA enable filter' => 'Attiva il controllo del browser', +'advproxy access' => 'Access', +'advproxy admin mail' => 'Cache administrator e-mail', +'advproxy advanced proxy' => 'Advanced Proxy', +'advproxy advanced web proxy' => 'Advanced Web Proxy', +'advproxy advanced web proxy configuration' => 'Configurazione Avanzata del Proxy WEB', +'advproxy allowed subnets' => 'basato sulle sottoreti (uno per riga)', +'advproxy allowed web browsers' => 'sono permessi i seguenti clienti per l\'accesso web', +'advproxy back to main page' => 'Torna alla pagina principale', +'advproxy banned ip clients' => 'Indirizzi IP esclusi (uno per riga)', +'advproxy banned mac clients' => 'Indirizzi MAC esclusi (uno per riga)', +'advproxy cache management' => 'Cache management', +'advproxy cache replacement policy' => 'Policy di sostituzione Cache', +'advproxy cache-digest' => 'Enable Cache-Digest Generation', +'advproxy chgwebpwd ERROR' => 'E R R O R E :', +'advproxy chgwebpwd SUCCESS' => 'S U C C E S S :', +'advproxy chgwebpwd change password' => 'Cambia password', +'advproxy chgwebpwd change web password' => 'C a m b i a   P a s s w o r d   a c c e s s o   W E B', +'advproxy chgwebpwd new password' => 'Nuova password', +'advproxy chgwebpwd new password confirm' => 'Nuova password (conferma)', +'advproxy chgwebpwd old password' => 'Password attuale', +'advproxy chgwebpwd username' => 'Username', +'advproxy classroom extensions' => 'estensioni di classe', +'advproxy clear cache' => 'Clear Cache', +'advproxy client IP forwarding' => 'Indirizzo del client per inoltro IP', +'advproxy common settings' => 'Impostazioni Comuni', +'advproxy content based throttling' => 'Abilita limitazioni per contenuto', +'advproxy cre disabled' => 'The management interface has been disabled by the administrator', +'advproxy cre group definitions' => 'Definizioni del gruppo in classe', +'advproxy cre supervisors' => 'Indirizzi IP Supervisore (uno per riga)', +'advproxy destination ports' => 'Porte di destinatinazione', +'advproxy download throttling' => 'Limiti Download', +'advproxy enabled' => 'Abilitato', +'advproxy enabled on' => 'Abilitato su', +'advproxy errmsg acl cannot be empty' => 'Access control list cannot be empty', +'advproxy errmsg auth cache ttl' => 'Invalid value for authentication cache TTL', +'advproxy errmsg auth children' => 'Invalid number of authentication processes', +'advproxy errmsg auth ipcache may not be null' => 'Authentication cache TTL may not be 0 when using IP address limits', +'advproxy errmsg auth ipcache ttl' => 'Invalid value for user/IP cache TTL', +'advproxy errmsg cache' => 'The RAM cache size is greater than the harddisk cache size:', +'advproxy errmsg change fail' => 'Password could not be changed', +'advproxy errmsg change success' => 'Password for web access sucessfully changed', +'advproxy errmsg hdd cache size' => 'Invalid value for harddisk cache size (min 10 MB required)', +'advproxy errmsg ident timeout' => 'Invalid ident timeout', +'advproxy errmsg invalid bdc' => 'Invalid hostname for backup domain controller', +'advproxy errmsg invalid destination port' => 'Invalid destination port', +'advproxy errmsg invalid ip or mask' => 'Invalid IP address or network mask', +'advproxy errmsg invalid mac' => 'Invalid MAC address', +'advproxy errmsg invalid pdc' => 'Invalid hostname for primary domain controller', +'advproxy errmsg invalid proxy port' => 'Invalid proxy port', +'advproxy errmsg invalid upstream proxy' => 'Invalid upstream proxy IP/hostname', +'advproxy errmsg invalid upstream proxy username or password setting' => 'Invalid upstream proxy username or password setting', +'advproxy errmsg invalid user' => 'Username does not exist', +'advproxy errmsg ldap base dn' => 'LDAP base DN required', +'advproxy errmsg ldap bind dn' => 'LDAP bind DN username and password required', +'advproxy errmsg ldap port' => 'Invalid LDAP port number', +'advproxy errmsg ldap server' => 'Invalid IP address/hostname for LDAP Server', +'advproxy errmsg max userip' => 'Invalid number of IP addresses per user', +'advproxy errmsg mem cache size' => 'Invalid value for memory cache size', +'advproxy errmsg no browser' => 'Almeno un browser o un client devono essere selezionati per l\'accesso web', +'advproxy errmsg no password' => 'Password can not be empty', +'advproxy errmsg no username' => 'Username can not be empty', +'advproxy errmsg non-transparent proxy required' => 'Proxy Web deve essere eseguito in modalità non trasparente per l\'autenticazione', +'advproxy errmsg ntlm domain' => 'Windows domain name required', +'advproxy errmsg ntlm pdc' => 'Hostname for primary domain controller required', +'advproxy errmsg password incorrect' => 'Password incorrect', +'advproxy errmsg password length' => 'Invalid value for password length', +'advproxy errmsg password length 1' => 'Password must have at least ', +'advproxy errmsg password length 2' => ' characters', +'advproxy errmsg passwords different' => 'Passwords don\'t match', +'advproxy errmsg proxy ports equal' => 'The proxy port and the transparent port cannot be equal.', +'advproxy errmsg radius port' => 'Invalid RADIUS port number', +'advproxy errmsg radius secret' => 'RADIUS shared secret required', +'advproxy errmsg radius server' => 'Invalid IP address for RADIUS Server', +'advproxy errmsg time restriction' => 'Invalid time restriction', +'advproxy error design' => 'Design dei messaggi di errore', +'advproxy error language' => 'Lingua dei messaggi di errore', +'advproxy fake referer' => 'Fake referer submitted to external sites', +'advproxy fake useragent' => 'Fake useragent submitted to external sites', +'advproxy friday' => 'Ven', +'advproxy from' => 'Da', +'advproxy hdd cache size' => 'Harddisk cache size (MB)', +'advproxy invalid num of children' => 'Invalid number of filter processes', +'advproxy log enabled' => 'Abilito Log', +'advproxy log query' => 'Termini di ricerca del LOG', +'advproxy log settings' => 'Impostazioni di Log', +'advproxy log useragent' => 'Log useragents', +'advproxy max download size' => 'Max download size (KB)', +'advproxy max size' => 'Max object size (KB)', +'advproxy max upload size' => 'Max upload size (KB)', +'advproxy memory replacement policy' => 'Polcy di sostituzione della memoria', +'advproxy min size' => 'Min object size (KB)', +'advproxy mode allow' => 'allow', +'advproxy mode deny' => 'deny', +'advproxy monday' => 'Lun', +'advproxy network based access' => 'Controllo dell\'accesso alla rete ', +'advproxy no cache sites' => 'Non memorizzare nella cache i domini (uno per riga)', +'advproxy no clients defined' => 'No clients defined', +'advproxy no connection auth' => 'No connection oriented authentication forwarding', +'advproxy no cre groups' => 'There are no access groups available', +'advproxy no internal proxy on blue' => 'Disable internal proxy access from Blu to other subnets', +'advproxy no internal proxy on green' => 'Disabilitare l\'accesso al proxy interno dalle sottoreti', +'advproxy number of L1 dirs' => 'Number of level-1 subdirectories', +'advproxy off' => 'Proxy off', +'advproxy offline mode' => 'Attiva modalità offline', +'advproxy on' => 'Proxy Acceso', +'advproxy privacy' => 'Privacy', +'advproxy proxy port' => 'Porta Proxy', +'advproxy proxy port transparent' => 'Porta Transparente', +'advproxy ram cache size' => 'Dimensione della Memoria di cache (MB)', +'advproxy redirector children' => 'Numero dei processi', +'advproxy reset' => 'Reset', +'advproxy saturday' => 'Sab', +'advproxy save and restart' => 'Save and Restart', +'advproxy squid version' => 'Versione cache di Squid', +'advproxy squidclamav' => 'SquidClamav', +'advproxy ssadvanced proxy' => 'advanced proxy', +'advproxy ssl ports' => 'Porte SSL sono ammessi (uno per riga)', +'advproxy standard' => 'Standard', +'advproxy standard ports' => 'Porte standard sono ammessi (uno per riga)', +'advproxy sunday' => 'Dom', +'advproxy supervisor password' => 'Password di Supervisore', +'advproxy suppress version' => 'NON visualizare le informazioni della versione', +'advproxy throttle binary' => 'Files Binary', +'advproxy throttle dskimg' => 'Immagini CD', +'advproxy throttle mmedia' => 'Multimedia', +'advproxy throttling per host on' => 'Limite per host', +'advproxy throttling total on' => 'Limite Globale', +'advproxy throttling unlimited' => 'unlimited', +'advproxy thursday' => 'Gio', +'advproxy time restrictions' => 'Restrizioni temporali', +'advproxy to' => 'A', +'advproxy transfer limits' => 'limiti di trasferimento', +'advproxy transparent on' => 'Transparente su', +'advproxy tuesday' => 'Mar', +'advproxy unknown' => 'Unknown', +'advproxy unrestricted ip clients' => 'Gli indirizzi IP senza restrizioni (uno per riga)', +'advproxy unrestricted mac clients' => 'Gli indirizzi MAC senza restrizioni (uno per riga)', +'advproxy update accelerator' => 'Update accelerator', +'advproxy update information' => 'There is an updated version available for download. Visit
http://www.advproxy.net for more information.', +'advproxy update notification' => 'Update notification!', +'advproxy upstream password' => 'Upstream password', +'advproxy upstream proxy' => 'Upstream proxy', +'advproxy upstream proxy host:port' => 'Upstream proxy (host:port)', +'advproxy upstream username' => 'Upstream username', +'advproxy url filter' => 'Filtro URL', +'advproxy username forwarding' => 'Nome Utente per inoltro', +'advproxy via forwarding' => 'Indirizzo di inoltro del proxy', +'advproxy visible hostname' => 'Hostname Visible', +'advproxy web browser' => 'Web browser', +'advproxy wednesday' => 'Mer', +'again' => 'Again:', +'age second' => 'Secondi', +'age seconds' => 'Secondi', +'age shour' => 'h', +'age sminute' => 'min', +'age ssecond' => 'sec', +'aktiv' => 'Attivo', +'album' => 'Album', +'alcatelusb help' => 'To utilise the Speedtouch 330 or Speedtouch USB modem you must upload the firmware to your IPFire box. Please download the Embedded Firmware package for SpeedTouch 330 from speedtouch.com, unzip and then upload the appropriate file for your modem : KQD6_3.xxx when Rev<4 or ZZZL_3.xxx for Rev=4 using the form below.', +'alcatelusb upload' => 'Upload Speedtouch USB firmware', +'alias ip' => 'Alias IP', +'aliases' => 'Aliases', +'aliases not active' => 'Aliases will not be active unless your RED interface is STATIC', +'all' => 'All', +'all interfaces' => 'All Interfaces', +'all services' => 'Tutti i Servizi', +'all updates installed' => 'All updates installed', +'allmsg' => 'Vedi Tutto', +'alt dialup' => 'Dialup', +'alt home' => 'Pagina Principale', +'alt information' => 'Informazione', +'alt logs' => 'Log', +'alt ovpn' => 'OpenVPN', +'alt proxy' => 'Proxy', +'alt services' => 'Servizi', +'alt system' => 'Sistema', +'alt vpn' => 'VPNs', +'and' => 'And', +'ansi t1.483' => 'TO BE REMOVED', +'apcupsd' => 'APC-UPS status', +'apply' => 'Apply now', +'april' => 'Aprile', +'archive not exist' => 'Configuration archive does not exist', +'are you sure' => 'Are you sure?', +'arp table entries' => 'ARP Table Entries', +'artist' => 'Artist', +'atm device' => 'Device:', +'atm settings' => 'ATM settings', +'attemps' => 'Attempts', +'attention' => 'ATTENTION', +'august' => 'Agosto', +'authentication' => 'Authentication:', +'automatic' => 'Automatic', +'available updates' => 'Available updates:', +'average' => 'Average', +'avoid dod' => 'Do not use this option with Dial on Demand! Mainly used if your IPFire is behind a router. Your RED IP must be inside one of the three reserved network numbers e.g. 10/8, 172.16/12, 192.168/16', +'back' => 'BACK', +'backup' => 'Backup', +'backup archive' => 'Backup File (.dat)', +'backup clear archive' => 'Clear Backup File (.gz)', +'backup config floppy' => 'Backup Configuration - Floppy Disk', +'backup configuration' => 'Backup Configuration:', +'backup erase key' => 'Erase key', +'backup explain key' => 'Backup are encrypted using a key. To avoid illegal backup manipulations, IPFire only restores a backup that is encrypted with the key you will specify here. You have three options available to you', +'backup explain key li1' => 'let IPFire create key for you.', +'backup explain key li2' => 'import a saved key (possibly password protected).', +'backup explain key li3' => 'extract a key from a non-encrypted 1.4.10 backup only.', +'backup explain key no1' => 'you should save this key if you plan to restore new machines, IPFire accepts only once key creation/import.', +'backup explain key no2' => 'legacy floppy backups are not concerned with this key.', +'backup export key' => 'Export key', +'backup extract key' => 'Extract key', +'backup from' => 'Backup from', +'backup generate key' => 'Generate key', +'backup import dat file' => 'Import a backup (.dat) file', +'backup import key' => 'Import key', +'backup key' => 'Backup Encryption Key', +'backup key file' => 'Backup key file', +'backup key info' => 'IPFire restricts access to the backup key, thus you must know root password. You have possibility to protect this key outside of IPFire with a password.', +'backup media info' => 'Floppy and/or unformatted media may display stranges partitions sizes. In this case, select the whole device. Remenber to mount harddisk before removing device. Note: floppy created here are not usable with IPFire installer program!', +'backup missing key' => 'Need the backup key to restore a set', +'backup password' => 'Backup password', +'backup protect key password' => 'Backup key password', +'backup sets' => 'Backup sets', +'backup to floppy' => 'Backup to floppy', +'backupaddon' => 'Addon Backup', +'backupprofile' => 'In case reconnection fails, switch to profile', +'backups' => 'backups', +'backupwarning' => 'Per favore prima di ripristinare il backup del sistema e/o il backup addon, Si prega di mantenere il nome del file originale, di quando é stato scaricato.', +'bad characters in' => 'Bad characters in ', +'bad characters in script field' => 'Bad characters in script field', +'bad characters in the telephone number field' => 'Bad characters in the telephone number field.', +'bad destination range' => 'The Destination port range has a first value that is greater than or equal to the second value.', +'bad ignore filter' => 'Bad ignore filter:', +'bad return code' => 'Helper program returned error code', +'bad source range' => 'The Source port range has a first value that is greater than or equal to the second value.', +'bandwidth usage' => 'bandwidth usage (external)', +'bandwitherror' => 'You cannot change the bandwithsettings, with Qos being enabled. First disable Qos.